关于学习的思考 - 不行就用笨办法【一千零一日】

简介: 做一个终身学习者,以不断提升认知为人生目标,向终身学习中致敬。

想想自己的学习经历,自己勉强算是一个坚持自学,并且把终身学习做为重要人生目标的人。从初中开始,基本上所有的东西都是自学的,也很喜欢接触新事物,初中时,因为一些学校原因,初三撤学,然后同年考自学考上高中,高中也基本没在学校待过多久,主要是不喜欢在课堂学习。后来上了大学,专业电子信息,四年基本没上过课,主要是自学,后来读研,一直在导师公司上班,也基本没上过课,后来读博,由于种种原因,放弃了,就工作了。很奇葩的经历!
大学觉得跟着老师学太慢,就决定自学,从大一起就泡在图书馆,不知道要学些什么,就学士兵许三多,从A读到Z。是的,当时下决心大学四年,从A读到Z。我们学校藏书600多万册,全读是开玩笑,所以决定选定10到20个方向,每个方向泛读100到200本书,精读10到20本书,也就是说,要从600万册书中选2000册泛读,200到300册精读,客观的讲,我还真做到了。很笨的方法,收益却很大。至少建立了十多个学科的基础认知,在自己整体认知能力和思维能力上增加了不少维度和深度。
回过头来再说学习,我目前出事计算机,也就是码农行当。身边很多人都只是把编码或技术当成一个饭碗,当然,也挺好。但问题是大多数人走到一定程度就不再追求精进了。前段时间云栖社区有一个关于科班程序员和野生程序员的讨论,很有意思,我大学起学过十多门语言,研究生毕业前就有差不多10万行的工程代码经验,但是所有东西都是自学的,所以我也搞不清自己是科班还是野生,就当是科班中的野生派吧。关于这个问题,我有自己的看法,其实衡量一个程序员是科班还是野生来下结论有点标签化思考问题。我觉的评判一个程序员的最好方式是判断他大脑里有多少清晰的技术概念、这些概念之间有多少清晰的联系以及其清晰程度。
有些跑题了,还是回来说学习的事,很多同学同事以及朋友都觉得计算机发展太快,概念层出不穷,还有人只是简单尝试觉得自己不合适做程序员,其实大多时不想吃苦。我个人觉得学习一门技术其实挺简单的,大不了用笨办法。
什么是笨办法呢?
比如前段时间大数据大火,很多朋友想转型大数据工程师,学hadoop,spark,es什么的,但是又陷入茫然的恐惧中不知如何下手。我认为学习一个新的领域,主要有三个阶段:

  1. 入门阶段
    这个阶段会有一定的痛苦,甚至很痛苦,很多人就此放弃了。其实入门的痛苦是必然的,大脑接受新的知识就是大脑重构的过程,所以痛苦很正常,关键是坚持和找合适的方法快速跨越入门阶段。
  2. 得心应手
    过来入门阶段,马上就会觉得越来越得心应手,这个阶段可能会持续很长时间,这个阶段很舒服,但是更应该警惕。
  3. 融会贯通
    有句亘古的观点:忘记所学后留下的东西才是真正学到的东西。这个阶段就是这样子。

就以计算机语言打个比方,第一个阶段是能使用该语言编写一些apps,并且不断了解该语言的运行环境搭建,工程构建等。第二个阶段是理解该语言的运行原理,比如java/scala,理解JVM是必须的。第三个阶段,理解为什么,也就是说要理解Java的语法为什么这样设计,而不是设计成别的样子,jvm、第三方库/框架为什么采用这种方式设计而不是别的方式等。这就是忘记所学后留下的东西。


笨方法

什么是笨方法呢?举个例子,这几年总有朋友问我hadoop,spark等怎么学,我以spark举例,学习的笨方法是:

  1. 找5笨Spark的经典数据
  2. 阅读spark源代码
  3. 写至少2万行代码
  4. 构建自己的轮子
    好像等于没说,先等等,

  1. 5本spark经典书籍,里边的程序先写两边,也就是说要看两边;按每本书2cm厚,也就是说该工作量等同于要精读10cm厚的书
  2. 阅读源代码,spark共30万行代码左右(包括注释),需要读的不超过3万行,读三遍,算10万行,一张A4纸正反面可以打印100行,10行需要打印1000张,差不多10cm厚。也就是说阅读源码的工作量约等于精读10cm厚的书
  3. 写代码是必须的,这个不还计算,但这相当于上学时做题需要演算把。
  4. 造轮子,我对编码的理解是,工程/工作中的代码需要简练,重点是快速解决问题和易维护性。而我们要提高自己的编码能力和技术视角,在工作之余是需要造点轮子玩的,不为这些轮子能实战,只为锻炼自己。
    好,我总结下,前两点,相当于要精读20cm厚的书,后两点,需要不断积累,其实只要把平时玩游戏,看美剧的时间减省下来这些足够了。用不了两年甚至一年就够了。精读20cm厚的书,正常人愿意吃苦,每周可以精读一本1cm厚的书(每天一到两小时,每小时10到15页,已经很保守了,实在做不到,就在厕所放本书,每次多呆15分钟,每天上两次,一个小时就有了)20周也就是5个月就可以完成。总的来说一个学习能力普通的人,可以花5个月学习一个新领域的技能,可以到达的阶段是完全得心应手,老手或学习能力强的人,可能两到三个月就够了。

更重要的是,学的东西越多,之前到达的阶段越深,之后学习速度越快,到达深层阶段也越容易,这叫“回报加速定律”

目录
相关文章
|
9月前
不是工作不好找,是你真的不行
不是工作不好找,是你真的不行
|
9月前
|
Rust 前端开发 算法
|
10月前
|
搜索推荐 小程序 程序员
看过很多教程,却依然写不好一个程序,怎么破?
最近在和学员的沟通中,发现不少初学者面临这样一个问题:了解了一些基本的语法,看得懂书上的示例,但是面临一个新的编程问题时,依然感到无从下手。
|
11月前
|
存储 编解码 数据处理
还在为搞不懂笔记本电脑参数而苦恼么?一篇文章就够啦
还在为搞不懂笔记本电脑参数而苦恼么?一篇文章就够啦
228 4
|
12月前
二叉树详解一万字(基础版)看着一篇就够了(下)
对于堆的调整相当于是对数组的一种调整,将数组的首地址传进来,要调整的数组的长度,相当于是退出的循环条件,向下传给进来parent(root),向上传给child(size-1),然后再用一个表示另外一个。将参数传进来之后进行比较,先比较两个孩子,找出小的那个,然后交换较小孩子和双亲节点,在比较左右孩子的时候要保证右孩子也存在才可以进行比较,就是child+1<size,原因就是这里是堆,是完全二叉树
42 0
|
存储 Web App开发 缓存
一个简单的弱网差点搞死了组内前端
最近上线了一个 React Native 外访项目,用户为公司外访员,外访员根据公司业务去实地考察,收集记录一些资料,考察记录资料的过程全部用公司配的专用手机,里面安装了当前外访项目APP。目前项目试运行阶段,还没有正式交付。APP项目上线后,在用户真实使用中遇到一些各种各样的问题,有些问题处理时也比较棘手(如弱网情况),这次主要复盘APP在实际场景中的弱网(或网络不稳定)相关的问题。
一个简单的弱网差点搞死了组内前端
|
存储
【锟斤拷�⊠是怎样炼成的】——两分钟帮你彻底弄懂计算机的编码原理
【锟斤拷�⊠是怎样炼成的】——两分钟帮你彻底弄懂计算机的编码原理
143 0
测试点杂记,总有一点是你忘记的
在测试领域中,测试点,测试方法,比比皆是,工作刚入门的时候,总会去了解学习这些内容,工作时间长了,有些就忽略了,不知道有些测试点或者测试细则规范等,你是否需要重新温习一下,而知新呢?
|
存储 缓存 负载均衡
10大高性能开发宝石,我要消灭一半程序员!
10大高性能开发宝石,我要消灭一半程序员!
130 0
10大高性能开发宝石,我要消灭一半程序员!