第1章 绪论
程序设计其实就是解决问题,它需要发明、创造和灵感。不论你从事什么职业,可能都需要创造性地区解决问题。
软件产品处于应用、用户、规则和硬件的合力之下。
最重要的两项技能:
沟通能力。
学习和思考能力。
学习能力、批判能的思考能力和创造力——所有这些扩展思维的能力,都取决于自己。你必须自己学习。
万事万物都是相互联系的:自然界、社会系统个、你内心的想法、计算机的逻辑——所有事物构成了一个庞大的相互联系的现实世界。没有什么事物是孤立存在的,一切都是系统和更大的情境的一部分。
当我们试图将某个事物单独挑出来时,我们发现它与宇宙中的其他事物是息息相关的。——约翰*缪尔(《山间夏日》)
《第五项修炼》系统思维
有些东西是基础的,各领域相通的。
成为一名专家的关键要素:应用你自己的时间经验、理解情境和利用直觉。
把人脑模型可以类比成双cpu、共享总线设计
在人类思考中存在着许多"已知的缺陷":个人认知偏见、时代及同代人的影响、固有的个性,甚至是大脑底层的生物性缺陷。
探讨做计划的技能、思维导图、阅读技巧(SQ3R),以及教学和写作的认知重要性。拥有了这些技能后,你将会更快、更容易地吸收新的信息,获得更强的洞察力,更好地融会贯通新的知识。
积累经验是学习和成长的关键。研究如何利用反馈、乐趣和失败来创造更有效的学习环境,关注设定最后期限的危害,并体会如何通过自我引导积累经验。
控制注意力
控制注意力是此次旅程的关键下一步。分享一些技巧,帮你管理需要学习和时间的大量知识、信息和见解。加强你的注意力。
研究如何优化你当前的情境,如何更好地处理烦人的打扰,并看一看打扰为何有害。我们还将探讨为何需要分散一些注意力,以便更好地聚焦于
超越专家
快速讨论下:为何改变自己比想象中的困难,并且会提供一个你可以立即付诸行动的建议。
实践单元
第2章 从新手到专家的历程
制造问题的思维方式无法用来解决问题。——阿尔伯特*爱因斯坦
事件理论与构建理论
事件理论可以被测量,这类理论可以被验证或证明。你能够判断某个事件理论的准确性。
构建理论是无形的抽象,无法被证明。
Dreyfus模型是一种构建理论、是一种抽象。
现象:
实际工作中,专家级职员并不总被认为是专家,也没有拿到相诚的薪水。
不是所有专家级职员都想成为管理者。
职员的能力存在巨大的差异。
管理者的能力存在巨大的差异。
任何团队的成员在技术水平上可能各不相同,无法看作一个同质的可替代资源集合。
专家通常很难把他们的行为恰如其分地解释清楚,他们的很多行为是如此地熟练以至于已经变成了无意识的了。他们的大量经验都是通过大脑的非语言、无意识区域存储的。
新手跟专家有着根本的区别,他们看待世界的方式不同,反应也不同。
新手
规则只能让你启程,不会让你走得更远。
高级新手
高级新手不想象全局思维。
胜任者
能够建立问题域的概念模型,并有效地使用他们。
与更高水平者追随下意识反应不同,胜任者会探寻和解决问题,他们的工作更多是基于谨慎的计划和过去的经验。如果没有更多的经验,在解决问题时,他们将难以关注哪些细节。
精通者
需要全局思维。他们将围绕这个技术,寻找并想了解更大的概念框架。对于过于简单化的信息,他们会非常沮丧。
他们能够纠正以往不好的工作表现。会反思以前是如何做的,并修改其做法,期望下一次表现得更好。到了这个阶段,自我改进就会出现。
他们会学习他人的经验。作为精通者,他能够阅读案例研究,倾听有关失败项目的流言蜚语,观察别人怎么做,从故事中认真学习,即使他没有亲自参与。
伴随向他人学习的能力而来的,是理解和运用格言经验之谈(maxim)的能力,这些经验之谈犹如谚言或格言,是可以应用于当前情境的基本原理。
理解情境是成为专家的关键。
精通者有足够的经验,他们知道下一步会发生什么,如果没有发生有需要改变什么。他们非常明确哪些计划需要取消,而应该采取什么行动。
处于精通水平的人可以有效的运用软件模式,但是这不是较低技能水平所必须掌握的。
精通者可以充分利用思考和反馈,这些都是敏捷方法的核心。处于精通阶段的人更像是初级专家,而不是高级胜任者。
阶段5:专家
专家是各个领域知识和信息的主要来源。他们总是不断地寻找更好的方法和方式去做事。有丰富的经验,可以在恰当的情境中选取和应用这些经验。他们著书、写文章、做巡回演讲。他们是当代的巫师。
据统计,专家的数量很少,大概占总人数的1%~5%
专家根据直觉工作,而不需要理由。
专家知道哪些是无关紧要的细节,哪些是非常重要的细节。也许不是有意识的,但是专家知道应该关注哪些细节,可以放心的忽略哪些细节。专家非常擅长做有针对性的特征匹配。
2.3 现实中的德雷福斯模型:赛马和赛羊
缺少准确的自我评估被称为二阶不胜任,也就是说,不知道自己不知道。
很多程序员和经理都意识不到有更好的方法和实践存在。
无知往往来自于自信而不是知识。——达尔文
开发人员之间存在 20:1~40:1的生产力差异
新手使用规则,专家使用直觉。
提升技能水平的过程中,最重要的三个变化如下:
从依赖规则向依赖直觉转变。
观念的改变,问题已不再是一个相关度等同的所有单元的集合体,而是一个完整和独特的整体,其中有某些单元是相关的。
从问题的旁观者转变为问题涉及的系统本身的一部分。
这是从新手到专家的转变,脱离独立和绝对化的规则,进入直觉的境界并最最终成为系统本身的一部分。
大多数人的大多数技能,在他们生命的大多数时间里,从来没有高于第二阶段高级新手。
这种现象的证据比比皆是,从复制-黏贴式编程的兴起(现在把Google作为IDE的一部分),到设计模式的普遍误用。
元认知(metacognitive)能力,或者自我认知的能力,往往在较高的技能层次中才会具有。这就意味着处于低技能层次的从业者会明显高估他们自己的能力——有研究表明高出50%。正确自我评估的唯一办法就是提高个人技能层次,这反过来又会提高元认知能力。
你可以把这种现象称为二阶不胜任:不知道自己不知道多少。新手尽管能力差但是信心十足,而专家在情况异常时会变得愈发谨慎。专家会更多地自我怀疑。
专家并不总是最好的老师。教学是一门技能。
当团队需要结对或者寻找指导老师时,你可以尝试选用和受训者技能水平相近的老师。
专家与众不同之处是他们使用直觉和在情境职工识别模式的能力。专家的直觉和识别模式的能力已经超越了他们显性的知识。
根据著名认知科学家DR.K. Anderson Ericsson的说法,积极的实践需要四个条件。
需要一个明确定义的任务。
任务需要有适当难度——有挑战性但可行。
任务环境可以提供大量反馈,以便于你采取行动。
提供重复犯错和纠正错误的机会。
生命如此短暂,学知之路如此漫长。
一旦你成了某个领域的专家,在别的领域成为专家就会变得更容易。至少你已经有了现成的获取知识的技能和模型构建的能力。
“我只是执行命令!” 是无用的。
为了实现工作态度上的转变,我们确实需要提高技能。高级新手无法自己做出这类决定。我们必须培养高级新手,帮助他们把技能水平提高到胜任者层次。有助于实现这个目标的主要方法是在环境中有好的榜样。人天生善于魔方。通过模仿榜样我们可以学得最好。
诀窍4:通过观察和模仿来学习
小号手Clark Terry 曾经告诉学生们学习音乐的秘密是经历三个阶段:
模仿
吸收
创新
优胜者是不会帮扶失败者——失败者会被团队抛弃。
为高技能的开发人员提供合适的环境至关重要。
鉴于最高技能水平的开发人员的生产力比最低水平的高几个数量级,目前常用的工资结构是不到位的。
诀窍5:保持实践以维持专家水平。
R&D精神(Rip off and Duplicate,偷师学艺)。
模型是工具,而非镜子。
你不希望一群猴子敲打键盘编写代码。你需要能思考、负责任的开发人员。对形式模型的过度依赖往往会鼓励羊群行为而贬低个人创造力。
形式方法有其他优点和用途,但是在实现这些目标时不起作用。虽然它能有助于较低技能水平的人建立基准规则,但是判断力是无法取代的。
诀窍6:如果你需要创造力、直觉或者独创能力,避免使用形式方法。
不要屈服于工具或者模型的虚假权威。没有什么可以代替思考。
新手需要与情境无关的规则,专家使用与情境相关的直觉。
在系统思维中,如面向对象的编程,往往是事物之间的联系最让人感兴趣,而不是事物本身。这些联系有助于形成情境,而正是情境让这些事物各不相同。
在团队中你同样需要先考虑他人的技能水平,然后再判断自己该如何倾听、响应他们的意见。
诀窍7:学习如何学习的技能
要获取专业技能要做到如下几项:
培养更多的直觉。
认识到情境和观察情境模式的重要性。
更好地利用我们的经验。
第三章:认识你的大脑
两个CPU提供了L型和R型处理模式
R型:对直觉、问题解决和创造性非常重要。
L型:让你细致工作并实现目标。
要想获得最佳性能,需要R跟L协同工作。
R型:好比针对长期记忆和“进行中”的想法搜索和搜索引擎。R型没有做任何语言处理。它可以检索和识别语言元素,但它本身不能处理语言元素,由于L型和R型之间的内存总线冲突造成的。
R型就是意识的“边缘视觉”
R型是异步的。
R型在存储方面非常卖力。
诀窍8:捕获所有的想法以从中获益更多。
最快的处理方式是甚至没有到达大脑皮层肌肉记忆类反射。钢琴演奏家在快节奏的章节演奏中没有时间思考每一个音符。参与的肌肉基本在无意识或无指令的状态下自己完成了整个演奏。
左右脑模式,L模式(线性模式L型)和R模式(富模式R型)。
L型处理特点:
R型处理特点:
R型注重主体,总是希望以此就能看到事物整体,感知整体的模式和结构。具有空间性,喜欢弄清楚事物之间的空间关系,部分如何形成整体。
为何要强调R型
我们需要更多地使用R型,R型能够提供直觉,成为一名专家所迫切需要的。没有它,我们就不能成为专家。
R型的类比和整体思考方式对软件架构和设计非常有价值,好的设计就是由这些组成的。
诀窍9:综合学习与分析学习并重。
诀窍10:争取好的设计,它真的很有效。
路易*康:“设计并不是创造美,美来自于选择、共鸣、同化和爱”
创造来自于选择和组装,它需要选择最适合的部件,并将它们组装成最合适的表现形式,这就是创作。
诀窍11:重新连线大脑,坚信这一点并不断实践。
想做一名更好的程序员吗?那就多编码,深思熟虑,专注实践。想学习一门外语吗?那就投入进去,不停地说,用它思考。大脑会很快意识到并调整自己为这种新用途提供更多方便。
第四章:利用右脑
如果你感到惧怕,不想尝试某些东西,那么这些恰恰就是你应该首先尝试的。
诀窍12:增加感官体验以促进大脑的使用。
L型是符号机器,可以为一些感官输入快速提供符号化表示。
诀窍13:R型开路,L型紧跟。
L型和R型在隐喻上想通
隐喻是一种激发创造力的强大技术。
诀窍14:使用隐喻作为L型和R型相融之所。
在他的模型中,一些特殊的主题域形成一个参照系。从一个自完备的参照系列到另一个不同的、意想不到的、不相容的参照系的突然切换是一个强大隐喻的基础。这两种体系的连接点称为异类联想。
当异类联想时,这种联系越不可能(两参照相距越远),创造性的成果就越大。
使用随机并列来创造隐喻。
一个足够丰富的隐喻有助于指导系统的设计和解决开发过程中出现的问题。
隐喻参考体系的特征能够印到软件系统,真实世界中隐含的、容易理解的属性逐渐转移到软件本身。
幽默的能力都来自于发觉和扩展常规之外的关系,真正突破思维界限。
急智——能够发现无关事物的联系或扩展思维突破其界限——是一种值得在团队中实践、锻炼和提倡的及鞥呢。
诀窍15:培养幽默感以建立更强大的隐喻。
诀窍16:离开键盘去解决难题。
大脑非常善于在模型片段的基础上重构事实。大脑也能基于不完整的数据进行联想。
从相反角度思考问题,是一种很强大的技术。不要努力预防难以发现的bug,努力找到三四种会主动引起bug的方式。
诀窍17:改变解决问题的角度。
大部分问题都有多个解决方案或者多个“正确答案”
担心解决方案没有逻辑性?大部分大脑处理过程也并非合乎逻辑性,但是都没有出错。
需要是发明之母。角色扮演是发明之父。——求罗迦费因格
第五章:调试你的大脑
探讨四大问题。
认知偏见:思维如何被误导。
时代影响:同代人如何影响你。
个性倾向:个性如何影响思维。
硬件故障:大脑较老区域如何压制较聪明区域。
我们倾向于把别人的行为归因于他们的个性,而不去考虑行为发生时的情境。请记住行为经常是对情境的响应而不是基本的个性使然。
柏拉图圈概念,强调了人类分层不善于从过去的事情推断未来的事情。
诀窍18:记住标题:“很少”不意味着“没有”
推迟下定论。
诀窍19:适应不确定性。
诀窍20:信任记录而不是记忆,每一次思维的输出都是一次输入。
你父母和同龄人的态度,哲学观和价值观对你有重大的影响。
四种时代原型和其主要特征
先知:高瞻远瞩、价值观
游牧民族:自由、生存、荣誉
英雄:利益共同体、富裕
艺术家:多元化、专业知识、法定诉讼程序
诀窍21:从多个角度看待问题。
诀窍22:尊重不同人的不同性格
诀窍23:像高级动物一样行动,请做深呼吸,而不要张口嘶鸣。
诀窍24:相信直觉,但是要验证。
第六章 主动学习
当今技术和文化环境下,学习能力可能是成功的最重要因素。决定了你是“大获全胜”还是“勉强通过”
技术本身不重要,持续学习才是你最重要的。
使用SMART(Specific,Measurable,Achievable,Relevant,and Time-boxed)目标和实用投资计划(Pragmatic Investment Plan)管理目标和计划。
SMART代表具体的、可度量的、可实现的、相关的和时间可控的。对于任何目标(减肥、炒老板鱿鱼、征服世界),你都需要制定一个计划,定出一系列帮助你实现目标的任务(objective)。每个任务都应该具有SMART特性
诀窍25:建立SMART任务实现你的目标。
目标、任务和行动计划
尝试设定一些明确的小任务作为行动计划的一部分。我要按照目标制定一些小的(有时微小的)任务来创建行动计划以实现该目标。
设定目标是第一步。下一步行动是创建小任务以帮助你每天或每隔一段时间都能达到某种程度。你创建的小人物越多,,你就越容易看清自己与目标的距离。
建议大家把技术和才干看做一个知识投资组合。
像管理你的金融投资一样小心管理你的知识投资。
管理你的知识投资有很多要点。
制定具体计划
多样化
所有的知识投资都有价值。即使你从来不会在工作中使用某项技术,它也会影响你思考和解决问题的方式。
主动投资
定期投资
诀窍26:对主动学习的投资做好计划。
使用你的原生学习模式
视觉型、听觉型和动觉型。
斯滕伯格认为智力分为三部分:一部分是元级别的成分,负责总体管理思维过程,一部分是基于表现的成分,负责执行任务、建立关联等;最后一部分是知识获取成分,负责吸收新信息。‘
诀窍27:发现你最佳学习方式。
诀窍28:组织学习小组和辅导。
主动阅读和总结书面材料的更好方式
使用思维导图探索和发现模式和关系
以教代学
相比任何经验式的学习方法,阅读是一种效率最低的学习方法。
诀窍29:主动阅读。
诀窍30:同时使用R型和L型做笔记。
诀窍31:写文档的过程比文档本身更重要
诀窍32:观察、实践、教学。
第七章:积累经验
过度努力地尝试可能和不去尝试一样糟糕。
我们不是仅仅接收信息,而是亲自探索和构建思维模型。
诀窍33:为了更好地学习,请更好地玩。
诀窍34:从相似点中学习,从差异中忘却。
一种高效有益的学习环境应该允许你安全地做三件事情:探索、创造和应用。
诀窍35:在你的环境中安全地探索、创造和应用。
建立探索环境
通过探索可以学得更好,而不是指令。
意识是一种超越新手层次的重要工具。
你需要培养非判断性的意识:不要想着;来纠正,但是在出错时要知道,然后再采取行动纠正。
诀窍36:观察,不做判断,然后行动
诀窍37:允许失败,你会走向成功
诀窍38:让大脑为成功形成惯例。
逐步增长的专业知识会渐渐添加到你要使用的过滤器和匹配模型中。
直觉就是这样增长的:你有越来越多的模型来借鉴和应用,也有越来越多只可意会的知识来帮你确定要搜索什么,以及何时搜索。你开始感受到专家行为的初级阶段。
第八章 控制注意力
与其说你没有时间,不如更准确的说你没有带宽。当你带宽——你的注意力资源——过载时你将会错过某些事情。
冥想的训练可以提高人的注意力。
诀窍39:学习集中注意力。
丹尼尔*丹尼特将“意识”定义为某一是时刻下,头脑中占有对多脑细胞或处理活动的某个草稿。
三法则:一般情况下,如果你不能想出计划可能出错的三种方式,或想出一个问题的三种不同解决方法,那么你的思考还不充分。
诀窍40:挤出思维的时间。
大脑之外的思维支持工具会成为你思维头脑的一部分。
诀窍41:使用wiki来管理信息和知识。
情境:我们这里指的是,加载到你的短期记忆里的有关你手头工作的信息集合。用计算机术语说,混到内存里的正在使用的页面集合。
多任务处理会耗费你百分之二十至四十的生产力。会将你的8小时削减到5小时。
多任务处理:不同抽象层次上执行多个并发任务。
如果你深入进行了一项任务(如调试),然后被中断,那么可能需要平均20分钟返回到原来的工作状态。
试图把注意力同时放在几件事情上,意味着你在每件事情商都会处理得很差。
诀窍42:制定交流规则来管理干扰。
在项目的早期为你的团队建立交互规则(实际上是打断的规则)。
诀窍43:少发送邮件,你就会少收到邮件。
诀窍44:为邮件通信选择你自己的进度。
发送的邮件越少,频率越低,你就把疯狂的速度下降至一个较为合理的水平。
保持情境的一个办法是提高进出情境的物理成本,有助于提醒你隐藏的精神成本。
在CPU的概念中,中断有两种:可屏蔽的和不可屏蔽的。可屏蔽的中断可以被忽略。
诀窍45:屏蔽中断来保持注意力。
中断间隔和恢复间隔。
在打断起效之前,你需要为自己留下一些“面包屑”。留下线索,以便在你返回这项任务时能够继续前进。例如,假设我在写一封电子邮件或者文章,正表达某些想法时,被打断了。很快写下几个单词——不是完整的句子——只是提醒我自己当前的想法。
事实上,保持情境中任务相关的东西很有益处。仅仅多使用一台显示器就可以让你生产力提升20%~30%。
情境切换扼杀生产力。
诀窍46:使用多台显示器来避免情境切换。
诀窍47:优化你的个人工作流以最大化情境。
第9章:超越专家
改变虽然非常困难,但是它最终会屈服于持久的坚持。
“不作为”是敌人,而“错误”不是。
新手的大脑有很多可能性,但是专家心理只有很少。——铃木俊隆禅师
总是要保持一个新手的头脑。你需要像小孩一样拥有无穷的好奇心,充满问题和惊讶。
要像孩子一样看待事物的真实面貌。
诀窍48:抓住方向盘,你不能自动驾驶。
提到的书籍:
《没有银弹》
《演说之禅:职场必知的幻灯片秘技》
《程序员修炼之道:从小工到专家》
《第五项修炼》
《设计模式:可服用面向对象的软件》
《高效程序员的45个习惯》
《科尔特斯的海》
《用右脑绘画》
《项目管理修炼之道》
《二维国》
《永恒之王》
《怀疑的鲑鱼》
《成为技术领导者》
《公共科学图书馆-生物学》
《意识的解释》
《尽管去做:无压力工作的艺术》
《戴珍珠耳环的少女》
影视:
《全面回忆》
《盖里甘的岛》