4-27在小密圈接到第一次付费提问,喜获8块。庆祝一下。
这个话题也是我在小密圈里和那位同学的交流时产生的。他说他“学习的知识也不系统化”,“学习的知识也比较混乱”。“不系统”暂时没有好办法,但比较混乱一定是个问题,但是几句话说不清楚,所以构思了半天,准备写一篇文章来回应。
TL;DR: 中心思想:
我们以前熟悉的,以学校培训为主要形式,所谓“系统性学习法”,很难适应新时期互联网开发的需求。我们必须掌握碎片化学习法,即在快速建立起基础知识体系后,利用碎片时间,有目的有针对性的吸取专业知识,将其拼接到知识体系之上。使自己能够快速成长,在需要的时候还能及时切换学习方向。
系统性学习
我们最熟悉的学习方法,是“系统性地学习”。从6、7岁上小学开始,经过初高中,一直到大学,几乎都是“系统性地学习”。有人替我们把知识点总结归纳整理成教材,按照从浅入深,先易后难的顺序编排好;保证其中逻辑关系的循序渐进,前因后果;然后规定多长时间学多少内容为合适,多长时间为一个里程碑要进行一次怎样的考试。于是只要智商正常不要偷懒,跟着老师按部就班一二三四五地学,基本最后都能学会。至少,都能通过考试。
然而这套流程里面有一些隐含前提:
- 教材和大纲适应生产需求
- 考核考试反应生产需求
- 市场愿意等待学员慢慢学习,学成归来
在传统行业传统理念里,这样的模式不无不可。然而面对软件开发,尤其是前端开发,这样做就不合适了。近些年,前端的市场需求大大增加,带动大量从业人员涌入,也促使大家努力从其他语言和技术中吸取营养,或者想方设法用现有手段解决眼下的问题。于是,前端技术取得飞速发展,版本号和 API 的升级换代速度之快,连写书的人都追赶不上,更别提教材了。
这种趋势虽然不会持续太久,但另一个趋势随之而来:大家已经不甘于只做浏览器相关开发(本职),而是通过各种转译方案,向服务器端移动端开拓新边疆。其它语言的开发者也是如此。所以,我们必须认清这个现实:作为一名开发者,在可以预见的将来,指望像学校那样,有教材有教学计划,有每日作业定期考试,这样的系统性学习可能在也有不会有了。即使有,市场也等不到你学成归来,那时候,早有掌握新的学习方法,掌握新的工作技能的人占据要位。
碎片化学习
我们必须学会碎片化学习。
碎片化学习绝不是东一脚西一脚,学到什么是什么,而是像拼拼图一样,通过碎片化学习收集知识技能要点,最终拼出自己的知识框架。
碎片化学习也要讲究方法,比如我以前写的 谈学习:读源码 和 面试经:GitHub 都有提到碎片化学习的误区,并较之以正确的方法。那么,完整的正确的碎片化学习方法是怎样的呢?
人类认识世界的过程
我们回想一下人类认识世界的过程,很明显,那是一个循环往复的过程:
- 看到现象:日升日落,斗转星移
- 得到初级模型:我们生活在四头大象驮着的一块四方形棋盘式的大陆上,大象下面是巨型海龟,在宇宙中遨游
- 模型无法解释现象:航船从地平线出现,是先露出桅杆,然后才是船体
- 模型升级:地球是圆的
- 模型无法解释现象:星轨不是纯圆以地球为圆心
- 模型升级:日心说
- (如此反复)
重复这个过程,也可以帮我们建立现代开发的知识体系。
碎片化学习的要素
结合我的经验,它应该分为五个部分:
- 尽快建立起基础的知识体系
- 通过碎片化的学习收集知识,将其填补到知识体系之上
- 让知识体系慢慢成长
- 通过真实项目的实际操练,寻找自己知识体系的不足之处,学习补足
- 关注本行业内的高人名家,帮助自己确定方向
接下来逐一解释。
首先,应该建构起基础的知识体系
碎片化学习仍然需要完整系统的知识体系。只不过这里的知识体系是由我们自己建立起来的,只包含基础概念,我称它为知识体系v2.0;相对于传统系统性学习建构的、意图在结束学习后立刻解决所有专业问题的知识体系v1.0,它要简单得多:只由这个知识体系的不可变的基础概念构成。
不用担心它小,不完整,我们接下来就是不断丰富不断扩展它。
碎片化收集知识,将其填补在知识体系之上
离开校园之后,我们很难找到大块的时间集中专门学习,只能把学习环境搬到地铁上、公交站、电梯间,利用各种碎片化的时间,见缝插针进行学习。这个时候,想啃掉一本几百页的大部头变得非常困难。但是利用这些时间,一次只记住一个属性或者一个选择器的用法,就还算简单。
我常用的碎片化学习方法包括:
- 在微博上 Twitter 上关注一些技术达人,技术营销号,及时了解技术发展动态
- 关注一些常用项目的官方博客,必看更新日志
- 时不时去一些技术论坛翻看一下
- 遇到不确定的地方,立刻去翻官方文档;文档无法直接说清楚的地方,自己写成博客记下来
碎片化学习的知识点一定要拼到知识体系上才算数,无论是“读源码”还是“上 GitHub 看别人的项目”,都很难把别人知识拼到自己的拼图上,所以,自然就是不科学不推荐的学习方式。
知识体系也要碎片化
系统性学习的知识体系,比如我们上学时候学语数外政史地物化生,都很庞大。其中概念的关联也很紧密。这建立在前人大量投入教育领域规划总结的基础之上。我们开发领域没有人做这样的事情,也没有那么完整的时间让我们去尽善尽美,所以这个时候我们就必须把知识体系也碎片化,每个知识体系只包含完整语言的一部分内容,然后让它慢慢成长。
通过真实项目的操练,查缺补漏
这一点很重要!
只是跟着别人学,很容易产成“学到”的感觉,即:“哦,原来是这样。”不得不说有不少同学都停留在这个层次,尤其是的面试的时候,很多同学都会在自己简历里堆砌关键词,但是稍微往深处一问就卡壳了,这多半是因为没有实操过,没有真实的经历踩坑与爬坑。
实操的方式有两种,一是在公司的正式项目中使用。这一方面需要自己付出,先摸索个大概;另一方面也要争取领导和同事们的支持。不过一旦推进起来,会给自己带来巨大的提升。当然,在公司里推进新技术新想法未必需要那么激进,直接一上就是完整的框架,推翻之前的重做。完全可以一点一滴,从小处入手,循序渐进。
另外一种就是做业余项目。不过这个项目一定要是完整、目的明确的项目,做出来后有人用,你才会去改进它,才会发现绕不开的坑,填上之后才会获得提升。如果只是弄个小仓库,把范例 Hello world 丢进去能跑起来,是完全不作数的。想不出来做什么,仿一个别人的项目也是可以的;做出来至少自己要用,用的不爽改一改,慢慢的,就能感受到进步了。
关注前辈高人,寻找前进方向
有些同学只依赖公司业务成长,公司只做某些事情,他就只会做某些事情,一段时间后,觉得学不到东西,就跳槽,然后目标薪资随便涨个30%就可以(原帖找不到了)……这样自然是不科学的。所以很有必要关注一些前辈高人,以他们为目标修订自己的方向。
PS:最近面试了不少人,大家普遍比较关注阮一峰,这里提醒大家一下阮先生的文章一定要批判的看,一定。
碎片化学习实例:CSS
这里我们拿 CSS 来举个例子:
a {
color: red;
}
它的基础知识体系非常简单:
- 选择器 + 属性名 + 属性值
- 可以 标签赋予新的样式
初期我们知道它可以修改元素呈现的样式,然后知道它由三个基础元素组成,然后我们就可以围绕选择器、属性、属性可选值来进行碎片化学习。这个时候我们可能认为 CSS 只能改改字体样式、改改边框、弄弄布局尺寸,没关系,这很正常。
一段时间之后,我们突然发现有人用纯 CSS 做出来非常炫酷的组件和效果,原来 CSS 还可以这样用!很好,我们把它纳入我们的知识体系。如此,慢慢的,知识体系就从小小的幼芽,茁壮成长,开枝散叶,直到能应付大部分工作。
在工作的时候,我们要主动把新学到的知识应用到作品中。比如以前布局只会 float
,但是经过学习,我们了解到 flexbox
更适合做横向布局,并且几乎所有浏览器都支持,那么我们就可以开始应用它。
工作一段时间,我们感觉 CSS 已经没什么难得倒我们的了,就可以看看张鑫旭的博客,了解一下这个行业最舍得伏下身体研究的人在琢磨什么,有哪些可以借鉴的。
总结
一不小心扯了很多。回顾一下,我认为至少在开发领域,离开校园加入工作之后,再想系统的学习已经不太可能了,一方面几乎没有真正可靠的服务,另一方面市场也等不及。所以我们必须掌握碎片化学习的方法:先建立一个基础的知识体系,然后通过碎片化学习讲知识点填补在这个体系之上,让它生根发芽,开枝散叶,直到覆盖大部分必须的场景;接着还要想办法进行实战演练,保证自己是真的学到了;最后,通过关注行业达人,寻求新的方向。
欢迎吐槽,共同进步