学习能力决定了我们的成长速度。很多人“学完就忘”“只知其一,不知其二”“看着很忙,但没成长”,有一些人却总能很快地成为一个新领域的胜任者,两者的区别主要体现在学习积极性、学习内容、学习方式方面,如表2-1所示。
表2-1 两种不同的学习情况
在学习积极性方面,优秀的开发者一般自驱力比较强,能够自发学习一些知识,这样的结果是知识储备更加全面,面对同样的问题,处理手段更多;与之不同的是,很多人是被动学习的,等到非用不可时才去学习,可能会在机会来临时却没有做好准备。
在学习内容方面,优秀的开发者会花很多时间确认学习方向,均衡学习内容的长期价值和短期收益;与之不同的是,很多人是迷茫的,不知道该学什么,常常会学习热门知识,不考虑其是否有落地场景。
在学习方式方面,优秀的开发者会集中学习和系统性学习,在做好规划后,花大量时间集中学习一个主题的知识,同时综合多种学习资料,得到一个全面、系统的结论;与之不同的是,很多人都有穿插式学习和局部学习的情况。穿插式学习是指并发学习多种内容,比如上班路上看 Kotlin协程课程,午休看云原生课程,下班看大数据课程,第二天又再学新的知识,长期下来,似乎知道很多,但又只知道皮毛。局部学习是指在学习新技术或者新框架时,只学习了某一个环节,没有掌握全貌,这样的结果是不知道各个环节是如何协作起来的,也就无法学到整体设计思想,无法理解其与旧技术或旧框架的区别。
在了解如何在学习积极性、学习内容和学习方式方面做得更好后,我们可以像如下这样行动。
● 明确自己的近期目标和长期目标,写下本周、本月、本年、近三年最重要的事是什么,如表2-2所示。
● 列出完成这些目标需要做哪些事,尽量写得可以量化。
● 列出实现这些结果需要的知识有什么,自己需要补充哪些。
● 把这个表放到自己随时可以看到的地方,比如打印出来贴在门上,或者用作计算机、手机桌面都可以。
● 定期更新进度。
表2-2 改善学习能力的方法
我们需要不断地提醒自己目前最重要的是什么,把它铭记在心,然后把时间花在能够帮助我们实现目标的事情上。
在选择学习的知识时,最好花更多时间学习底层的、通用的内容,比如计算机基础、框架设计思想、技术选型方法等,这些知识的“半衰期”比语言、框架、工具的“半衰期”更长。
拿Android开发来说,官方框架和第三方库为了让更多人使用,其API设计可能会随时调整,没必要花很多时间追随潮流。更好的选择是,吃透一个同类型的框架,深刻理解其解决了什么问题、如何解决的即可。在新框架出来并且有一定热度后,通过社区分析文章对比其是否有质的突破,然后决定是否要花时间全面学习它。学有余力,再花一些时间了解底层技术,比如Linux系统、Android Framework等,这些是变化更少、更有长期价值的技术。
如果需要学习的与工作相关的知识很多,不得不并发学习,可以考虑针对不同内容建立知识体系(比如采用博客、思维导图的形式),初期先建立整体认识和资料索引,后期逐步完善整个体系的细节,最后做到有一个完整的体系。
在学习方式方面,可以根据当前自己对知识的掌握程度,选择不同的媒介。如表2-3所示,在对所学内容了解不多时,可以通过经典书籍和课程大纲建立整体认识;在有一些了解但缺乏实践时,可以跟着培训课程、视频和专栏做几个实践项目;在有实践经验后,就需要通过源代码和官方文档加深理解。
表2-3 根据对知识的掌握程度选择不同的学习媒介
另外,学习知识也不是一次性的,我们需要定期回顾总结的内容。根据遗忘曲线(见图2-2),我们可以设定一定的复习时间,比如我经常会在学习新内容的两天、一周和一个月后回顾之前总结的文章和思维导图。不同人的遗忘规律不同,我们可以结合自己的遗忘规律,适当调整复习的间隔,经过定期回顾后就能把知识固化在自己的脑子里。
图2-2 遗忘曲线
如果某个知识点复习多次后还会忘,那说明我们还没有真正理解和吸收它。这种情况下,就需要使用费曼学习法。
费曼学习法是诺贝尔物理学奖获得者理查德·费曼(Richard Feynman,又译为理查德·费因曼)提出的学习技巧,主要由4步组成(见图2-3)。
图2-3 费曼学习法
首先通过阅读、抄录等方式记住新概念,这是我们学习新知识的常规步骤;在这一步后,我们还需要向一个毫无基础的人讲清楚这个概念(强调听众需要是毫无基础的,是为了让我们少说术语,把知识拆解得足够简单,这个过程可以帮助我们理解知识的本质);如果讲述的过程中遇到问题,说明没有深刻理解知识,就需要重新查看资料提炼核心知识;最后,把这些知识从复杂的概念简化为几个核心词,从而实现知识“提纯”。