程序員超強大腦 The Programmer's Brain: What Every Programmer Needs to Know about Cognition

[荷] 費莉安·赫爾曼斯(Felienne Hermans)

  • 程序員超強大腦-preview-1
  • 程序員超強大腦-preview-2
程序員超強大腦-preview-1

買這商品的人也買了...

商品描述

為什麽你在寫代碼時總會遇到這樣或那樣的問題?為什麽你總是記錯某些語法?為什麽有些人能夠快速學會新的編程語言,而有些人則不能?在試圖解決困難或復雜的問題時,我們的大腦其實有一套特定的工作方式。本書從認知科學角度剖析優秀程序設計背後的腦科學原理,為你揭開大腦思考編程的奧秘。本書分為四大部分,共有13章。你將瞭解如下內容:如何高效地學習新的編程語言,如何快速地理解復雜的代碼,如何牢固地記住各種語法,如何在繁雜的程序設計工作中優化認知資源。

本書是程序員的普適書,初學編程的初高中生也可以閱讀。

作者簡介

【作者简介】

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

 

【译者简介】蒋楠

 

出身电子与计算机工程专业的高级技术产品经理,负责C端产品的规划和设计,对算法和数据密集型应用同样兴趣浓厚。兼具科技图书译者、马拉松跑者、航天爱好者等多重身份,译作包括《计算机简史(第三版)》《计算机科学精粹》等。

目錄大綱

第 一部分 代碼閱讀

第 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 能學會法語,就能學會Python 77

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