《程序员超强大脑》封面

内容简介

为什么你在写代码时总会遇到这样或那样的问题?为什么你总是记错某些语法?为什么有些人能够快速学会新的编程语言,而有些人则不能?在试图解决困难或复杂的问题时,我们的大脑其实有一套特定的工作方式。本书从认知科学角度剖析优秀程序设计背后的脑科学原理,为你揭开大脑思考编程的奥秘。本书分为四大部分,共有13章。你将了解如下内容:如何高效地学习新的编程语言,如何快速地理解复杂的代码,如何牢固地记住各种语法,如何在繁杂的程序设计工作中优化认知资源。

编辑推荐

随着ChatGPT横空出世,作为程序员的你是否已经有了危机感?在自己编写代码和理解他人所写代码这两个方面,人工智能是否已经超越了人类程序员?无论人工智能如何“进化”,有一点是它无法取代的,那就是人类程序员的超强大脑。本书是专为程序员而写的大脑使用指南,旨在帮助程序员用好自己的认知优势。

本书作者指出,程序设计是一个认知过程,这个过程对程序员的认知要求颇高。因此,本书从认知科学的角度帮助程序员了解大脑工作机制,从根本上提高程序设计工作的效率。

本书特点

●有助于理解大脑如何加工与代码相关的信息。

●内容组织符合认知模式:代码阅读−代码思考−代码编写−代码协作。

●助你醍醐灌顶,实现更快的代码读写速度、更高的工作效率、更少的返工。

●以Python、JavaScript、Java等为例,但原理对所有语言都适用。

作者简介

费莉安•赫尔曼斯(FelienneHermans),荷兰莱顿大学副教授,致力于研究人类如何利用认知科学快速、高效地学习程序设计语言。费莉安对ChatGPT给软件工程领域带来的深远影响有独到见解,多次就这一话题接受媒体专访。她是TC39(JavaScript标准委员会)成员,还自创了Hedy程序设计语言。

目录

第一部分代码阅读
第1章剖析程序设计之惑2
1.1代码造成的各种困惑2
1.1.1第一种困惑:缺乏知识3
1.1.2第二种困惑:缺乏信息4
1.1.3第三种困惑:缺乏加工能力4
1.2影响程序设计的不同认知过程5
1.2.1长时记忆和程序设计5
1.2.2短时记忆和程序设计6
1.2.3工作记忆和程序设计7
1.3认知过程之间的关系8
1.3.1简要剖析认知过程如何相互作用8
1.3.2编程任务涉及的认知过程9
1.4小结10
第2章快速阅读代码12
2.1快速阅读代码13
2.1.1大脑的活动情况14
2.1.2回顾默写的代码15
2.1.3回顾第二次默写的代码16
2.1.4阅读不熟悉的代码时为什么会感到困难16
2.2弥补记忆容量不足的短板17
2.2.1组块威力大18
2.2.2资深程序员比新手程序员更善于记忆代码21
2.3看到的代码比读到的代码多22
2.3.1图像记忆22
2.3.2不是记忆的内容,而是记忆的方法24
2.3.3代码分块练习30
2.4小结31
第3章快速学习编程语法32
3.1语法记忆小贴士32
3.2如何利用抽认卡快速学习语法34
3.2.1使用抽认卡34
3.2.2扩充抽认卡35
3.2.3精简抽认卡35
3.3如何避免遗忘36
3.3.1遗忘的原因何在37
3.3.2间隔重复38
3.4如何牢记编程语法39
3.4.1记忆信息的两种机制39
3.4.2“眼见”还不够40
3.4.3主动回忆能够巩固记忆41
3.4.4主动思考也能巩固记忆42
3.5小结44
第4章阅读复杂的代码45
4.1为什么复杂的代码难以理解45
4.1.1工作记忆与短时记忆的区别46
4.1.2与程序设计相关的3种认知负荷47
4.2减轻认知负荷的方法49
4.2.1重构50
4.2.2替换不熟悉的语言结构51
4.2.3在抽认卡两面写上等价的代码可以显著增强学习效果54
4.3利用记忆辅助工具解决工作记忆过载的问题54
4.3.1绘制依赖图55
4.3.2创建状态表57
4.3.3结合使用依赖图和状态表59
4.4小结61
第二部分代码思考
第5章深入理解代码64
5.1变量角色框架65
5.1.1变量不同,承担的任务也不同65
5.1.2涵盖大多数变量的11种角色66
5.2角色和范式68
5.2.1角色的优点68
5.2.2匈牙利命名法70
5.3加深对程序的了解72
5.3.1文本结构知识与计划知识72
5.3.2程序理解的不同步骤72
5.4阅读代码和阅读文本有相似之处75
5.4.1阅读代码时大脑的活动情况76
5.4.2能学会法语,就能学会Python77
5.5运用文本理解策略来阅读代码80
5.5.1激活先验知识81
5.5.2监测82
5.5.3确定不同代码行的重要性83
5.5.4推断变量名的含义84
5.5.5视觉化85
5.5.6提问86
5.5.7摘要86
5.6小结87
第6章更好地解决编程问题88
6.1借助模型来思考代码89
6.2心智模型91
6.2.1详细剖析心智模型92
6.2.2学习新的心智模型93
6.2.3如何运用心智模型提高代码分析的效率94
6.3概念机器98
6.3.1概念机器的定义99
6.3.2概念机器的例子99
6.3.3概念机器适用的不同层面100
6.4概念机器和语言描述101
6.4.1概念机器可以扩展102
6.4.2不同的概念机器可能催生出相互矛盾的心智模型103
6.5概念机器和图式104
6.5.1图式的重要性104
6.5.2概念机器是否具有语义性105
6.6小结105
第7章迷思概念:错误的思维方式106
7.1为什么学习第二门编程语言比学习第一门编程语言更容易107
7.1.1充分挖掘现有编程知识的潜力108
7.1.2不同的迁移类型109
7.1.3已经掌握的知识:是福还是祸110
7.1.4迁移有难度111
7.2迷思概念:思维中存在的错误113
7.2.1通过概念转变来消除迷思概念114
7.2.2抑制迷思概念114
7.2.3与编程语言有关的迷思概念115
7.2.4在学习新的编程语言时避免形成迷思概念117
7.2.5判断代码库中存在的迷思概念118
7.3小结118
第三部分代码编写
第8章提高命名的质量120
8.1命名为什么重要121
8.1.1命名的重要性何在121
8.1.2与命名有关的不同观点122
8.1.3最初的命名实践影响深远124
8.2从认知的角度剖析命名125
8.2.1规范的命名方式对短时记忆有利126
8.2.2含义明确的标识符对长时记忆有利127
8.2.3标识符可以包括不同类型的信息以帮助理解127
8.2.4评估标识符质量的时机129
8.3哪些类型的标识符更容易理解129
8.3.1是否应该使用缩写129
8.3.2采用驼峰命名法还是蛇形命名法133
8.4标识符与代码错误之间的关系134
8.5如何设计质量更高的标识符135
8.5.1名称模具135
8.5.2运用Feitelson设计的三步模型来提高标识符质量138
8.6小结139
第9章避免低质量代码和认知负荷:两种框架140
9.1为什么存在异味的代码会加重认知负荷140
9.1.1代码异味简介141
9.1.2代码异味对认知的负面影响144
9.2低质量标识符对认知负荷的影响146
9.2.1语言反模式146
9.2.2认知负荷的测量147
9.2.3语言反模式和认知负荷151
9.2.4语言反模式为什么令人困惑152
9.3小结152
第10章提高解决复杂问题的能力153
10.1问题解决的实质153
10.1.1问题解决的三大要素153
10.1.2状态空间154
10.2长时记忆在解决编程问题时所起的作用155
10.2.1问题解决本身是否属于认知过程155
10.2.2培养长时记忆来解决问题157
10.2.3解决问题时起作用的两类记忆157
10.3自动化:构建内隐记忆160
10.3.1内隐记忆会随着时间的推移而变化161
10.3.2为什么自动化可以加快编程速度163
10.3.3强化内隐记忆164
10.4从代码及其解释中汲取经验165
10.4.1第三种认知负荷:关联认知负荷166
10.4.2在工作中运用样例168
10.5小结169
第四部分代码协作
第11章编程活动和任务172
11.1程序设计包括不同的编程活动172
11.1.1搜索活动173
11.1.2理解活动173
11.1.3转写活动174
11.1.4递增活动174
11.1.5探索活动174
11.1.6为什么符号认知维度框架不包括调试活动175
11.2受到干扰的程序员176
11.2.1编程任务需要“预热”176
11.2.2思路被打断的后果177
11.2.3如何减轻干扰的影响177
11.2.4限制干扰出现的时机180
11.2.5关于多任务处理的一些思考182
11.3小结183
第12章设计和改进大型系统184
12.1代码库的属性185
12.1.1认知维度185
12.1.2利用代码库认知维度来改进代码库193
12.1.3设计策略及其权衡194
12.2认知维度和编程活动196
12.2.1认知维度对不同编程活动的影响196
12.2.2针对预期的编程活动优化代码库197
12.3小结198
第13章对新程序员进行适岗培训199
13.1适岗培训中存在的问题199
13.2高级程序员与初级程序员的区别200
13.2.1深入分析初级程序员的表现201
13.2.2具体看待概念与抽象看待概念之间的区别205
13.3完善适岗培训流程207
13.3.1贪多嚼不烂207
13.3.2改善受训者的记忆208
13.3.3代码共读210
13.4小结212
写在最后213
······

最后修改:2024 年 06 月 11 日