摘要:本文Dreyfus模型部分引用了人月神话blog上的部分内容,其它主要是结合Dreyfus模型说明程序员是如何从小工到专家的。
参考资料:
- http://blog.sina.com.cn/s/blog_493a84550100c8vz.html
- http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition
- http://en.wikipedia.org/wiki/Tacit_knowledge
- http://en.wikipedia.org/wiki/Dunning-Kruger_effect
- http://www.infoq.com/cn/articles/systems-development-discipline
- http://www.infoq.com/cn/articles/better-best-practices
- http://blog.bruceabernethy.com/post/The-Dreyfus-Model-of-Skills-Acquisition.aspx
- http://www.sld.demon.co.uk/dreyfus.pdf
你有没有想过,即使是一个专家也曾经是个菜鸟,但是他们是如何是成为专家的呢?我对这个过程很感兴趣,这几天找了点资料,也谈一下我自己的感想。
上世纪70年代后期,有兄弟俩花费了一些时间来研究学习的本质。他们对刚刚出现的人工智能发生了兴趣,并希望让电脑可以学习诸如下棋这样复杂的技能。当时
对于围绕着学习过程所建立起来的知识还很少,也就没有什么可以让他们用来参考去编写计算机程序了,所以他们决定自己研究学习的过程。他们的研究成果就是
Dreyfus技能获取模型(Dreyfus
Model of Skills Acquisition),描述了人们如何从对某物一无所知,到无需思考即可熟练运用的过程。
虽然现存有许多种学习和技能获取模型,但Dreyfus模型独具的特色让其脱颖而出。首先,它基于真实的证据和经验,而且被证明是可以实际运用的。(在
1980年美国公共医疗卫生服务面临护士危机时,它发挥了巨大作用——http://tinyurl.com/32afwt)其次,它不仅仅是对发展过程
的消极观察,它同时描述了人们在不同阶段应该如何应对,以及因此而为他们带来的成长。
当你开始学习新技能时,你对于上下文没有任何了解,所以需要一些特定的方向指引。也就是说,你不知道面对着什么,必须有人告诉你应该做什么。随着对上下文和背景知识的深入了解,就不再需要对方向的指引了。实际上,你应该考虑如何更进一步加深了解,以作为获取技能的基础。
Dreyfus模型将学习的过程分为五个不同的阶段或水平:
1.新手(Novice)
需要详细的指导——要手把手地教。新手不知道这些指导是否有效,或者哪些指导更加重要;因为没有上下文知识可供他们使用进行评估。因此,新手需要频繁迅速的成就感和有规律的反馈。一本好的入门指导书籍要提供有足够多的图画和充足的可靠信息。
2.高级初学者(Advanced
Beginner)
对基本步骤
——单独的任务——已经熟悉了,而且可以把它们进行有机的组合。高级初学者仍然在很大程度上是面向任务而不是面向目标的,不过他们已经开始有些概念了。这
也是一个学习者最危险的阶段——他们知道自己学到的已经不少了,但是这还不足以让他们远离麻烦!刚学走路的孩子在很多方面都是高级初学者。有了足够的经
验,高级初学者就能拥有足够的能力以胜任某些工作。
3.在胜任(competent)
水平上,他们就走到面向目标阶段
了。他们可以组合一系列任务以达成某个目标。也许任务的组合顺序不是最佳的,但是通常都可以发挥作用。有能力的人希望给定一个目标,然后能够得到别人的信
任来达成这个目标。相反,如果要是试图详细告诉他们应该怎么做,这些有能力的人就会觉得很烦躁,就像是汽车里被坐在后面座位的乘客指手画脚的司机一样。大
部分人在大部分技能上很难超越“胜任(competent)”水平,即使他们在每天的日常工作中使用这些技能。这是人类的基本特性——一旦有所收获,我们
就不想再投入精力了,而且对于大部分活动来说,所谓的收获只不过是把工作做完而已。
注:已经能够分解目标和组合一系列任务来完成目标,这是胜任的关键。
4.在精通(Proficient)
水平上,解决方案开始在人的心目
中“慢慢浮现”——而且通常已经完全成型。他们已经具备了在直觉中形成解决方案主要部分细节的能力,之后就可以根据自己先前的经验积累来对解决方案进行映
射。一个精通的人需要对其行动的上下文有更广阔的了解,并且开始享受隐喻和格言(以及相反的类似内容)带来的乐趣。他们仍然会回头根据接受的基于规则的训
练,来验证自己行为的正确性;但在这个阶段他们已经学着相信自己的判断了。从“新手”发展到“胜任”阶段基本上是线性的过程,而到“精通”阶段代表了一个
台阶的提升。一个人必须积极选择才能促成这个转变的开始。通过对某件事情重复足够的次数是可以达到“胜任”的,但要变想得“精通”,必须要有明确的心理诉
求才行。
注:在精通阶段,从规则(Rule)到直觉(Intuition)的质的变化,已经能够将显性的知识转化为自己的宝贵经验和方法论。在这里是需要明确的心理述求和自我领悟。
5.专家(Expert)
水平:正如从“胜任”到“精通”的转变一
样,转变为“专家”也是非线性的过程。要想成为某个领域的专家,可能要花费数年的努力才能达成。这些人工作时几乎完全是从直觉自发的状态,而且很少犯错
误。专家生活在模糊的世界之中。她以自己的能力为傲,而且喜欢通过与其他专家交流来校正和提高自己的技能。有趣的是,处于初级阶段的人们倾向于过高估计自
己的能力,而在较高阶段的人则更加谦逊。
注:完全的融会贯通,自觉自发,形成了自我的解决问题的方法论和模式,往往已经是无招胜有招。
在网上找了一个更好的基于dreyfus模型描述的技能发展过程描述。
先来看我翻译的,它主要从知识,工作标准,自治,对待复杂性以及如何对待上下文5个方面来描述,原文表格我也放在了下面,原文也比较好理解。
原文表格,来自Institute of Conversation(Lonton), IoC啊,貌似很熟,玩笑了。
下面分几方面说说我的理解:
1)让我们来看看一个知识工人完成一件任务,涉及到哪几方面,我觉得这是一个评价的正交分解。
第一 知识。拥有了知识,才有了解决问题的前提,知识面广,解决问题的思路就更宽阔。
第二 工具。熟练运用工具才能提高工作效率。用的好可能比用的不好工作效率高几倍以上。
第三 技能。比如精通Spring框架,技能直接体现在工作的效率上,是一个综合的体现。
第四 制品。这里就是指工作成果,程序员的制品就是写出高质量的代码,需求分析人员就是写出一篇完善的需求分析文档。
2)来看看具体的例子,比如一个java程序员。
a.新手阶段
他可能只是在课堂上学习过或者只是自己看过书,没写过几行代码。这个阶段,如果完成一件任务,是需要详细的指导的。但是,即使指导,也要有个前提,就是你自己自学了Java的理论,比如基本语法,面向对象基本知识。否则,指导也没有多大价值。为什么的,这就是后来说的上下文(模型中的第五点),他根本就没有概念。相当于没吃过猪肉,也没见过猪跑的阶段,可能连一张猪的图片也没看过。至于复杂性,更没什么招架能力了,我觉得只有取得对上下文的部分理解后,才有可能谈到复杂性。这个阶段,最重要的就是主动自学,学习理论,同时嘴巴勤快点,脸皮厚点。
对于工具,比如Eclipse可能也没用过,没有工作产出。
从思考方面来说,还在模仿阶段,缺乏独立思考能力。
b.初学者阶段
这个阶段可能已经看了基本的java语法,了解了面向对象的基础,对java语言有了一些概念。也自己动手编写了几行代码,跑了HelloWord。已经熟悉了部分常用的JDK API,能够使用常用的类库。如果有一个人把任务分解的细一点,详细指导,能够完成任务
。对于任务,能够识别复杂性,并有了一点解决方案。对于上下文,处在12345就会做的状态,12435,14235就不会做了。
已经能够初步使用eclipse的常用功能,能够写出点产品代码。
模仿阶段,缺乏独立思考能力。
c.胜任阶段
这个阶段也还需要指导,但仅需要大的方面指导就行了。你告诉他,我要达到什么目标,他能够利用自己的能力来独立完成这个目标。比如实现一个文件上传组件,可以自己去google找代码了。综合来说,就是能够顺利完成任务,但可能不是采用最合适的方法。能够通过细致分析和计划来处理复杂性。至于上下文,他明显感觉到技术的广博,有些迷茫,认识到自己学到的只是其中的一部分。
基本拥有了足够的领域只是,能够熟练使用工具,能够依据标准,写出规范的代码。
开始有了初步的独立思考意识,对问题刚刚开始有了自己的见解。
d.精通阶段
这个阶段对实践所需的领域知识已经有了深入了解。你知道告诉他目标,他就能够帮助你实现。做出来的东西质量很高,完全放心。至于对复杂性的看法,已经完全能够从全局上来看待和处理。有了独立的思考和见解,能够非常自信的给出解决方案。到了这个阶段,基本上领域内的问题都能解决了。
熟练使用工具,出色完成任务。
不但自己会做,也能够给别人解释,如何完成工作。
e.专家阶段
这个阶段不好描述,从知识来讲,不但拥有本领域的知识,而且也能够了解相关领域的知识,知识面更广了。而且能够发现别的领域和本领域的概念同构映射,能够利用隐形知识去解决问题。在领域内,能够超越标准,给出自己的解释,引导领域的发展,代表领域最高水平。
工具已经不是问题,能够解决前面四种人解决不了的难题,你无法模拟他的问题解决过程,区别与前四种,专家使用直觉思维。而且可以在直觉思维和理性思维中轻松切换。
对于上下文,领域内已经有了丰富的感知,存在大量的概念之间的联系。
3)Big Picture
理解一个领域,我认为最重要的是big picure,有了它,你就能建立一个比较完整,没有遗漏的上下文,你知道向何处去,你知道元素之间的联系,下面是Java技术领域的Big Picture,Sun公司提供的。这里下载
下图的PDF文件。
4)来看看软件外包中的程序员
如果在外包公司编码,我建议不要一直干,基本上初学者就可以满足他们要求了。而且工作中也得不到锻炼,无法向上发展。对职业生涯发展非常不利。
5)动机、学习能力、思考能力。
你是否有强烈的自我实现意识,督促自己不断学习。因为知识是每一个等级的基础,这些是可以到自发,自我训练来获得的。你的学习能力决定你成长的速度。另外一个最重要的就是思考能力,可以看的出来,从初学者没有独立思考能力,到专家有了独树一帜的独立思考能力。思考能力是要不断的锻炼的,锻炼过程就是不断思考,具体方法可以看我以后的论述。
6)元学习能力
简单的说,就是指学习如何学习的能力。这个能力很重要,否则只能只知其一,不知其二。特别是有了google和baidu以后,这种能力作用更大。这个时代,我们所需要获得信息的熵大大降低,因为你不需要记住所有的事情,记住一个关键字就行了。拥有这种能力,你就能快速获取知识。当你不知道如何解决问题时,你应该知道:
- Know who can do,知道谁可以做的到
- know how to learn how to,知道如何学习如何去做。
7)那么如何来进行学习最有效呢?
答案就是不断学习,不断实践,不断思考,如果你觉的这句话很空,那我可以说的更明白一点。
那就是结果导向的学习方法,
不要盲目的学习,要有目的性,要结果导向,比如我现在要学习某一样东西,是带有很强的目的性的。学习的一个完整的过程包括四点,叫做ITAR
,第一个就是Information 获取信息,然后是Transform,就是对获取到的信息有了一个自己的理解,然后是Action,利用学到的东西去行动,然后是Result,获取结果反馈。
1)如果是知识性的内容,至少要写一个总结,这使你至少不是左耳朵进,右耳朵出,已经到了Transform阶段。
2)要写点程序,比如你在学习Java语言,你就应该利用java做点小程序和小软件出来。来完成整个学习过程。
3)还有一个比较好的学习方式,就是把学到的内容解释给别人听,这是学习的最高境界了,即使取得了Result,你明白了如何做,但也不一定能给别人解释清楚。Presentation能力,越往上发展,这种能力越重要。
千万不要漫无目的的学习,白白浪费时间,如果达不到Transform阶段,就白白学习了。
这是一种拉式的学习模式,区别于学生时代的推式学习模式。
8)上下文的重要性
在学习时,我现在非常重视上下文。我在接触一个新领域时,每次总是先经过大量的阅读,建立一个广阔的上下文,然后再去实践。也有另外一种做法,比如学习一个框架,我是先看文档,看源代码,只是看。不是直接run demo,rush进去。对此,每个人都有自己的方法,我的不具备代表性。先看文档,源码,在脑子里构建出一个context,能使你在run demo的时候获得更多的联系。
从小工到专家,一般至少需要10年,而且专家的领域是很狭窄的,一个人不可能成为所有领域的专家。选好了方向,就努力学习和实践吧。成为专家,需要坚持,汗水和付出。
修改记录:
2009-02-08:增加Big Picture一节。
分享到:
相关推荐
《程序员的思维修炼(英文版)》这本书是针对软件开发人员的,它不仅提供了理论上的答案,而且给出了大量的实践技术与技巧,致力于帮助程序员从小工成长为专家。这是一本适用于各个层次的软件开发人员,包括但不限于...
书中引入了Dreyfus模型,这是理解从新手到专家成长过程的关键理论。该模型将技能掌握分为五个阶段:新手、高级新手、胜任、精通和专家。每个阶段都有其特定的认知特征和行为模式,了解这些可以帮助程序员识别自己所...
Dreyfus 管理 Clouseau 节点来表现全文搜索特性。 标签:Dreyfus
这个模型详细描述了技能如何从新手到专家的进阶过程,解释了经验训练为何有效,并提供了“攀岩教学”这样的生动例子。作者用幽默和巧妙的手法帮助读者理解并组织自己的思维和学习方式。 多位读者分享了他们对这本书...
Gartner的炒作周期模型描绘了技术或应用在市场上的普及过程,显示了大数据正经历着从过高的期望到实用性逐步显现的过程。对于大数据是否会有其“冬天”的问题,有观点认为如果不能正确处理大数据相关的问题和挑战,...
而“Equipment Replacement”则可能涉及到设备更新策略问题,即在设备寿命和成本效益之间寻找最优的更换时机。 动态规划在工业工程、物流、金融、生产调度、通信网络、生物信息等领域都有广泛的应用。例如,在物流...
、Archer Daniels Midland Company (ADM)、Bunge Limited、Louis Dreyfus Company (LDC) 和 Wilmar International Limited 等企业处于市场领先地位,占据着较大的市场份额。 2. **竞争态势**:全球第一梯队的厂商...
在第三阶段——品牌国际影响力,某某集团将对比四大国际粮商(ADM、Bunge、Cargill、Louis Dreyfus Commodities),突显其独特的竞争优势和品牌观点。这可能包括在全球粮食安全、可持续性发展等方面,强调某某集团...
这一问题从20世纪60年代就开始由美国哲学家德雷福斯(Hubert Dreyfus)以海德格尔的现象学视角进行了探讨。人工智能(AI)技术尝试通过机器算法模拟人类智能,以期在某些领域或更广泛领域内替代人类智能。人工智能的...
电磁搅拌技术(EMS)的发展始于20世纪30年代,Dreyfus博士发现了低速移动的感应磁场能在钢水中产生强烈的搅拌效应。这种技术基于麦克斯韦方程,通过在结晶器液相穴中产生的电磁力,改善了高温钢液的传热过程和流动...
如***-***.*.**.*.***.**.*.*等,这些数据可能是财务预测模型中的一部分,涉及到项目的预算、成本和盈利预期。 3. 技术方案: 报告提到了技术方案这一标签,表明在文档中包含有关食用油压榨的技术细节,如压榨过程...
Dreyfus等人在2007年提出。与传统的K-means、层次聚类等算法不同,AP算法不需要预先设定聚类数量,并且能够自适应地发现数据中的簇结构。它主要通过消息传递的方式,让数据点相互影响,最终找到一组代表性的“典范...
Dreyfus和Martin E. Felzenszwalb等人于2007年提出,不同于传统的K-means、DBSCAN等聚类算法,AP算法不需要预先设定聚类的数量,而是通过信息传递的方式自动确定最优簇的数量。在Python中,我们可以利用自定义的...
Dijkstra算法是计算机科学领域中的一个重要算法,主要用于寻找图中一个起点到所有其他点的最短路径。该算法由荷兰计算机科学家Edsger Wybe Dijkstra于1959年提出,适用于带有非负权重的图。Dijkstra算法的核心思想是...
- **泛化**:从具体实例到一般原则的推广。 - **综合**:将多个概念整合为一个整体。 - **抽象**:提取数学对象的核心属性。 **2.4 表示与抽象之间的关系(在学习过程中)** - 讨论表示与抽象之间的互动如何促进...
1. **计算机科学基础**:作者对计算机科学及其应用充满热情,这表明他对计算机领域的基本概念有深入的理解,包括计算原理、编程语言、数据结构等。 2. **高等数学和物理学**:作者提到自己在A-level课程中学习了...