从小白到专家的技能养成
专家和新手的区别在哪里?
每一个程序员都有一个梦想,成为领域内的专家。专家和新手有什么不同?1970年代左右,德雷福斯兄弟通过对飞行员、国际著名象棋大师的技能习得进行研究,他们发现专家和新手在技能调用上有很大的不同,并提出了德雷福斯模型(Dreyfus model),把从新手到专家分为新手、高级新手、胜任者、精通者、专家五个阶段。
第一阶:新手
在该技能领域经验很少或者根本没有经验
严格按照指令行事(告诉行动清单时会做得很好)
几乎无法感知情景
无法判断行为的对错或处理问题
第二阶:高级新手
可以独自尝试任务,但仍难以解决问题
摆脱固定规则但仍需依赖行动准则
情景感知依然有限,难以感知事情全貌
难以区分工作权重及优先级
第三阶:胜任者
能独立解决遇到的新老问题
从全局角度(至少部分)审视行动,能区分工作权重
有意识刻意的制定计划
将流程标准化常规化
第四阶:精通者
整体把握全局,而非局限在某一个方面
正确区分权重,知道最重要的任务
感知情景并反思纠偏
使用原则灵活指导行动
决策越来越轻松
第五阶:专家
根据训练后的直觉把握情景
不再依赖规则、行动准则及原则
出现新情况或发送问题才使用新方法
预知未来
可以看出,新手和专家很重要的三个区别:全局意识及权重意识、情景化解决问题的能力、反思及纠偏的的能力。
一项统计显示,专家和精通者的数量不足超过20%,80%以上的人注定的在胜任者以下,并且高级新手占比最多。这说明了很多标榜有10年工作经验的人,实际上只是把一年的工作技能重复了9年。这也从一个侧面反映了,成为一个专家是多么的困难(约占1%-5%),程序员发展到一定阶段转型管理成功的概率远高于成为专家,而且公司也要不了那么多专家。
任正非之前的一篇演讲中,提到把公司人员分为职员类、专家类、管理类,而对不同级别的专家任正非这么认为:
第二类是专家队伍,专家要快速适应社会变化,赶不上时代变化就会掉队,华为没有收容队。初级专家应该一专多知,做好本职的基础上,再想别的;中级专家一专多能或两专多能;高级专家要有场景化的合成作战能力。
可见,成为专家,并非仅仅局限在工具使用和技术能力提高上,在软件开发中程序设计语言、工具是十分必要的,但沟通能力、学习和思考能力更加重要,这往往是程序开发过程中容易忽视的能力,或者程序开发者不屑于注意的能力。
拥有场景化解决问题的能力是多么重要,要培养全局思考的能力,多问问为什么这么做,不要仅仅局限在自己的一亩三分地,导致思维受到束缚。
最后用网上看到的一篇文章里提到的,对新工程师入职企业的建议结尾。
- 企业最关心的(或者说唯一在乎的)事情,就是增加收入、降低成本。
企业实际上需要的不是程序员,而是能够帮助它们增加收入、降低成本的人。
企业雇佣你,是为了让你帮它们完成某个可以增加收入、降低成本的项目,而不是为了让你追求个人的软件成就。正确的做法是,你应该把自己描述成与增加收入、降低成本有关系的人,比如”xx产品的开发者”或”改进者”。有一个 Google Adsense 程序员的自我介绍,是这样写的:”Google 公司97%的收入,与我的代码有关。”
我自己的体会是,写文档对一个人的锻炼是很大的。(1)可以熟悉项目;(2)可以提高表达能力;(3)可以提高技术能力,因为只有理解了代码才能表达出来,文档越清晰,就代表思路越清晰;(4)可以提高个人影响力,文档写得越好,看的人就越多。久而久之,你就会成为项目的代言人,别人有问题就会来找你。
End.