想想自己的学习经历,自己勉强算是一个坚持自学,并且把终身学习做为重要人生目标的人。从初中开始,基本上所有的东西都是自学的,也很喜欢接触新事物,初中时,因为一些学校原因,初三撤学,然后同年考自学考上高中,高中也基本没在学校待过多久,主要是不喜欢在课堂学习。后来上了大学,专业电子信息,四年基本没上过课,主要是自学,后来读研,一直在导师公司上班,也基本没上过课,后来读博,由于种种原因,放弃了,就工作了。很奇葩的经历!
大学觉得跟着老师学太慢,就决定自学,从大一起就泡在图书馆,不知道要学些什么,就学士兵许三多,从A读到Z。是的,当时下决心大学四年,从A读到Z。我们学校藏书600多万册,全读是开玩笑,所以决定选定10到20个方向,每个方向泛读100到200本书,精读10到20本书,也就是说,要从600万册书中选2000册泛读,200到300册精读,客观的讲,我还真做到了。很笨的方法,收益却很大。至少建立了十多个学科的基础认知,在自己整体认知能力和思维能力上增加了不少维度和深度。
回过头来再说学习,我目前出事计算机,也就是码农行当。身边很多人都只是把编码或技术当成一个饭碗,当然,也挺好。但问题是大多数人走到一定程度就不再追求精进了。前段时间云栖社区有一个关于科班程序员和野生程序员的讨论,很有意思,我大学起学过十多门语言,研究生毕业前就有差不多10万行的工程代码经验,但是所有东西都是自学的,所以我也搞不清自己是科班还是野生,就当是科班中的野生派吧。关于这个问题,我有自己的看法,其实衡量一个程序员是科班还是野生来下结论有点标签化思考问题。我觉的评判一个程序员的最好方式是判断他大脑里有多少清晰的技术概念、这些概念之间有多少清晰的联系以及其清晰程度。
有些跑题了,还是回来说学习的事,很多同学同事以及朋友都觉得计算机发展太快,概念层出不穷,还有人只是简单尝试觉得自己不合适做程序员,其实大多时不想吃苦。我个人觉得学习一门技术其实挺简单的,大不了用笨办法。
什么是笨办法呢?
比如前段时间大数据大火,很多朋友想转型大数据工程师,学hadoop,spark,es什么的,但是又陷入茫然的恐惧中不知如何下手。我认为学习一个新的领域,主要有三个阶段:
- 入门阶段
这个阶段会有一定的痛苦,甚至很痛苦,很多人就此放弃了。其实入门的痛苦是必然的,大脑接受新的知识就是大脑重构的过程,所以痛苦很正常,关键是坚持和找合适的方法快速跨越入门阶段。 - 得心应手
过来入门阶段,马上就会觉得越来越得心应手,这个阶段可能会持续很长时间,这个阶段很舒服,但是更应该警惕。 - 融会贯通
有句亘古的观点:忘记所学后留下的东西才是真正学到的东西。这个阶段就是这样子。
就以计算机语言打个比方,第一个阶段是能使用该语言编写一些apps,并且不断了解该语言的运行环境搭建,工程构建等。第二个阶段是理解该语言的运行原理,比如java/scala,理解JVM是必须的。第三个阶段,理解为什么,也就是说要理解Java的语法为什么这样设计,而不是设计成别的样子,jvm、第三方库/框架为什么采用这种方式设计而不是别的方式等。这就是忘记所学后留下的东西。
笨方法
什么是笨方法呢?举个例子,这几年总有朋友问我hadoop,spark等怎么学,我以spark举例,学习的笨方法是:
- 找5笨Spark的经典数据
- 阅读spark源代码
- 写至少2万行代码
- 构建自己的轮子
好像等于没说,先等等,
- 5本spark经典书籍,里边的程序先写两边,也就是说要看两边;按每本书2cm厚,也就是说该工作量等同于要精读10cm厚的书。
- 阅读源代码,spark共30万行代码左右(包括注释),需要读的不超过3万行,读三遍,算10万行,一张A4纸正反面可以打印100行,10行需要打印1000张,差不多10cm厚。也就是说阅读源码的工作量约等于精读10cm厚的书
- 写代码是必须的,这个不还计算,但这相当于上学时做题需要演算把。
- 造轮子,我对编码的理解是,工程/工作中的代码需要简练,重点是快速解决问题和易维护性。而我们要提高自己的编码能力和技术视角,在工作之余是需要造点轮子玩的,不为这些轮子能实战,只为锻炼自己。
好,我总结下,前两点,相当于要精读20cm厚的书,后两点,需要不断积累,其实只要把平时玩游戏,看美剧的时间减省下来这些足够了。用不了两年甚至一年就够了。精读20cm厚的书,正常人愿意吃苦,每周可以精读一本1cm厚的书(每天一到两小时,每小时10到15页,已经很保守了,实在做不到,就在厕所放本书,每次多呆15分钟,每天上两次,一个小时就有了)20周也就是5个月就可以完成。总的来说一个学习能力普通的人,可以花5个月学习一个新领域的技能,可以到达的阶段是完全得心应手,老手或学习能力强的人,可能两到三个月就够了。
更重要的是,学的东西越多,之前到达的阶段越深,之后学习速度越快,到达深层阶段也越容易,这叫“回报加速定律”