
內容簡介
為什麼你在寫代碼時總會遇到這樣或那樣的問題?為什麼你總是記錯某些語法?為什麼有些人能夠快速學會新的編程語言,而有些人則不能?在試圖解決困難或複雜的問題時,我們的大腦其實有一套特定的工作方式。本書從認知科學角度剖析優秀程序設計背後的腦科學原理,為你揭開大腦思考編程的奧秘。本書分為四大部分,共有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 日
© 允許規範轉載
