程序员的思维修炼(Pragmatic Thinking and Learning)-第二章 从新手到专家的历程
德雷福斯模型
德雷福斯模型描述了我们的能力,态度素质和视角在不同的技术水平下是如何变化的,以及为什么会有变化.德雷福斯模型概括了从新手到专家的5个阶段.
1.新手
没有经验,需要一些指令清单来安部就班地完成工作.而且工作时间不等于经验,[经验是对知识的运用和驾驭,是对做过事情的反思和总结][coolshell1],简单重复的工作谈不上经验.
2.高级新手
已经可以独自解决一些问题,能够快速地获取信息.
高级新手能够根据过去的经验,逐步在正确的情境中采纳建议,但比较吃力.同时,他们能够开始形成一些总体原则,但不是全貌.
3.胜任者
完全能够独自解决问题,根据以往的经验解决新的问题.
开始寻求和运用专家的意见,并有效利用.
4.精通者
- 已经具有全局思维.
- 具有
自我认知的能力,能够纠正以往不好的工作表现. - 会学习他人的经验,理解和运用格言经验之谈.
- 有足够的经验能够预测问题的发生.
- 有效运用设计模式.
这个阶段能够充分利用思考和反馈,这应该是作出好产品必须的品质.
作者是敏捷宣言的首畅者之一,他认为也是在这个阶段才会有足够的能力反思和自我纠正来应用敏捷方法.
相对早期阶段,这是一次巨大的飞跃.处于精通阶段的人更像是初级专家,而不是高级胜任者.
<编程人生>看了三分之一,<代码大全>看了一点点感觉也没什么收获,原来是境界不够.个人目前最向往的阶段,反倒是对第5个阶段提不起兴趣,可能距离太远吧.
5.专家
很悬乎的阶段,难以想象,更别提理解了.大概是:
* 专家生产力是新手的20-40倍并且还在不大增大.
* 凭直觉解决问题,任何规则都可能限制专家的发挥.
* 从问题的旁观者转变为问题涉及的系统本身的一部分.
新手使用规则,专家使用直觉.从新手到专家的转变就是从依赖规则到依赖直觉的转变.
那么我在哪个阶段呢?
起初我以为自己应该可以算是一个胜任者了,但是不久书上就出现了技能分布图.表示高级新手是比例最大的阶段,大概40%,胜任者30%,接下来是新手占15%,精通者和专家占10%和不到5%.
可悲的是,研究似乎表明,大多数人的大多数技能,在他们生命的大多数时间里,从来没有高于第二阶段.
并且
自我认知的能力往往在较高的技能层次中才会具有.不幸的是,这意味着处于较低技能层次的从业者会明显高估他们自己的能力--有研究表明高出50%.
那么我到底在哪个阶段呢?
正确自我评估的唯一办法就是提高个人技能层次.
那好吧,怎么提高技能层次呢?
十年成就专家
作者举了甲壳虫乐队的例子.甲壳虫乐队从1957年开始在俱乐部唱歌到第一张专辑在1967年发行,经历十年历程.阮一峰的Dan计划:重新定义人生的10000个小时也用过这个例子,只不过10年换成了10000个小时:
走红之前,甲壳虫乐队在酒吧中演出过10000个小时。
创立微软公司之前,比尔·盖茨编程超过10000个小时。
画家毕加索、音乐家莫扎特、篮球运动员乔丹,都有超过10000小时的训练。
想起周星驰在<鹿鼎记>里的台词,"怎么绝世武功动不动就要三五十年".囧rz
转变工作态度
不仅仅把自己当成一个码农,还要思考和反馈,对自己和产品都具有强烈的责任心,这样自己的技术和产品才能越来越优秀.作者说胜任者才能开始有这个转变,并且环境中有好的榜样有助于快速到达胜任者阶段.
首先模仿现有做法,然后慢慢地吸收内在的知识和经验,最后终将超越模仿阶段并能自主创新.
实践
保持沸腾需要达到沸点并且持续加热,维持专家水平也必须持续编程.
对专家不感冒作者指出一种偏见:认为编码只是一种机械活动,恨不得都外包给最低水平的承包人,不知道苹果有没有,该死的橄榄球,该死的Xcode4.
实践部分挺有趣
1.自我评价.你认为你在工作中使用的主要技能处于德雷福斯模型的什么位置.列举出你目前的技能水平对你产生了哪些影响.
仔细想想,现在虽然能够解决一些问题,有一些经验但是不连贯不系统,只能看到眼前的事物,基础知识差难以向底层抽象.撑死一只高级新手,惭愧呀.
2.辨别哪些技能是新手应具备的,哪些是高级初学者应具备的,等等.在评估时注意可能会出现二阶不胜任的情况.
3.对于每项技能,判断你需要做什么才能提高一个级别.在阅读本书后面的章节时谨记这些例子.
最先把ObjC和runtime的官方文档看一遍
4.回想一下你在项目团队中经历的问题.如果团队知道德雷福斯模型,这些问题会避免吗?以后你会作出哪些改变?
5.想一想你的同事:他们处在哪个技能水平?对你有何帮助?
浙公网安备 33010602011771号