2

书名:程序员的思维修炼——开发认知潜能的九堂课
作者:(美) 亨特 (Andy Hunt)
译者:崔康

关于本书

本书从德雷福斯模型入手,阐释了程序工程师发展的五个阶段;接着从阶段间的特征中引出 L 型与 R 型思维的区别,并通过多个章节阐述如何有效地利用、发掘、调控自己的 R 与 L 型思维;最后,本书总结了开发潜能的其他必要因素:如何学习、如何控制注意力、以及如何成为和超越专家。

阅读本书,可以切实地感受到作者渊博的知识。书中的例子不是冷冰冰的代码或牵强的抽象,而是来自多个学科的理论提炼、多个领域的研究,或是真实存在的实验。稍有经验的开发者在阅读本书时,一定可以从字里行间有所感触。本书融汇了作者在多年的经验和研究中,提炼出的易于模仿与尝试的发掘潜能、提升自我的手段。这些虽不是走向人生巅峰的银弹,却可以在日后的发展中为我们提供参考。

德雷福斯模型

德雷福斯模型将技能水平分为新手、高级新手、胜任者、精通者和专家五类。并指出在由新手向专家转换和发展的过程中,技能所有者会更多的将关注点由局部向整体转换。且在此过程中,人们会越来越倾向于使用直觉提出方案和解决问题,而不是拘泥于在「新手」阶段的依赖指令和局部关注。

  1. 新手需要指令清单;

  2. 高级新手不需要全局思维;

  3. 胜任者能够解决问题;

  4. 精通者能够自我纠正;

  5. 专家凭直觉工作。

值得注意的是,大多数人都停留在只会「执行自己所做的任务,并根据需求学习任务,但从没有对任务环境获得更广泛的、概念上的理解」的高级新手层面上。

作者以 20 世纪 70 年代末的护理专业类比,指出当今程序员所在领域的生存环境有以下特征:

  1. 程序员认为自己只是一种工具,只是执行训练有素的分析师的指令,没有人期待他们会对项目的设计和架构有所创见;

  2. 由于薪资等级的不平等,有经验的专家级程序员纷纷离开一线编码工作,而通过巡回演讲和教学、管理获得经济收获;

  3. 软件工程教育受到质疑,对正规方法和工具的过度依赖削弱了实践中真正经验的作用;

  4. 对项目结果这一真正目标的忽视。

由此,解决问题可以考虑两方面:

  1. 摒弃「我只是执行命令」的想法,承担起一定的责任;

  2. 保持实践。

此外,作为组织和管理者,应当就处于德雷福斯模型不同层级的人提供相应的环境,如对偏新手阶层的程序员提供更多的指令和可模仿的样板,对专家则留有更多的空间和自由以发挥其源于直觉的判断和决策。

R 型与 L 型

既然直觉是新手向专家转换的一个必要因素,那么我们该如何获得这种能力呢?想要探讨这个话题,就不得不提到大脑的工作方式。类比计算机,大脑可以被看作是双 CPU 组成的,负责逻辑思考的线性、缓慢的 1 号 CPU,以及负责处理搜索和模式匹配的非线性、快速的 2 号 CPU。由于共享内存总线,二者并不能同时工作。这一特性导致我们并不能自由的转换和利用两类 CPU,但同时也提供了一些我们原本没有意识到的绝佳机会。

R 型

我们可以将负责语言、逻辑和线性处理的模式成为 L 型,而将 2 号 CPU 中异步、综合的处理方式称为 R 型。由于两种模式的处理风格,R 型更擅长于产生直觉和创造力;而 L 型则更擅长于细致的工作并实现相应的目标。

由于 R 型不负责语言处理,这其实也意味着由 R 型产生的结果并不容易被描述(想象自己梦醒时回忆梦中场景的情况)。然而 R 型对于整体处理、模式匹配和搜索能力的优越性导致这种思维模式可以更好的帮助我们发现规律、处理存储的信息,并提供富有创造力的解决方案。

可问题在于,对于这两类思维模式的切换并不可控。

由于我们大部分时间需要进行逻辑思维,用已有的解决方法得到思路、处理问题,因而总线总是会被拥有 L 型思维的 1 号 CPU 占据,使得 R 型思维无法得到利用。代表 R 型思维的 2 号 CPU 通常只有在放松和不经意间才能发挥作用(想象一下自己的灵光一现)。

基于此,当我们集中注意力去解决问题的时候,L 型思维独占的问题就更为严重,以至于在面对艰难的、无前例可循的问题时,耗费大量的时间往往也无法解决。而灵感通常是在某个瞬间突然出现,且转瞬即逝,这就意味着我们需要时刻准备记录这些极具价值的 R 型思维产物,并及时地实践它。

让我们扩充一下 L 型和 R 型模式的特点:L 型代表着分析、推理和抽象的能力,而 R 型代表着非语言、非理性、综合与直觉的能力。基于此,L 型更适合处理局部问题,而 R 型则适合寻找整体规律、对整体得出结论。

我们需要能够在面对不同问题时使用不同的处理模式,但问题就在于 L 型思维总是默认使用,以至于问题的关键变为了如何能够调节 L 型和 R 型思维模式,以期提高大脑的整体思维能力和效率。

利用大脑

我们可以利用以下方式刺激大脑以期更高效地利用大脑。

  1. 使用多感官获取反馈;

  2. 试着改变一些原有的习惯,大脑是善于适应改变的;

  3. 试着无意识地绘图;

  4. 在接受指导之前先进行尝试;

  5. 在整理自己的思路之前,先给自己时间和空间放纵和创造;

  6. 结对编程。结对编程中,编码者集中注意力于小段代码,使用 L 型进行开发;观察者总览整体,使用 R 型感受。这是一种常用的结合 L 型与 R 型的例子;

  7. 使用引喻帮助自己寻找答案;

利用大脑的思路在于试着抓住 R 型出现的时机,并充分利用 R 型和 L 型各自的特点—— R 型先行,L 型随后。

由于 L 型在日常思维和逻辑中起到了至关重要的作用,以至于「内存总线」长期被 L 型占据。因而如果我们试图利用 R 型模式,使自己脱离高度集中和理性的状态就显得非常必要。我们可以通过这些方式训练 R 型,使其作用能够发挥:

  1. 晨写和自由写。在早起后意识朦胧的状态中,L 型还未完全占据,此时提笔书写,不要过多地思考措辞和逻辑,有助于汇集 R 型的输出;

  2. 利用图像流。在脑海中想象一张图像,利用各种感官尽可能细致地观察它。事实证明,心中想象的图像在很多情况下,是 R 型努力想要告诉我们的事情;

  3. 散步。散步途中不要刻意进行问题解决方案的思考,给 L 型思维倦怠的时机,使得 R 型可以运转;

此外,文中还提到了「醉酒书写,酒醒修改」,这也是一种切换 R 型思维的方法。但切记,记忆是一种脆弱且昂贵的机制,我们需要随时记录下 R 型输出的精辟领悟,不论何时何地。

调试大脑

调试大脑的要义在于探究和审视以下四大问题:

  1. 认知偏见:思维如何被误导;

  2. 时代影响:同代人如何影响我们;

  3. 个性倾向:个性如何影响思维;

  4. 硬件故障:大脑的旧区域如何压制聪明的区域;

认知偏见

我们需要重视以下偏见:

  1. 思维定势:先前的见闻会影响到我们之后的决定;

  2. 基本归因错误:错误地将行为归因为个性,而不考虑当时发生的情形;

  3. 自私的偏见:乐于接受成功的分赏,却拒绝承担失败的责任;

  4. 需要定论:对疑惑和不确定性感到格外的不舒服。强行指定「项目截止时间」、「项目细节方案」等本就难以全部确定的事情。与其说这是一种严谨,不如说是一种逃避和自我掩饰;

  5. 认可偏见:依据自己的成见和喜好进行判断和选择;

  6. 曝光效应:我们会对自己的熟悉的事情产生偏见,尽管这些「熟悉的事物」已经不再好用;

  7. 霍桑效应:当人们知道自己在被审视的时候,往往会表现出异常的反馈,但这并不表示常态;

  8. 虚假记忆:大脑可能会混淆想象、暗示、以及真实发生的事;

  9. 括号简约谬论:在使用符号代表一个系统时,可能会丢失必要的细节;

  10. 名词谬论:以为使用标签或符号进行抽象就可以完全了解事物;

对于「需要定论」这一偏见,作者还引申出了知识量之于项目进展的关系,表明在项目交付的结尾,我们的智力会达到高峰,而项目最开始时则是无知的。因而,推迟决断,或许会有更好的解决方案。

时代影响

处于不同时代的人有着各自的成长环境和时代背景。这些变因往往会成为一代人对于事物看法和处理态度形成的主要原因。

在书中将其做如下划分:

  1. 1901 - 1924,大兵的一代,务实、地道的美国建设者;

  2. 1925 - 1942,沉默的一代,穿灰色法兰绒的墨守成规者;

  3. 1943 - 1960,婴儿潮的一代,道德仲裁者;

  4. 1961 - 1981,X 一代,自由选手;

  5. 1982 - 2005,新千年一代,忠诚,不冒险;

  6. 2005 - ?,祖国的一代;

这些特性往往来自于所处时代所经历的战争、技术革新、政策等因素。了解这些因素可以使得我们在与人相处、试图说服和接受领导时能够更多地考虑到时代的影响。

很可能你天生就喜欢你这一代人所钟爱的做事方式和价值观。但请意识到这种影响来源于何处。可能你的极端个人主义不是你独有的特质。可能你羡慕别人和期望自己拥有的特质不是来自沉思或者逻辑推理,而只是因为你出生在那个时代。

当你激烈的支持或赞成一个观点的时候请记住这一点。你提出的论据是逻辑性的,还是感情作怪,或者只是因为熟悉?论据在特定的情境中成立吗?是否真的考虑过别人的看法?

了解个性倾向

基于卡尔·荣格(Carl Jung)的研究成果,个性倾向可以分为四大轴线领域。

  1. 外向和内向;

  2. 感觉和直觉;

  3. 思考和情感;

  4. 判断和知觉;

了解这些个性倾向除了找到自己的定位外,更重要的是了解到交往时合作者与自己的个性倾向差异很可能会左右结果。具有强烈性格差异的人之间的合作过程将极其困难,这一点在与人争辩的时候也会有所体现。

硬件问题

大脑不是生来完美的,它需要不断的发展。也正是因为这个原因,一些老旧的区域时常会左右我们的行为,并在某些情形下为我们提供一些贴近原始的、表现生存本能的行为:

  1. 战斗、逃跑或者恐惧:当你在陈述时,突然有人提出了尖锐的问题,你可能非常想要逃离现场;

  2. 立即行动:对于行动没有思考和计划,而只是处于冲动的兴奋点;

  3. 领头意识:拼命成为领头人,只是为了任意地对待下属;

  4. 守卫领土:绝不分享任何的信息、秘诀、技巧和空间;

  5. 在受到伤害时愤愤不平:花费所有的精力去责备别人,而不是努力解决问题;

  6. 吾即真理:以自己为中心,和自己一方的总是好的,反之必然是坏的;

  7. 见样学样:无条件不理性的模仿;

此外,书中还列举了电子邮件的例子:在没有即时通信、电子邮件的日子里,人们互相交流需要通过纸质信件。从书写到等待邮递员收取邮件之间通常间隔较长的时间,人们会在这段时间之内再三思考自己的措辞和行为,并最终保持一种相对冷静的状态。反观如今论坛、即时通信、邮件等平台的争执和谩骂,大多都是原始情感的立即输出,而不是经过高级思考活动的。

主动学习

大脑不是用于填充的容器,而是一束需要点燃的火焰。 —— 普卢塔赫

掌握持续学习的能力而不是技术本身,这一点对于软件行业更是如此。无论我们多么热情地追逐技术的发展,总是会有新的技术或是技术的新版本需要学习。面对如今几年就会使得信息翻一番的时代,除了持续学习以外,没有别的办法。

但这种持续学习的方式不应是某些企业推崇的「羊浸式」教育。这种强烈的、陌生的、中毒性的清晰过程表现在培训领域就是周期性的、集中式的课程进修。公司和企业喜欢这种培训,因为它易于购买,便于安排时间,但的确不起作用。原因在于:

  1. 学习不是一种强加的行为,而是需要主动做的事情;

  2. 仅仅掌握知识而不实践是无用的;

  3. 随机的方法,没有目标和反馈,往往只会得到随机的结果。

SMART 目标

为了能够在生活和实践中不断成长,我们需要制定目标和任务,这些目标和任务不应是随意的,它们需要满足以下特性:

  1. 具体的(Specific):具体化自己任务,而不是提出一个模糊的目标;

  2. 可度量的(Measurable):可以度量定下的任务和目标,不然,也许是它还不够明确;

  3. 可实现的(Achievable):目标务必可以实现和操作;

  4. 相关的(Relevant):目标需要在自己的掌控之中,自己需要对其具备热情;

  5. 时间可控的(Time-boxed):为目标定下截止时间;

此外,我们还应该主动的、多维度的制定目标。比如学习新兴的语言,或是涉猎其他学科。

在学习中,尽量使用自己适合的学习方法。惯于利用视觉和听觉的人可能更适合于接受视频教育或参与讲座而不是静读。除此之外,参与学习小组和使用思维导图也是不错的学习方式。

主动阅读

一生中,你所读的书可能比听的讲座多得多。但是,相比于任何一种学习方法,阅读是最为低效的。

作者在书中提出,使阅读更为有效的方式是主动,而不是埋头苦读。可操作的一种方法被称为 SQ3R:

  1. 调查(Survey):扫描目录和每章总结,得出总体看法;

  2. 问题(Question):记录所有问题;

  3. 阅读(Read):阅读全部内容;

  4. 复述(Recite):总结,做笔记,并用自己的话进行描述;

  5. 回顾(Review):重读,扩展笔记,进行讨论;

切记,写作和阅读同等重要,我们需要采取合适的方法进行主动阅读,也需要利用思维导图等方式汇集思考,进行写作。

其他方法

  1. 重视文档的力量。把文档当作自学的另一种方式,重视文档制作的过程而不是文档本身。

  2. 以教代学。尝试向某人甚至是桌上的玩偶讲述自己学习的内容或是遇到的问题,通常可以帮助我们更好的理解和记忆知识,或是高效地发现问题。

积累经验

如何学习

先进行知识的灌输,再期待日后会使用到它们,这实际是一种本末倒置的事情。我们应该在观察和「玩耍」中构建知识和学习方法。

玩耍的第一层意义在于非目的性探索,我们不仅仅是要接收信息,也要亲自探索和构建思维模型。另一层意义在于提升乐趣,乐趣的提升有助于我们调动全部的感官探索事物。结合书中先前章节的内容,我们通过这一方式再次调用的 L 型与 R 型思维。

学习的另一要义在于利用现有的知识。我们在遇到问题时,应该将其分解为若干个更小的、更易于管理的部分,分成大脑足以容纳的几个部分。书中提到了波利亚的解题思路:

解决问题前,先提问自己:

  1. 未知量是什么?

  2. 已知量是什么?

  3. 条件是什么?

可以使用如下的技巧:

  1. 努力回想拥有相同或类似未知量的常见问题;

  2. 画一张图;

  3. 解决一个相关的或者更简单的问题,放宽限制,或者使用已知量的子集;

  4. 是否已经用上了所有的已知量和条件,如果没有,为什么?

  5. 尝试重新叙述这个问题;

  6. 尝试从未知量推导已知量。

这种解决思路实际上可以简述为:如果解决不了当前的问题,那么是否可以解决类似的问题?但是切记,这种思路也许不能适用于某些情况,比如当新旧问题的思路完全不同时,就应该完全摒弃旧方法。

应对失败

错误是发现的大门,证实失败出现的近乎必然性,但需要注意以下几点:

  1. 建立探索环境:尽量建立安全可控的环境去应对尝试新的技术和想法;

  2. 自由实验:尝试寻找问题的其他解;

  3. 能够原路返回稳定状态:这意味着我们可以在发生错误时迅速回到之前的状态,分析错误、修改方案或尝试其他做法;

  4. 重现任意时刻的工作产品:我们需要能够回到程序的任意版本;

  5. 能够正视进展:寻找一种证实进展的方法。

有一种失败并不能为我们带来收获,反而有可能会扼杀学习的热情。为此,我们需要了解学习诀窍,比如适度延长反馈的时长、在修正错误时首先进行观察而不是立刻动手等。

正视压力

最后期限会使得大脑恐慌,而且会使得、自己处于一种「压力宿醉」的状态中。在这一状态后,我们的创造力会一直受到压制。

当压力出现的时候,我们所观察的视野范围会急剧缩小,L 型思维霸占了总线,使得 R 型完全得不到发挥。因而,在压力出现的时候,我们更需要的是放松。在项目之中给自己提供「允许失败」的领域是一种不错的手段。

超越感官

大脑有时会先入为主地给我们提供信息,而这些信息通常伴随着错误的预测、旧信息与偏见。这种现象通常基于记忆和想象的经验,因而我们可以好好地利用它,比如在大脑中模拟自己的成功、断言自己已经改正了某一缺点、在跑步前先进行负重运动等。

假装自己可以成功,那就真的会成功。

提高注意力

一个海军飞行员在夜间以每小时 224 公里的速度在甲板上着陆一架 18 吨重的飞机,可能比一个普通少年切下一片硬面包圈更加安全。

提高注意力的方法有很多种,以下是书中的一些建议:

  1. 使用 wiki 或其他手段管理自己的知识,这样在需要的时候它们就会自己冒出来;

  2. 优化当前情境,避免情景切换造成注意力转移和时间浪费,我们的大脑无法很好地支持情境切换;

  3. 避免因电子邮件、推送消息、屏幕切换等分心,将注意力集中在当前屏幕的当前焦点;

  4. 有效地组织任务,使用记事贴保存外部信息,而不是动态的刷新头脑;

  5. 积极地管理干扰:如制定会议和可打断的时间段、安排邮件处理时间等;

  6. 保存情境堆栈:当自己被打扰时,将必要的信息记录下来,而不是在回归情境时重新回忆;

  7. 布局工作空间,扩大情境保存空间。

但是,有时我们也需要转移注意力以浸泡自己的意识,给自己以思维发散的时间来获得更多的创造力。

超越专家

我们需要执行力和决心,摒弃「不作为」,步步为营、不断为下一个目标努力。在成为专家之后,也要保持一个新手的头脑,需要像小孩一样拥有无穷的好奇心,充满问题和惊讶。我们需要不断评估自己,不要让过去的智慧使得自己看不到眼前的现实。


dailybird
1.1k 声望73 粉丝

I wanna.