《程序员思维修炼(修订版)》从认知科学、神经学、学习理论和行为理论角度,深入探讨了如何才能具备优秀的学习能力和思考能力,阐述了成为一名专家级程序员的关键要素,具体包括:大脑运行机制简介,如何正确使用和调试大脑,改进学习能力的具体技巧,如何通过自我引导积累经验,控制注意力的方法。为了让读者加深印象,作者还特别设立了一个“实践单元”,其中包括具体的练习和实验,旨在让读者真正掌握所学内容。
生命中没有什么是一成不变的,人们需要改变自己的习惯和方法。不论你是程序员、软件公司管理者、技术奇人还是思想家,或者你只是想让自己的大脑更聪明一点儿,所有尝试改变自己的人,请把本书当作改变的开始……
做一名程序员,就意味着要不断地学习,不但要学习新技术,还要学习怎么解决应用领域的问题,要了解用户社区的奇思妙想,要适应同事的怪癖,等等。在本书中,作者将带领大家共同经历一次有关认知科学、神经学、学习和行为理论的旅程,探索人类大脑令人惊奇的工作机制,并研究如何克服这一系统局限来提高自己的学习和思考技能。
欢迎大家!
感谢选择这本书。我们将共同经历一次有关认知科学、神经学、学习和行为理论的旅程。你将看到人类大脑令人惊奇的工作机制,并研究如何克服这一系统的局限来提高自己的学习和思考技能。
我们将开始重构你的“湿件”——对大脑进行“重新设计”和“重新连线”,使你更高效地工作。不论你是程序员、管理者、“知识工人”、技术奇人还是思想家,或者你只是想让你的大脑聪明一点,这本书对你都会有所帮助。
我是一名程序员,所以我的例子和言论都离不开软件开发领域。但是,如果你不是开发人员,也不必担心,实际上程序设计与使用神秘、深奥的编程语言编写软件没有多大关系(尽管我们总是习惯性地认为它们很相关)。
程序设计其实就是解决问题,它需要发明、创造和灵感。不论你从事什么职业,可能都需要创造性地去解决问题。然而,对于程序员来说,既要受到数字计算机系统的严格约束,又要展开丰富而灵活的人类思考,这就会展示二者的强大力量,又会深深地暴露二者的缺陷。
无论你是一名程序员,还是一位心灰意冷的用户,可能都曾认为软件开发是人类可以想象和遇到的最艰难的工作。它的复杂性耗尽了我们的全部智慧,而一旦失败则后果是可怕的,且往往极具新闻价值。我们曾经让宇宙飞船偏离了轨道,撞向遥远的星球;让昂贵的火箭爆炸,蒙受无法弥补的实验损失;给消费者寄去索要零美元的催款信,搞得人家莫名其妙;时不时还让航空旅客滞留在机场。
适才我们发现:这完全是我们自己的错误造成的。我们自身往往增加了程序设计的难度。随着软件行业的不断发展,我们似乎失去了作为一名软件开发人员所必需的最基础、最重要的技能。
不过好在,我们此时此地就能改正这个错误。本书将告诉你如何去做。
过去40年中,程序员引入到程序中的缺陷的数量已经基本保持不变。尽管程序设计语言、技术、项目方法论等都在不断改进,但缺陷发生的频率仍然保持在同一水平,没能得到改善 。
也许这是因为我们一直关注着错误的事情。尽管技术上有了很多显著的改变,但有一样东西却始终没变:我们自己——作为开发人员的人。
软件并不是在集成开发环境(IDE)或其他工具上设计出来的,它是在我们的大脑中想象和创造出来的。 软件是在头脑中创建的。
Software is created in your head. 思想和概念是需要在团队(也包括付钱让我们开发软件的人)中分享和交流的。我们已经在改进基础技术——程序设计语言、工具、方法上花费了很多时间,当然这也是十分必要的,但现在是我们更进一步的时候了。
现在我们需要研究的真正难题是团队内部和团队间的交流,甚至更困难的问题是完全陈旧的思想。没有任何项目是孤岛,软件不可能孤立地创建或者运行。
Frederick Brooks在他的里程碑式的文章《没有银弹》[Bro86]中提出:“软件产品处于应用、用户、规则和硬件 的合力之下。这些因素总是在不断变化,迫使软件产品也随之改变。”
Brooks的言论把我们推向了社会漩涡的中心。考虑到社会中各个相关团体的复杂交互影响和社会的持续变化,在我看来当前最重要的两项技能就是:
沟通能力;
学习和思考能力。
软件行业正在逐步提高沟通能力。特别是敏捷方法(见注解栏),强调了团队成员之间、最终客户和开发团队之间的沟通交流。类似《演说之禅:职场必知的幻灯片秘技》[Rey08]这样的大众图书突然热卖,表明越来越多的人意识到简单、有效的沟通非常重要。这是个好的开始。
不过,提高学习和思考能力要更难一些。
程序员需要不断地学习——不仅仅是学习新技术,还包括应用的问题域、用户社区的奇思妙想、同事的古怪习惯、行业的八卦新闻和项目演进的重要特征,我们必须学习学习再学习,持续不断地学习,然后把学习成果应用到解决日常遇到的一切新旧问题上。
也许,这些听起来都相当容易,但学习能力、批判性的思考能力和创造力——所有这些扩展思维的能力,都取决于你自己。这些东西没人教得了,你必须自己学习。我们往往错误地看待老师和学生的关系:不光是老师在教,学生也要学。学习完全取决于你自己。
我希望本书能够帮你获得又快又强的学习能力和更实用的思考能力。
什么是敏捷方法
“敏捷方法”这个词最早出现在2001年2月的一次峰会上,与会的17个人都是软件开发行业领军人物,他们创建了各种开发方法,如极限编程、Scrum、Crystal,当然也包括我们的注重实效的编程。
敏捷方法在很多重要的方面都与传统的基于计划的方法不同,最显著的就是摆脱了死板的规则,丢弃了陈旧的日程表,注重实时的反馈。
我在本书中会经常提到敏捷方法,因为很多敏捷思想和实践都是与良好的认知习惯相融合的。
Andy Hunt,敏捷开发权威人士,敏捷宣言首倡者之一,著名IT图书出版公司Pragmatic Programmers创始人。除本书外,他还与人合著有多本获奖图书,深受读者欢迎,包括《高效程序员的45个习惯——敏捷开发修炼之道》等。
第1章 绪论 1
1.1 再提“实用” 3
1.2 关注情境 4
1.3 所有人都关注这些技能 5
1.4 本书结构 6
1.5 致谢 9
第2章 从新手到专家的历程 11
2.1 新手与专家 12
2.2 德雷福斯模型的5个阶段 14
2.3 现实中的德雷福斯模型:赛马和赛羊 21
2.4 有效地使用德雷福斯模型 26
2.5 警惕工具陷阱 32
2.6 再一次考虑情境 34
2.7 日常的德雷福斯模型 35
第3章 认识大脑 38
3.1 双CPU模式 39
3.2 随时(24×7)记录想法 43
3.3 L型和R型的特征 46
3.4 R型的崛起 53
3.5 R型看森林,L型看树木 57
3.6 DIY脑部手术和神经可塑性 58
3.7 如何更上一层楼 60
第4章 利用右脑 61
4.1 启动感观输入 62
4.2 用右脑画画 63
4.3 促成R型到L型的转换 67
4.4 收获R型线索 77
4.5 收获模式 85
4.6 正确理解 92
第5章 调试大脑 94
5.1 了解认知偏见 95
5.2 认清时代影响 103
5.3 了解个性倾向 111
5.4 找出硬件问题 113
5.5 现在我不知道该思考什么 117
第6章 主动学习 121
6.1 学习是什么……不是什么 121
6.2 瞄准SMART目标 124
6.3 建立一个务实的投资计划 128
6.4 使用你的原生学习模式 132
6.5 一起工作,一起学习 137
6.6 使用增强的学习法 139
6.7 使用SQ3R法主动阅读 139
6.8 使用思维导图 142
6.9 利用文档的真正力量 148
6.10 以教代学 150
6.11 付诸实践 151
第7章 积累经验 152
7.1 为了学习而玩耍 152
7.2 利用现有知识 156
7.3 正确对待实践中的失败 157
7.4 了解内在诀窍 160
7.5 压力扼杀认知 164
7.6 想象超越感观 167
7.7 像专家一样学习 171
第8章 控制注意力 173
8.1 提高注意力 174
8.2 通过分散注意力来集中注意力 179
8.3 管理知识 181
8.4 优化当前情境 187
8.5 积极地管理干扰 192
8.6 保持足够大的情境 197
8.7 如何保持注意力 200
第9章 超越专家 202
9.1 有效的改变 202
9.2 明天上午做什么 204
9.3 超越专家 205
附录A 图片授权 208
附录B 参考文献 209
译后记 216