為什么你在寫代碼時(shí)總會(huì)遇到這樣或那樣的問(wèn)題?為什么你總是記錯(cuò)某些語(yǔ)法?為什么有些人能夠快速學(xué)會(huì)新的編程語(yǔ)言,而有些人則不能?在試圖解決困難或復(fù)雜的問(wèn)題時(shí),我們的大腦其實(shí)有一套特定的工作方式。本書(shū)從認(rèn)知科學(xué)角度剖析優(yōu)秀程序設(shè)計(jì)背后的腦科學(xué)原理,為你揭開(kāi)大腦思考編程的奧秘。本書(shū)分為四大部分,共有13章。你將了解如下內(nèi)容:如何高效地學(xué)習(xí)新的編程語(yǔ)言,如何快速地理解復(fù)雜的代碼,如何牢固地記住各種語(yǔ)法,如何在繁雜的程序設(shè)計(jì)工作中優(yōu)化認(rèn)知資源。
本書(shū)是程序員的普適書(shū),初學(xué)編程的初高中生也可以閱讀。
隨著ChatGPT橫空出世,作為程序員的你是否已經(jīng)有了危機(jī)感?在自己編寫代碼和理解他人所寫代碼這兩個(gè)方面,人工智能是否已經(jīng)超越了人類程序員?無(wú)論人工智能如何“進(jìn)化”,有一點(diǎn)是它無(wú)法取代的,那就是人類程序員的超強(qiáng)大腦。本書(shū)是專為程序員而寫的大腦使用指南,旨在幫助程序員用好自己的認(rèn)知優(yōu)勢(shì)。
本書(shū)作者指出,程序設(shè)計(jì)是一個(gè)認(rèn)知過(guò)程,這個(gè)過(guò)程對(duì)程序員的認(rèn)知要求頗高。因此,本書(shū)從認(rèn)知科學(xué)的角度幫助程序員了解大腦工作機(jī)制,從根本上提高程序設(shè)計(jì)工作的效率。
本書(shū)特點(diǎn)
●有助于理解大腦如何加工與代碼相關(guān)的信息。
●內(nèi)容組織符合認(rèn)知模式:代碼閱讀、代碼思考、代碼編寫、代碼協(xié)作。
●助你醍醐灌頂,實(shí)現(xiàn)更快的代碼讀寫速度、更高的工作效率、更少的返工。
●以Python、JavaScript、Java等為例,但原理對(duì)所有語(yǔ)言適用。
【作者簡(jiǎn)介】
費(fèi)莉安·赫爾曼斯(Felienne Hermans),荷蘭萊頓大學(xué)副教授,致力于研究人類如何利用認(rèn)知科學(xué)快速、有效地學(xué)習(xí)程序設(shè)計(jì)語(yǔ)言。費(fèi)莉安對(duì)ChatGPT給軟件工程領(lǐng)域帶來(lái)的深遠(yuǎn)影響有獨(dú)到見(jiàn)解,多次就這一話題接受媒體專訪。她是TC39(JavaScript標(biāo)準(zhǔn)委員會(huì))成員,還自創(chuàng)了Hedy程序設(shè)計(jì)語(yǔ)言。
【譯者簡(jiǎn)介】蔣楠
出身電子與計(jì)算機(jī)工程專業(yè)的高級(jí)技術(shù)產(chǎn)品經(jīng)理,負(fù)責(zé)C端產(chǎn)品的規(guī)劃和設(shè)計(jì),對(duì)算法和數(shù)據(jù)密集型應(yīng)用同樣興趣濃厚。兼具科技圖書(shū)譯者、馬拉松跑者、航天愛(ài)好者等多重身份,譯作包括《計(jì)算機(jī)簡(jiǎn)史(第三版)》《計(jì)算機(jī)科學(xué)精粹》等。
第 一部分 代碼閱讀
第 1章 剖析程序設(shè)計(jì)之惑 2
1.1 代碼造成的各種困惑 2
1.1.1 第 一種困惑:缺乏知識(shí) 3
1.1.2 第二種困惑:缺乏信息 4
1.1.3 第三種困惑:缺乏加工能力 4
1.2 影響程序設(shè)計(jì)的不同認(rèn)知過(guò)程 5
1.2.1 長(zhǎng)時(shí)記憶和程序設(shè)計(jì) 5
1.2.2 短時(shí)記憶和程序設(shè)計(jì) 6
1.2.3 工作記憶和程序設(shè)計(jì) 7
1.3 認(rèn)知過(guò)程之間的關(guān)系 8
1.3.1 簡(jiǎn)要剖析認(rèn)知過(guò)程如何相互作用 8
1.3.2 編程任務(wù)涉及的認(rèn)知過(guò)程 9
1.4 小結(jié) 10
第 2章 快速閱讀代碼 12
2.1 快速閱讀代碼 13
2.1.1 大腦的活動(dòng)情況 14
2.1.2 回顧默寫的代碼 15
2.1.3 回顧第二次默寫的代碼 16
2.1.4 閱讀不熟悉的代碼時(shí)為什么會(huì)感到困難 16
2.2 彌補(bǔ)記憶容量不足的短板 17
2.2.1 組塊威力大 18
2.2.2 資深程序員比新手程序員更善于記憶代碼 21
2.3 看到的代碼比讀到的代碼多 22
2.3.1 圖像記憶 22
2.3.2 不是記憶的內(nèi)容,而是記憶的方法 24
2.3.3 代碼分塊練習(xí) 30
2.4 小結(jié) 31
第3章 快速學(xué)習(xí)編程語(yǔ)法 32
3.1 語(yǔ)法記憶小貼士 32
3.2 如何利用抽認(rèn)卡快速學(xué)習(xí)語(yǔ)法 34
3.2.1 使用抽認(rèn)卡 34
3.2.2 擴(kuò)充抽認(rèn)卡 35
3.2.3 精簡(jiǎn)抽認(rèn)卡 35
3.3 如何避免遺忘 36
3.3.1 遺忘的原因何在 37
3.3.2 間隔重復(fù) 38
3.4 如何牢記編程語(yǔ)法 39
3.4.1 記憶信息的兩種機(jī)制 39
3.4.2 “眼見(jiàn)”還不夠 40
3.4.3 主動(dòng)回憶能夠鞏固記憶 41
3.4.4 主動(dòng)思考也能鞏固記憶 42
3.5 小結(jié) 44
第4章 閱讀復(fù)雜的代碼 45
4.1 為什么復(fù)雜的代碼難以理解 45
4.1.1 工作記憶與短時(shí)記憶的區(qū)別 46
4.1.2 與程序設(shè)計(jì)相關(guān)的3種認(rèn)知負(fù)荷 47
4.2 減輕認(rèn)知負(fù)荷的方法 49
4.2.1 重構(gòu) 50
4.2.2 替換不熟悉的語(yǔ)言結(jié)構(gòu) 51
4.2.3 在抽認(rèn)卡兩面寫上等價(jià)的代碼可以顯著增強(qiáng)學(xué)習(xí)效果 54
4.3 利用記憶輔助工具解決工作記憶過(guò)載的問(wèn)題 54
4.3.1 繪制依賴圖 55
4.3.2 創(chuàng)建狀態(tài)表 57
4.3.3 結(jié)合使用依賴圖和狀態(tài)表 59
4.4 小結(jié) 61
第二部分 代碼思考
第5章 深入理解代碼 64
5.1 變量角色框架 65
5.1.1 變量不同,承擔(dān)的任務(wù)也不同 65
5.1.2 涵蓋大多數(shù)變量的11種角色 66
5.2 角色和范式 68
5.2.1 角色的優(yōu)點(diǎn) 68
5.2.2 匈牙利命名法 70
5.3 加深對(duì)程序的了解 72
5.3.1 文本結(jié)構(gòu)知識(shí)與計(jì)劃知識(shí) 72
5.3.2 程序理解的不同步驟 72
5.4 閱讀代碼和閱讀文本有相似之處 75
5.4.1 閱讀代碼時(shí)大腦的活動(dòng)情況 76
5.4.2 能學(xué)會(huì)法語(yǔ),就能學(xué)會(huì)Python 77
5.5 運(yùn)用文本理解策略來(lái)閱讀代碼 80
5.5.1 激活先驗(yàn)知識(shí) 81
5.5.2 監(jiān)測(cè) 82
5.5.3 確定不同代碼行的重要性 83
5.5.4 推斷變量名的含義 84
5.5.5 視覺(jué)化 85
5.5.6 提問(wèn) 86
5.5.7 摘要 86
5.6 小結(jié) 87
第6章 更好地解決編程問(wèn)題 88
6.1 借助模型來(lái)思考代碼 89
6.2 心智模型 91
6.2.1 詳細(xì)剖析心智模型 92
6.2.2 學(xué)習(xí)新的心智模型 93
6.2.3 如何運(yùn)用心智模型提高代碼分析的效率 94
6.3 概念機(jī)器 98
6.3.1 概念機(jī)器的定義 99
6.3.2 概念機(jī)器的例子 99
6.3.3 概念機(jī)器適用的不同層面 100
6.4 概念機(jī)器和語(yǔ)言描述 101
6.4.1 概念機(jī)器可以擴(kuò)展 102
6.4.2 不同的概念機(jī)器可能催生出相互矛盾的心智模型 103
6.5 概念機(jī)器和圖式 104
6.5.1 圖式的重要性 104
6.5.2 概念機(jī)器是否具有語(yǔ)義性 105
6.6 小結(jié) 105
第7章 迷思概念:錯(cuò)誤的思維方式 106
7.1 為什么學(xué)習(xí)第二門編程語(yǔ)言比學(xué)習(xí)第 一門編程語(yǔ)言更容易 107
7.1.1 充分挖掘現(xiàn)有編程知識(shí)的潛力 108
7.1.2 不同的遷移類型 109
7.1.3 已經(jīng)掌握的知識(shí):是福還是禍 110
7.1.4 遷移有難度 111
7.2 迷思概念:思維中存在的錯(cuò)誤 113
7.2.1 通過(guò)概念轉(zhuǎn)變來(lái)消除迷思概念 114
7.2.2 抑制迷思概念 114
7.2.3 與編程語(yǔ)言有關(guān)的迷思概念 115
7.2.4 在學(xué)習(xí)新的編程語(yǔ)言時(shí)避免形成迷思概念 117
7.2.5 判斷代碼庫(kù)中存在的迷思概念 118
7.3 小結(jié) 118
第三部分 代碼編寫
第8章 提高命名的質(zhì)量 120
8.1 命名為什么重要 121
8.1.1 命名的重要性何在 121
8.1.2 與命名有關(guān)的不同觀點(diǎn) 122
8.1.3 最初的命名實(shí)踐影響深遠(yuǎn) 124
8.2 從認(rèn)知的角度剖析命名 125
8.2.1 規(guī)范的命名方式對(duì)短時(shí)記憶有利 126
8.2.2 含義明確的標(biāo)識(shí)符對(duì)長(zhǎng)時(shí)記憶有利 127
8.2.3 標(biāo)識(shí)符可以包括不同類型的信息以幫助理解 127
8.2.4 評(píng)估標(biāo)識(shí)符質(zhì)量的時(shí)機(jī) 129
8.3 哪些類型的標(biāo)識(shí)符更容易理解 129
8.3.1 是否應(yīng)該使用縮寫 129
8.3.2 采用駝峰命名法還是蛇形命名法 133
8.4 標(biāo)識(shí)符與代碼錯(cuò)誤之間的關(guān)系 134
8.5 如何設(shè)計(jì)質(zhì)量更高的標(biāo)識(shí)符 135
8.5.1 名稱模具 135
8.5.2 運(yùn)用Feitelson設(shè)計(jì)的三步模型來(lái)提高標(biāo)識(shí)符質(zhì)量 138
8.6 小結(jié) 139
第9章 避免低質(zhì)量代碼和認(rèn)知負(fù)荷:兩種框架 140
9.1 為什么存在異味的代碼會(huì)加重認(rèn)知負(fù)荷 140
9.1.1 代碼異味簡(jiǎn)介 141
9.1.2 代碼異味對(duì)認(rèn)知的負(fù)面影響 144
9.2 低質(zhì)量標(biāo)識(shí)符對(duì)認(rèn)知負(fù)荷的影響 146
9.2.1 語(yǔ)言反模式 146
9.2.2 認(rèn)知負(fù)荷的測(cè)量 147
9.2.3 語(yǔ)言反模式和認(rèn)知負(fù)荷 151
9.2.4 語(yǔ)言反模式為什么令人困惑 152
9.3 小結(jié) 152
第 10章 提高解決復(fù)雜問(wèn)題的能力 153
10.1 問(wèn)題解決的實(shí)質(zhì) 153
10.1.1 問(wèn)題解決的三大要素 153
10.1.2 狀態(tài)空間 154
10.2 長(zhǎng)時(shí)記憶在解決編程問(wèn)題時(shí)所起的作用 155
10.2.1 問(wèn)題解決本身是否屬于認(rèn)知過(guò)程 155
10.2.2 培養(yǎng)長(zhǎng)時(shí)記憶來(lái)解決問(wèn)題 157
10.2.3 解決問(wèn)題時(shí)起作用的兩類記憶 157
10.3 自動(dòng)化:構(gòu)建內(nèi)隱記憶 160
10.3.1 內(nèi)隱記憶會(huì)隨著時(shí)間的推移而變化 161
10.3.2 為什么自動(dòng)化可以加快編程速度 163
10.3.3 強(qiáng)化內(nèi)隱記憶 164
10.4 從代碼及其解釋中汲取經(jīng)驗(yàn) 165
10.4.1 第三種認(rèn)知負(fù)荷:關(guān)聯(lián)認(rèn)知負(fù)荷 166
10.4.2 在工作中運(yùn)用樣例 168
10.5 小結(jié) 169
第四部分 代碼協(xié)作
第 11章 編程活動(dòng)和任務(wù) 172
11.1 程序設(shè)計(jì)包括不同的編程活動(dòng) 172
11.1.1 搜索活動(dòng) 173
11.1.2 理解活動(dòng) 173
11.1.3 轉(zhuǎn)寫活動(dòng) 174
11.1.4 遞增活動(dòng) 174
11.1.5 探索活動(dòng) 174
11.1.6 為什么符號(hào)認(rèn)知維度框架不包括調(diào)試活動(dòng) 175
11.2 受到干擾的程序員 176
11.2.1 編程任務(wù)需要“預(yù)熱” 176
11.2.2 思路被打斷的后果 177
11.2.3 如何減輕干擾的影響 177
11.2.4 限制干擾出現(xiàn)的時(shí)機(jī) 180
11.2.5 關(guān)于多任務(wù)處理的一些思考 182
11.3 小結(jié) 183
第 12章 設(shè)計(jì)和改進(jìn)大型系統(tǒng) 184
12.1 代碼庫(kù)的屬性 185
12.1.1 認(rèn)知維度 185
12.1.2 利用代碼庫(kù)認(rèn)知維度來(lái)改進(jìn)代碼庫(kù) 193
12.1.3 設(shè)計(jì)策略及其權(quán)衡 194
12.2 認(rèn)知維度和編程活動(dòng) 196
12.2.1 認(rèn)知維度對(duì)不同編程活動(dòng)的影響 196
12.2.2 針對(duì)預(yù)期的編程活動(dòng)優(yōu)化代碼庫(kù) 197
12.3 小結(jié) 198
第 13章 對(duì)新程序員進(jìn)行適崗培訓(xùn) 199
13.1 適崗培訓(xùn)中存在的問(wèn)題 199
13.2 高級(jí)程序員與初級(jí)程序員的區(qū)別 200
13.2.1 深入分析初級(jí)程序員的表現(xiàn) 201
13.2.2 具體看待概念與抽象看待概念之間的區(qū)別 205
13.3 完善適崗培訓(xùn)流程 207
13.3.1 貪多嚼不爛 207
13.3.2 改善受訓(xùn)者的記憶 208
13.3.3 代碼共讀 210
13.4 小結(jié) 212
寫在最后 213