学习是一个老生常谈的问题,尤其是在如今互联网技术迭代越来越快,竞争压力越来越大的背景之下,学习已成为社会生态中“物竞天择,避免淘汰”的必备技能。虽然学习讲究方法论,但并没有一套适合所有人的学习方法,真正有效的学习方法因人而异,适合自己的才是最好的。
曾看过一篇关于分享高效学习的文章,其中介绍了快速学习四步法,从中受益匪浅。本文结合个人学习心得,在其基础上又做了细化,将学习过程分为八步:

第一步:确立目标

学习的首要关键是设立明确的目标,达到目标才能取得学习成果。然而大多数人在目标确立的问题上做的并不佳,甚至一上来就埋头苦学,如果目标不明确,那后面一切都是浪费时间。
目标可分为大目标和具体的子目标(即长期目标和短目标)。在目标的确立上,我们可以借鉴”SMART”原则——Specific(具体的), Measurable(可衡量的),Achievable(可达到的),Realistic(切合实际的),and Timed(合时宜的)。

第二步:拆分任务

前面我们确定了目标,以及细化后具体的短期小目标。接下来我们通过逆向分解,将每个目标拆分成具体的可执行任务。
任务其实就是我们在实现目标的过程中,所要完成的一系列事项。拆分任务的过程同样需要保证任务是具体的、可执行的、可完成的。一个任务也可以细分成多个子任务,当我们把所要做的任务明确并一一列出来后,便更有利于后面的执行,以确保执行的目的性和方向性。

第三步:搜集知识资源

我们学习一门知识,肯定要搜集大量资料内容,比如查阅相关书籍、网络文档、视频教程等。特别是现在互联网发展如此发达,很大程度地降低了人们的学习成本。
为了避免大家重蹈覆辙,这里和大家分享下我在搜集资源方面的经验教训。

1.首选官方权威的教程资源。

官方的文档教程是最可靠的,我们可以从中得到最新、最权威的资料,特别是身处IT圈子里的朋友对此最有感触。并且很多第一手资源都是英文的,而且国内翻译让人堪忧,所以很早我们就听前辈教导,“如果你想在技术能力上有所突破,英语这关是逃不了的。”
其次书籍的选择,建议大家先看书评,中文的看豆瓣,英文的看英文亚马逊的评论。平行比较几本书,选择几本公认的口碑好的好书。

2.切勿一味图多。

这是相当痛的领悟,最初学习web开发时,搜集各种教程资源,很多套视频教程、众多的PDF文档,买了很多的书籍,下载了好多工具,甚至以此为宝,到现在还封存在我那500G的移动硬盘里。
过多的资源会浪费自己的宝贵时间和精力。比如我现在学习一门编程语言时,官方手册+一本书+一台电脑足矣。

第四步:分配自身资源

这一步将涉及到一门很难但又很重要的学问——时间管理。这里我们不过多的阐述时间管理方面的内容,因为这个问题因人而异,没有一套适合所有人的解决方案。
我们时间、精力等各方面资源有限,所有的知识不可能平均分配有限资源。对于我们搜集的知识资源,要分清主次,然后使用不同的时间管理策略进行学习。
每个人情况不同,这里分享我的方法,我将时间大致分为零碎时间和区块时间。利用零碎时间,比如上下班车上、等待时间等,学习一些阅读即可有收获的内容。利用较长的且能坐在电脑前的区块时间来主攻那些需要实践操作的学习内容。每周列一个待办,什么时间做什么事情便一目了然了。

第五步:勤学

前期的计划工作完成后,接下来就是执行了,这里同样涉及到一个重要问题就是学习方法。
你是否有过这样的经历:拿出一本书,从第一页开始一页一页的从头开始阅读学习,然后三天打鱼两天晒网后,又开始从头一页一页地学习,之后陷入死循环……很多人自学效果差,一方面是自我管理问题,最主要的还是学习方法不得当。
我的老师曾说“书越读越薄,代码越写越少。”我们在学习的过程中,其实是在不断地将书面上的知识消化到自己的脑子里。而要消化知识也要讲究方法,结合自身经验,这里我将读书学习分为三个阶段:

1.快速泛读

上学时我们就不断被老师灌输“考试做阅读理解第一步——通读全文”。学习一门知识也是如此,泛读的主要目的是梳理出知识的核心概念、要点、框架逻辑等。
比如拿过来一本书,通常先看序,这是与作者的对话。然后是目录,了解整本书的知识结构和框架逻辑,同时自己也要提炼出哪部分是重点、难点,做到心中有数。接着泛读全书,泛读过程中主要抓核心概念、观点、说明、和框架模型,这个过程不需要我们对每个点深入了解。最后,在脑海里回顾一下整本书的逻辑结构。

2.深入解读

深入解读的目的是牢固掌握知识基本技能,逐步深入理解知识原理。这也是大部分人采用的学习方式。每个知识点、要点都是我们的精神食粮,并在学习的过程中,记下不懂的疑问。

3.问题攻读

问题攻读,即从问题出发,为解决问题而从各种知识资源中找答案。如果某个问题花了很长时间都解决不了,那可能这个问题对现阶段的你还没能力解决,这时或请教他人,或可以先放一放,等学完其他再回过头来继续研究。
第六步:建立知识体系
不要以为这一步可有可无,建立知识体系有助于帮我们理清各个概念和知识点之间的关联,逐渐形成系统的知识体系。基于前面的大量泛读和深入解读,我们可以逐步构建出一个知识体系。(这里可以借助freemind、xmind等脑图工具。)

第六步:建立知识体系

不要以为这一步可有可无,建立知识体系有助于帮我们理清各个概念和知识点之间的关联,逐渐形成系统的知识体系。基于前面的大量泛读和深入解读,我们可以逐步构建出一个知识体系。(这里可以借助freemind、xmind等脑图工具。)

第七步:好问

基于前面问题攻读后还有未解决的问题,就要求教他人获取帮助了。提问也是一门艺术,这仍是一个学习交流的过程,而不是让别人去解决原本你该解决的问题。
这里有一点希望大家共勉:所谓勤学好问,好问一定要以勤学为前提。因为我发现很多人完全颠倒了这个顺序。比如即便手册、文档等教程就摆在眼前,他们也不愿意去看,而是直接问别人,更不会去百度谷歌,自己尝试解决问题,实际很多问题在文档中完全可以解决。表面为了省时间,然而最终问题即便解决了,自己也没有学到东西。
所以,“不懂就问”可不是一个好的学习习惯。

第八步:分享复述

这里用到了著名的“费曼技巧”:即把自己当做老师,将你学到的知识讲给别人听(个人觉得写文章或录视频均可)。在给别人讲解的过程中,你可能会遇到“卡壳”,或者你觉得讲明白了,别人就是听不懂,这些地方,就是你理解的薄弱点,你需要再次着重学习理解这些知识,然后再讲解给别人听,如此循环,直到自己讲的清晰,别人听得明白。

小结

我们将学习流程分为八步:

1.确立目标
2.拆分任务
3.搜集知识资源
4.分配自身资源
5.勤学
6.建立知识体系
7.好问
8.分享复述

我们团队在开发禅道蝉知然之等产品,乃至平时工作都是遵循scrum敏捷开发,当我们回过头来归纳总结时会发现,本文的“学习八部曲”其实和scrum敏捷开发有异曲同工之妙。首先将知识分解为多个小目标,再由目标分解关联具体的学习任务,并合理分配时间、精力等资源来完成任务,然后通过疑难问题、复述,不断发现自己学习知识过程中存在的“漏洞”或“bug”,进而深入学习解决,并由此循环迭代。
所以,学习其实就是一个不断“自我迭代”,从而实现不断自我提升的过程。
每个人都有自己的一套学习方法,欢迎大家能够将自己好的学习方法不吝分享,我们互相学习、交流,共同进步。

学习方法实战相关阅读:
《我是如何学习小程序的》
《我是如何学习PWA的》

参考文献:
https://www.jianshu.com/p/2fe48f98a919
https://keeganlee.me/post/full-stack/20170909
https://wiki.woodpecker.org.cn/moin/AskForHelp