【每日一书】程序员的思维修炼❶

时间:2023-02-11 23:05:31

本文首发于微信公共帐号:

程序猿圈内事(programerWrold)

请注意:无需授权即可转载

 

《程序员的思维修炼》

副标题:开发认知潜能的九堂课

作者:亨特(Andy Hunt)

出版社:人民邮电出版社 
ISBN978-7-115-24233-4
版次:2011 年 1月

作者故事

亨特Andy Hunt

亨特(Andy Hunt)敏捷开发权威人士,敏捷宣言首倡者之一,著名IT图书出版公司Pragmatic Programmers创始人。除本书外,他还与人合著有多本获奖图书,深受读者欢迎,包括《高效程序员的45个习惯—敏捷开发修炼之道》、《程序员修炼之道—从小工到专家》等。

 

推荐语

本书作者从软件开发领域的角度,阐述了每一名程序员提升“内力”所需要的各种软性知识,可谓是一本程序员”素质教育“的微型百科全书。阅读此时你能够获得:新手程序员如何能够成为专家级软件开发者?什么是德雷福斯模型?如何识别哪些技能是新手要具备的,哪些是高级初学者应具备的?德雷福斯模型是什么?各技术层次都有哪些特点?

 

德雷福斯技能获取模型

从前,有两个程序员(兄弟俩)想要推动智能的技术发展水平,准备编写一个能够像人类一样学习和获取技能的软件。为了实现这个目标,他们首先研究了人类是如何学习的,提出了德雷福斯技能获取模型。那是20世纪70年代,德雷福斯兄弟开始研究人类如何获取和掌握技能,他们经过考察行业技术能手,包括商用飞行员和世界著名国际象棋大师,他们的研究发现,从新手到专家要经历巨大的变化,这个过程要经历五个阶段:新手,高级新手,胜任者,精通者,专家。

 

新手需要指令清单

作为新手会非常在乎能否成功,他们想要实现一个立竿见影的目标,而不是特别想要学习;他们不知道如何应对错误,所以出错的时候非常容易慌乱。但是如果给新手提供与情境相关的规则去参照,他们就会变得能干起来,比如 “当X发生时,执行Y”,这样的指令清单。虽然这样做可以让新手迅速达成目标,但作者还是强调指令清单只能让新手启程,不会让他们走的更远。

 

高级新手不需要全局思维

什么是高级新手?高级新手希望快速获得信息,自身多多少少可以摆脱一些固定的规则,能够独自尝试任务,但是仍难以解决问题,不能站在全貌理解问题。例如:当公司CEO举行全体会议并展示销售预测图表和数据时,你可能会看到这样的反应。许多在这方面经验较少的员工对这些会不加理会,以为这与他们自己的工作无关。当然,其实这是非常相关的,它可以帮你判断明年你在这家公司是否还能继续干下去,但是高级新手看不到这种联系,因为层次不够,只能处于较低的技能水平。

 

胜任者能够解决问题

作者认为这个层次的从业者能够建立问题域的模型概念,可以独立的解决自己遇到的问题,并开始考虑如何解决新的问题。胜任者会探寻和解决问题,他们的工作更多的是基于严谨的计划和过去的经验。如果没有更多的经验,在解决问题时,他们将难以确定关注哪些细节。例如:软件开发领域里面的处于这个层级的人通常被认为“有主动性”和“足智多谋”,他们往往在团队里发挥领导的作用。他们是团队里的好人,既能指导新手,也不会经常骚扰专家。

 

精通者能够自我纠正

精通水平的从业者,他们需要全局思维,并想要了解更大的概念框架,对于简单化的信息,他们会很沮丧。书里说在德雷福斯模型中,处于精通水平的从业人员他们能够纠正以往不好的工作表现,他们会反思以前如何做的,并改进做法,期望下一次表现的更好。这个阶段,自我改进就会出现。

 

测试一切可能出错的东西

极限编程方法里有一个描述说:“测试一切可能出错的东西”。对于新手来说,这只是一个清单,测试什么?是所有的setter和getter方法,还是打印语句?他们最终将会测试所有无关的东西。但是,处于精通者的人员他们知道什么地方非常可能出错,他们具有足够的经验和判断力,他们知道下一步该采取什么行动,他们能够理解情景,像初级专家那样。

 

专家凭直觉工作

专家是各个领域知识和信息的主要来源,总是不断的寻找更好的方法和方式去做事,有着丰富的经验,可以在恰当的情景中运用这些经验,他们著书、写文章,做巡回演讲,是当代的巫师,但是数量却很少,占总人数的1%~5%。专家非常有直觉,他们可能对如何得到结论完全说不清楚,只是“觉得是正确的”。例如:医生给病人看病,乍一看,医生说:“我认为,这个病人得了Blosen-Platt综合症,但还是要让你深入检查,病人做完检查了,结果证明医生是正确的。你可能要问医生是这么知道的?事实上在医生的大脑里面有各种各样的经验、判断、记忆,以及所有其他的意识的帮助下,医生把病人身上的微妙线索结合在一起,就得出了结论。因为专家知道哪些是非常重要的细节,他们擅长做有针对性的特征匹配。

 

三个变化

作者提到从新手到专家必须要经历巨大的变化,而这些变化中最重要的三个:

a.从依赖规则向依赖直觉转变。

b.观念的改变,问题是一个完整和独特的整体,其中只有某些单元是相关的。

c.从问题的旁观者转变为问题涉及的系统本身的一部分。

 

【每日一书】程序员的思维修炼❶

大多数人都是高级新手

书中也介绍了各个技能层次在领域内的分布情况,研究表明,大多数人的大多数技能,在他们生命的大多数时间里,从来没有高于第二阶段高级新手。执行他们的任务,并根据新需求学习新任务,但是从来没有对任务环境获得更广泛的、概念上的理解。领域精确技能分布图如下:

【每日一书】程序员的思维修炼❶

这种现象的例子很多,比如,从复制-粘贴式编程的兴起(现在把google作为IDE的一部分),到设计模式的普遍无用。

 

什么?成为专家需要十年

作者还提出了一个观点,如果你想成为专家,你需要投入大约十年的努力,不论哪个领域。研究人员已经研究了下棋,音乐作曲,绘画,钢琴演奏,游泳,网球和其他技能。从莫扎特到甲壳虫乐队,你会明显的发现想要成世界级的专家至少需要十年的辛勤工作。例如甲壳虫乐队凭借在1964年Ed Sulilvan访谈节目中里程碑式的亮相开始风靡全世界。他们的第一张专辑很快在1967年发行。但是乐队并不是1964年成立的,他们从1957年开始就在俱乐部唱歌,到发行第一张专辑花了十年时间。当然,如果你仅仅是在某个领域工作了十年,依然无法成为专家,你需要更多实践。认知科学家Dr.K.Anderson Ericsson的说法,积极实践的需要四个条件:

1.需要一个明确定义的任务。

2.任务需要有适当难度--有挑战性但可行。

3.任务环境可以提供大量反馈,以便于你及时采取行动。

4.提供重复犯错和纠正错误的机会。

作者说,只要稳步做这种实践十年,你就能达到目标

 

自此,每日一书《程序员思维修炼》第一课结束,希望你能有所收获。


实践

想一想你和你的同事正处在哪个技能水平?对你有何帮助?

 

 

【每日一书】程序员的思维修炼❶    每天坚持一本书,生活越来越轻松