从小白到专家的技能养成

专家和新手的区别在哪里?

每一个程序员都有一个梦想,成为领域内的专家。专家和新手有什么不同?1970年代左右,德雷福斯兄弟通过对飞行员、国际著名象棋大师的技能习得进行研究,他们发现专家和新手在技能调用上有很大的不同,并提出了德雷福斯模型(Dreyfus model),把从新手到专家分为新手、高级新手、胜任者、精通者、专家五个阶段。

第一阶:新手

  • 在该技能领域经验很少或者根本没有经验

  • 严格按照指令行事(告诉行动清单时会做得很好)

  • 几乎无法感知情景

  • 无法判断行为的对错或处理问题

第二阶:高级新手

  • 可以独自尝试任务,但仍难以解决问题

  • 摆脱固定规则但仍需依赖行动准则

  • 情景感知依然有限,难以感知事情全貌

  • 难以区分工作权重及优先级

第三阶:胜任者

  • 能独立解决遇到的新老问题

  • 从全局角度(至少部分)审视行动,能区分工作权重

  • 有意识刻意的制定计划

  • 将流程标准化常规化

第四阶:精通者

  • 整体把握全局,而非局限在某一个方面

  • 正确区分权重,知道最重要的任务

  • 感知情景并反思纠偏

  • 使用原则灵活指导行动

  • 决策越来越轻松

第五阶:专家

  • 根据训练后的直觉把握情景

  • 不再依赖规则、行动准则及原则

  • 出现新情况或发送问题才使用新方法

  • 预知未来

可以看出,新手和专家很重要的三个区别:全局意识及权重意识、情景化解决问题的能力、反思及纠偏的的能力。

一项统计显示,专家和精通者的数量不足超过20%,80%以上的人注定的在胜任者以下,并且高级新手占比最多。这说明了很多标榜有10年工作经验的人,实际上只是把一年的工作技能重复了9年。这也从一个侧面反映了,成为一个专家是多么的困难(约占1%-5%),程序员发展到一定阶段转型管理成功的概率远高于成为专家,而且公司也要不了那么多专家。

image-20230802212659113

任正非之前的一篇演讲中,提到把公司人员分为职员类、专家类、管理类,而对不同级别的专家任正非这么认为:

第二类是专家队伍,专家要快速适应社会变化,赶不上时代变化就会掉队,华为没有收容队。初级专家应该一专多知,做好本职的基础上,再想别的;中级专家一专多能或两专多能;高级专家要有场景化的合成作战能力。

可见,成为专家,并非仅仅局限在工具使用和技术能力提高上,在软件开发中程序设计语言、工具是十分必要的,但沟通能力、学习和思考能力更加重要,这往往是程序开发过程中容易忽视的能力,或者程序开发者不屑于注意的能力。

拥有场景化解决问题的能力是多么重要,要培养全局思考的能力,多问问为什么这么做,不要仅仅局限在自己的一亩三分地,导致思维受到束缚。

最后用网上看到的一篇文章里提到的,对新工程师入职企业的建议结尾。

  • 企业最关心的(或者说唯一在乎的)事情,就是增加收入、降低成本。

企业实际上需要的不是程序员,而是能够帮助它们增加收入、降低成本的人。

  • 企业雇佣你,是为了让你帮它们完成某个可以增加收入、降低成本的项目,而不是为了让你追求个人的软件成就。正确的做法是,你应该把自己描述成与增加收入、降低成本有关系的人,比如”xx产品的开发者”或”改进者”。有一个 Google Adsense 程序员的自我介绍,是这样写的:”Google 公司97%的收入,与我的代码有关。”

  • 我自己的体会是,写文档对一个人的锻炼是很大的。(1)可以熟悉项目;(2)可以提高表达能力;(3)可以提高技术能力,因为只有理解了代码才能表达出来,文档越清晰,就代表思路越清晰;(4)可以提高个人影响力,文档写得越好,看的人就越多。久而久之,你就会成为项目的代言人,别人有问题就会来找你。

End.