练级攻略,从新手到专家的历程,德雷福斯5级模型
- 收藏
- 2019-04-28
- 188热度
- 0评论
导航
本文整理自《程序员的思维修炼》,第二章。
简介
德雷福斯兄弟做过关于人类如何获取和掌握技能的研究1,总结出一个从新手到专家的5级模型。
- 5 专家
- 4 精通者
- 3 胜任者
- 2 高级新手
- 1 新手
在你提升技能水平的过程中,有许多方面会发生改变。最重要的三个变化如下:
- 从依赖规则向依赖直觉转变。
- 概念的改变,问题已不再是一个相关度等同的所有单元的集合体,而是一个完整和独特的整体,其中只有某些单元是相关的。
- 从问题的旁观者转变为问题涉及的系统本身的一部分。
这个模型是针对每项技能的评估,而不是针对整个人的评估。例如,你可能只是烹饪新手,但却可能是跳伞专家。
阶段1:新手
新手需要指令清单。
定义
新手在该技能领域经验很少或者根本没有经验。这里提到的经验,指的是通过实施这项技术促进了思维的改变。举个反例,可能一个开发人员声称有十年的经验,但实际上只是一年的经验重复了九次,那么这就不算是经验。
特点
新手非常在乎他们能否成功。没有太多经验指导他们,他们不知道自己的行为是对是错。新手不是特别想要学习,他们只是想实现一个立竿见影的目标。他们不知道如何应付错误,所以出错的时候,他们非常容易慌乱。2
如果给新手提供与情境3无关的规则去参照,他们就会变得能干起来。明确告诉他们,“当 X 发生时,执行 Y。”这样一来,他们就知道怎么做了。4
这是呼叫中心的工作原理。你可以雇佣一大批对当前技术没有很多经验的人,然后让他们按照一个决策树按部就班地执行下去。例如:
- 询问用户计算机是否接上了电源;
- 如果是,询问是否已供电;
- 如果否,请用户接电源,然后等待;
- ……
注意
新手面临的问题是,对于某种情境,不知道哪条规则是最相关的。指令清单不可能面面俱到,当一些意想不到的事情发生时,他们会不知所措。例如食谱中提到“大约 20 分钟”,那么我什么时候需要延长或者缩短时间?我如何知道已经做好了?
规则只能让你启程,不会让你走得更远。
阶段2:高级新手
高级新手不想要全局思维
定义
一旦经过新手的历练,人们开始以高级新手的角度看待问题。高级新手能够开始多多少少地摆脱固定的规则。他们可以独自尝试任务,但仍难以解决问题。
特点
他们想要快速获取信息。例如,当学习一门新语言或 API 时,你可能会感觉到这点,你发现自己会快速浏览文档以寻找一个方法定义或参数列表。你不想在此刻寻根究底,或者重新温习一遍基础知识。
高级新手能够根据过去的经验,逐步在正确的情境中采纳建议,但比较吃力。同时,他们能够开始形成一些总体原则,但不是“全貌”。
注意
他们没有全面的理解,而且的确不想有。如果你试图把一个更大的情境强加给高级新手,他们可能会认为该情境与那些原则不相关而忽略掉。5
当公司 CEO 举行全体会议并展示销售预测图表和数据时,你可能会看到这样的反应。许多在这方面经验较少的员工对这些会不加理会,以为这与他们自己的工作不相关。
当前,其实这是非常相关的,它可以帮助你判断明年你在这家公司是否还能继续干下去。但是,你看不到这种联系,因为你层次还不够,只处于较低的技能水平。
阶段3:胜任者
胜任者能够解决问题
定义
在第三阶段,从业者现在能够建立问题域的概念模型,并有效地使用它们。他们可以独立解决自己遇到的问题,并开始考虑如何解决新的问题——那些他们之前没有遇到的问题。他们开始寻求和运用专家的意见,并有效利用。
特点
胜任者会探寻和解决问题,他们的工作更多是基于谨慎的计划和过去的经验。如果没有更多的经验,在解决问题时,他们将难以确定关注哪些细节。
出于这一水平的人通常被认为“有主动性”和“足智多谋”。他们往往在团队中发挥领导作用(无论是否有正式的头衔)。他们是团队里的好人,既可以指导新手,也不会经常骚扰专家。6
注意
在软件开发领域,即使达到了这个水平,仍然无法合理应用敏捷方法——大家还没有足够的能力反思和自我纠正。需要突破到下一个层次:精通。
阶段4:精通者
精通者能够自我纠正
定义
精通水平的从业者需要全局思维。他们围绕这个技术,寻找并想了解更大的概念框架。对于过于简单化的信息,他们会非常沮丧。7
例如,处于精通阶段的人拨打计算机的技术支持热线电话,被询问是否插上了电源的时候,不会作出良好反应。
特点
他们能够纠正以往不好的工作表现。他们会反思以前是如何做的,并修改其做法,期望下一次表现得更好。到这个阶段,自我改进才会出现。8
同时,他们会学习他人的经验。作为精通者,他能够阅读案例研究,倾听有关失败项目的流言蜚语,观察别人怎么做,从故事中认真学习,即使他没有亲自参与。9
伴随向他人学习的能力而来的,是理解和运用经验之谈的能力,这些经验之谈犹如谚语或格言,是可以应用于当前情境的基本原理。经验之谈不是指令清单,它们必须在一定的情境之下使用。10
举例来说,一个众所周知的极限编程方法的经验之谈是“测试一切可能出错的东西”。
对于新手来说,这只是一个指令清单。测试什么?是所有的 setter 和 getter 方法,还是打印语句?他们最终会测试所有无关的东西。
但是,处于精通水平的人员知道什么地方有可能出错,或者更确切地说,什么地方非常有可能出错。他们具有经验和判断力,能够理解这句格言在情境中意味着什么。事实证明,理解情境是成为专家的关键。
精通者有足够的经验,他们知道下一步会发生什么,如果没有发生又需要改变什么。他们非常明确哪些计划需要取消,而应该采取什么行动。
注意
处于精通水平的人可以有效运用软件模式,但是这不是较低技能水平所必须掌握的。11
精通者可以充分利用思考和反馈,这些都是敏捷方法的核心。相对早期阶段,这是一次巨大的飞跃。处于精通阶段的人更像初级专家,而不是高级胜任者。
对于精通者,似乎没啥可挑剔的。
阶段5:专家
专家凭直觉工作
定义
专家是各个领域知识和信息的主要来源。他们总是不断地寻找更好的方法和方式去做事。他们有丰富的经验,可以在恰当的情境中选取和应用这些经验。他们著书、写文章、做巡回演讲。他们是当代的巫师。
根据统计,专家的数量很少,大概占总人数的 1%~5%。
特点
专家根据直觉工作,而不需要理由。
这一点对其他人来说非常神奇,专家自己可能也说不清楚是如何得到结论的。
例如,医生给病人看病。乍一看,医生说:“我认为,这病人得了 Blosen-Platt 综合症,最好做一些深入检查。”病人做了检查,结果证明医生是正确的。你可能要问,医生是怎么知道的?他很可能会回答:“他看上去不太舒服。”12
事实上,病人只是看起来“不太舒服”。不知怎的,在医生大脑里面的各种各样的经验、判断、记忆,以及所有其他的意识的帮助下,医生把病人身上的微妙线索结合在一起,就得出了诊断结论。也许,只是因为病人皮肤苍白,或是病人躺下时的姿势说明了问题,谁知道呢?
不过,这位专家知道。专家知道哪些是无关紧要的细节,哪些是非常重要的细节。也许不是有意识的,但是专家知道应该关注哪些细节,可以放心地忽略哪些细节。专家非常擅长做有针对性地特征匹配。13
注意
心得体会
给团队的建议
根据这个模型,大致划分出团队中不同水平的人才,给他们分配不同水平的任务。尽量让任务刚好处于学习区,以便最大限度发挥和提升每个团队成员的能力。
创新能力、攻坚能力,是高阶能力,新手可以不要求。每个阶段的人,都有他们最应该做的事,也有他们特有的评价标准。这个模型,对研发职级标准的制定,可以起到一定的参考作用。
给个人的建议
大致衡量出自己的水平,找到自己的定位,明白自己的特点和局限性。想办法突破到下一层次。实力不够时,尽量不要强行越级,容易出现偏差。
模型只是参考
这个模型参考意义很强,但并不是严格划分的。如果你较真了,说明你把它当作了“指令清单”,还没能结合“情境”去理解,更无法灵活运用。
自我评价
就“FineReport 研发”这个定位而言,我现在的水平,大致是胜任者。但是,我也具备精通者的反思和自我改善的能力,能较为灵活地理解和运用设计模式、单元测试等方法(虽然运用的水平还不够高),还能从他人的经验中学到东西。多年以来,也在刻意强化直觉能力,有时能用到工作中去。
我现在在分享文章,传递知识,这是一个专家做的事情。其实在“学习方法论”这件事上,我可能已经达到专家水平了,因为最早是在初中的时候,开始有意识地、持续不断地研究方法论,到现在也有十年以上了。
- 他们考察了行业技术高手,包括飞行员和国际象棋大师。研究表明,从新手到专家要经历巨大的变化。在这个过程中,人们不只是“知道更多”或者获得了技术,而且还在如何认识世界,如何解决问题以及如何形成使用的思维模型等方面体验到根本性的区别。在不同的阶段,人们技术成长的方式有所不同,影响(促进或阻碍)人们工作业绩的外部因素也发生了变化。(“修炼如登山,一步一重天”,我瞎编的) ↩
- 评注:刚开始学各种技能的时候,就是这种感觉,如做饭、开车、画画、写字、吉他。很多时候因为迈不过这个坎,半途而废了。 ↩
- 评注:情境就是上下文,是充满无穷复杂性的现实世界。情境是一个相对概念,而且可能每时每刻都在变化。任何方法论,都要放在具体的“情境”下去实施。例如,你说:“今天天气晴朗,阳光明媚。”其实包含一个隐含条件:你当下所在的情境。同样是今天,非洲、美洲、南极洲,可能天气并不好,这就是情境发生变化了。详见原书。 ↩
- 评注:肯德基麦当劳扩张得这么快,人才怎么来?详尽、明确的指令清单,加上大量的新手,就可以干活了 ↩
- 评注:深入了解 JVM 有啥用?做算法题有啥用?设计模式是用来装逼的吧?单元测试不写也罢!我只改设计器的bug,其他的一概不管 ↩
- 评注:最适合当研发教练 ↩
- 评注:专业知识的深度和广度都达到了一定水平。喜欢追根究底,XX 框架是怎么实现的?XX 技术有啥用,为什么要用,怎样用是最好的?有次我在团队中分享 Python 脚本入门,成老师问了一串问题,如“Python 内部的垃圾回收机制是怎样的?跟 Java 有什么区别?有编译的过程吗?Python 程序如何防止被别人破解?” ↩
- 评注:有点像机器学习算法。反思改进,持续迭代,计算机程序的围棋水平可以打败世界冠军。威力之大,可想而知。 ↩
- 评注:单纯靠自身经验,最多只有你个人的几十年经验积累。如果能从书本、他人那里学习,你可能积累到古今中外,成千上万人的经验。 ↩
- 评注:精通水平之下的人,只能看到表面,不能理解,也不能灵活运用,当然感受不到威力。“听过了许多道理,却依旧过不好这一生”?不是道理不对,是你水平不够。无法理解,无法应用。 ↩
- 评注:所以,不用一上来,就要求所有人会用设计模式、采用TDD、从源码中学习。对新手而言,层次还不够。 ↩
- 评注:圣人见微知著。 ↩
- 评注:有的 bug,自己想破头都想不出来,成老师看一眼就能指出症结所在。 ↩
- 评注:据说张小龙特别重视睡眠,经常迟到,马化腾一直惯着。http://www.sohu.com/a/246877628_100124000有些新手喜欢模仿专家的个性,其实是浮躁的表现,往往得不偿失。什么阶段做什么事。曾国藩有个弟弟,突然开始向往竹林七贤的放荡不羁,不屑功名,也不读书了,被曾国藩写信过去,劈头盖脸骂了一顿。 ↩
- 评注:例如,你成为了 Java 的专家,可能为了维持你的专家地位,你整天钻研 Java,到处去传播 Java,却从未想过去了解 GO 语言。其实还有一层境界,叫“超越专家”,简单来说就是,你具备了专家的实力,却仍然保有一颗初学者的心(Stay Hungry,Stay Foolish) ↩