今天我们来聊如何修炼专业技能。内容分如下 3 个部分:
开发者成长的14个阶段
普通和优秀的关键差别
知识如何内化成体系
一个一个来说吧。
(一)开发者成长的14个阶段
在“早学习成长金字塔,少走3年弯路”中介绍了德雷福斯模型:
这是一个非常好的模型,我在看的时候,觉得如果有一个更细致的阶段划分,会对开发者定位自己更有帮助,所以,就总结了出了下面的14个阶段:
看书,看视频,看博客,听课等等
对着书敲代码
脱离书自己敲代码
自己实现一些小DEMO
进项目看代码
在别人指点下写代码
独立在别人搭建好的框架内填写代码
独立负责别人设计好的模块的实现
独立负责一个软件模块的设计和实现
负责较大的软件模块,拆分模块,分子任务给他人
从程序设计、单一模块设计,进入软件系统架构设计的学习(书、课、人、搜)
负责一个项目的子系统或一个小项目的架构设计,拆分,分派任务
负责一个涵盖前后端、业务较复杂的项目的架构设计,拆分架构,分配角色,分派任务
做中大型软件系统的架构设计(架构师),或专注特定领域,解决疑难杂症
这14个阶段是自解释的,每个人都可以对照着它找到自己的位置,然后看到自己的下一个台阶。
(二)不同阶段间的关键差别
让我们从开发者遇到的问题说起,找出不同阶段开发者的关键差别。
你可能遇到这种问题:
可能遇到下面的问题:
可能经常被人这样问:
也可能经常被人这样问:
此时你的反应过程是什么样子的呢?
有人没反应:
有人可以想到一些线索,通过查找、搜索,找到答案:
有人一经提示,马上就能想到是怎么回事:
有人看到问题,脑子立即疯狂运算,迅速找到答案:
这 4 种不同层次的反应,内在差别在哪里呢?
这得从我们遇到问题时的反应过程说起。这个过程是这样的:
接受问题
调取知识,分析问题
综合应用知识,生成解决方案
从这个过程可以看出:知识的多寡,决定我们能否正确分析问题,找到答案。
这正是不同阶段开发者之间的关键差别所在:知识和知识体系。当一个开发者进入第9个阶段以后,往往就有了围绕着某个领域的完整的知识体系。层次越高,知识体系越丰富,越根深叶茂。同时,对知识的运用也越娴熟,一发牵全身动,窥一斑知全豹,遇到问题,瞬间由此及彼,遍历知识库,找到答案。
(三)知识如何内化成体系
那么,怎么建立围绕某个领域的知识体系呢?简单讲:
干中学
事上练
常回顾
重关联
什么意思呢?
先看我画的开发者工作学习流程图:
从这张图可以看到,开发者一般很少有专门时间来学习知识和技能,多数时候是进项目,在做项目的过程中,会使用已有知识,会接触到各种新知识,不懂不会,就通过看书、听课、问人、搜索等方式来学习,然后直接组合使用各种知识来做事,在做事中内化知识,然后交付项目。项目交付后,可能会进入回顾阶段,练习使用过的知识,梳理新知识和已有知识的关联,将新知识纳入知识体系。
整个过程浓缩起来就是:干中学、事上练、常回顾、重关联。
这其中尤为重要的是:常回顾、重关联。这是两个反刍过程,能够让我们有效提升对知识的理解,能够让我们有机会迭代已有知识体系。有了这两个阶段,我们才不会像猴子掰玉米一样,交付了 N 多项目,自己身上什么也没留下。
在知识内化形成知识体系的过程中,还有3点特别重要:
频度
强度
有意练习
实践的频度是指我们应当以足够短的时间周期重复使用某个知识,以期达到第一反应的水准。频度对结果有非常大的影响,比如每周都用抽象工厂模式,那过一个月,可能对抽象工厂就谙熟于心了,而如果两年用一次,可能每次要用的时候都要重新学习。
强度是指开发工作要在时间上和难度上具备挑战性。时间上的强度,指每次练习要有时间层面的紧张感,即限时完成,甚至短时间要求超额完成。难度是指每次知识实践,都要设定超出当前应用水准的目标,以便撕裂知识肌肉,产生痛感,激起探索欲,提升对知识的应用能力。
有意练习,指的是对于新知识,要有意识地、刻意地在实践中使用。比如你学习了装饰模式,就要创造条件去使用它,有事没事儿都要琢磨怎么用。这样,才能提升使用频度,促进内化。一个新知识,你不有意琢磨它,它是万万不会自动傍身的。
(零)总结 && 预告
今天我们介绍了开发者的14个成长阶段,指出不同阶段之间的关键差别在于知识的丰富程度以及知识是否成体系,然后介绍了修炼知识体系的12字箴言——“干中学、事上练、常回顾、重关联”,顺带还介绍了知识内化时的3个要点。
熟练应用这些,可以让我们很好的修炼技术能力。然而,除了技术,我们还需要另外两大类至关重要却往往被忽略的能力:人际沟通能力和项目管理能力。
接下来请看我要整理的第5篇文章——程序员加薪升职之人际沟通。