程序員的38堂成長課 Becoming a Better Programmer: A Handbook for People Who Care About Code

[英]皮特·古德利夫(Pete Goodliffe)

  • 程序員的38堂成長課-preview-1
  • 程序員的38堂成長課-preview-2
程序員的38堂成長課-preview-1

商品描述

本書以38個話題的形式,從軟件開發的角度講述瞭如何成為優秀的程序員,是一份“程序員成長課程表”。全書內容涵蓋程序員職業生涯的方方面面,共分為五大部分:如何編寫代碼,有益編程的重要實踐,如何打造卓越的編程職業生涯,如何採用切實可行的辦法按時交付代碼,如何與其他從事軟件開發的人高效合作。不管你是經驗豐富的開發人員,還是開發新手,抑或只是編程愛好者,都可以從本書中找到有價值的提示。

作者簡介

皮特.古德利夫(Pete Goodliffe),是擁有20餘年經驗的程序員,現任inMusic公司軟件開發副總裁。他在軟件開發方面涉獵廣泛,從操作系統實現到音頻編解碼器和多媒體應用開發,再到嵌入式固件開發和iOS開發。他為大型程序員社群ACCU撰寫雜誌專欄“Becoming a Better Programmer”,另著有《編程匠藝:編寫卓越的代碼》。

目錄大綱

前言 xix
第 1 章 心系代碼 1
第 一部分 編碼乃餘事
第 2 章 保持外觀整潔 6
2.1 編碼規範不是小事 7
2.2 它關乎溝通 8
2.3 排版 9
2.3.1 結構合理 9
2.3.2 一致性 10
2.4 命名 11
2.4.1 簡潔 12
2.4.2 清晰 12
2.4.3 地道 12
2.4.4 準確 12
2.5 得體地修改代碼 13
2.6 結論 13
第 3 章 寫更少的代碼 15
3.1 為什麼要關注 16
3.2 不嚴謹的邏輯判斷 16
3.3 重複代碼 19
3.4 殭屍代碼 20
3.5 註釋 21
3.6 喋喋不休 22
3.7 設計缺陷 23
3.8 空白 24
3.9 解決之道 24
3.10 結論 25
第 4 章 刪除也是一種優化 27
4.1 代碼沉迷 28
4.2 因為無法避免,所以可以接受 28
4.3 那又能怎樣呢 29
4.4 喚醒夢中人 30
4.5 動個手術吧 30
4.6 結論 31
第 5 章 代碼之背影 33
5.1 編碼規範 34
5.2 技術現狀 35
5.3 慣用法 36
5.4 設計決策 37
5.5 bug 37
5.6 結論 38
第 6 章 導航路線 41
6.1 朋友的幫助 42
6.2 尋找線索 42
6.3 邊幹邊學 45
6.3.1 低垂的果實 45
6.3.2 代碼檢測 46
6.3.3 先研究,再行動 46
6.3.4 測試先行 46
6.3.5 整理內務 46
6.3.6 記錄你的發現 47
6.4 結論 47
第 7 章 走出泥潭 50
7.1 嗅出問題 50
7.2 走進泥淖 51
7.3 用調查說話 51
7.4 入坑工作 52
7.5 清理混亂 53
7.6 做出改變 53
7.7 編寫爛代碼就是糟糕的程序員嗎 54
第 8 章 不可忽視錯誤 57
8.1 錯誤機制 58
8.2 瘋狂的舉動 59
8.3 托詞 59
8.4 結論 60
第 9 章 意料之中的意外 62
9.1 各種錯誤 62
9.2 線程 63
9.3 關閉系統 63
9.4 話外之意 63
第 10 章 bug追踪 66
10.1 經濟考量 67
10.2 預防勝於治療 67
10.3 bug追踪 68
10.3.1 捕獲錯誤 68
10.3.2 活用二分法 69
10.3.3 軟件考古 69
10.3.4 測試,測試,再測試 70
10.3.5 磨刀不誤砍柴工 70
10.3.6 用排除法查找問題 71
10.3.7 保持清潔,預防疾病 71
10.3.8 迂迴策略 72
10.3.9 不要急於離開 72
10.4 不可複現的bug 72
10.5 結論 74
第 11 章 測試時間 76
11.1 為什麼測試 76
11.1.1 縮短反饋循環 77
11.1.2 測試代碼的代碼 77
11.1.3 誰來編寫測試 78
11.2 測試的種類 78
11.3 什麼時候編寫測試 79
11.4 什麼時候運行測試 80
11.5 測試什麼 81
11.6 優質的測試 81
11.7 一個具體的測試 83
11.8 測試的結構 84
11.8.1 測試的維護 84
11.8.2 選擇測試框架 85
11.9 沒有代碼是孤島 85
11.10 結論 87
第 12 章 應對複雜性 89
12.1 圓團 90
12.2 案例學習:降低圓團複雜度 92
12.3 線條 93
12.4 人 96
12.5 結論 96
第 13 章 雙城故事 99
13.1 混亂大都市 100
13.1.1 讓人無法理解 100
13.1.2 缺乏內聚 101
13.1.3 不必要的耦合 102
13.1.4 代碼問題 102
13.1.5 代碼之外的問題 103
13.1.6 一張來自大都市的明信片 103
13.2 設計之城 104
13.2.1 合理放置功能 105
13.2.2 一致性 105
13.2.3 架構的演進 105
13.2.4 延緩設計決策 106
13.2.5 保證質量 106
13.2.6 管理技術債 107
13.2.7 測試方案設計 107
13.2.8 設計時間分配 108
13.2.9 與設計同行 108
13.3 那又怎樣 109
第二部分 刻意練習,成就卓越
第 14 章 軟件開發是…… 114
14.1 軟件(食物)那些事 114
14.2 軟件開發是……藝術 115
14.3 軟件開發是……科學 116
14.4 軟件開發是……運動 118
14.5 軟件開發是……做遊戲 119
14.6 軟件開發是……雞毛蒜皮的瑣事 120
14.7 隱喻過多 121
第 15 章 遵守規則 123
15.1 我們需要更多規則! 124
15.2 制定規則 125
第 16 章 保持簡單 127
16.1 簡單設計 128
16.1.1 簡單易用 128
16.1.2 防止誤用 128
16.1.3 大小很重要 128
16.1.4 代碼調用路徑短 129
16.1.5 穩定性 129
16.2 簡單代碼 129
16.3 保持簡單,別做蠢事 130
16.4 假設會損害簡單性 130
16.5 避免過早優化 130
16.6 足夠簡單 131
16.7 簡單結論 131
第 17 章 開動腦筋 133
17.1 別犯傻 133
17.2 避免盲目 134
17.3 你可以思考! 135
第 18 章 沒有一成不變 137
18.1 大膽地改 138
18.2 改變態度 139
18.3 做出改變 140
18.3.1 規劃改變 140
18.3.2 改變的工具 140
18.3.3 慎重地選擇戰場 141
18.4 萬變不離其宗 141
第 19 章 代碼復用案例 143
19.1 代碼復用案例1:複製–粘貼 143
19.2 代碼復用案例2:為複用進行設計 144
19.3 代碼復用案例3:提升和重構 145
19.4 代碼復用案例4:購買或重新發明輪子 145
第 20 章 高效版本控制 148
20.1 用進廢退 149
20.2 隨便選一個 150
20.3 存儲正確之物 150
20.3.1 答案一:存儲所有 150
20.3.2 答案二:存儲盡可能少的文件 151
20.3.3 存儲軟件版本 152
20.3.4 代碼庫的佈局 152
20.4 用好版本控制系統 152
20.4.1 原子提交 152
20.4.2 提供正確的信息 153
20.4.3 精心創建代碼提交 153
20.5 分支:只見樹木不見森林 154
20.6 代碼的家園 155
20.7 結論 155
第 21 章 讓球越過門柱 158
21.1 軟件開發:充滿有機肥料的管道 159
21.2 錯誤的非黑即白 160
21.3 通過解決團隊問題來修復代碼問題 161
21.4 將構建發送給QA人員 162
21.4.1 首先進行自測 163
21.4.2 明確發布意圖 163
21.4.3 欲速則不達 164
21.4.4 自動化 164
21.4.5 尊重 164
21.5 當你收到故障報告時 165
21.6 差異使我們更強大 166
21.7 拼圖的碎片 166
第 22 章 凍結代碼奇事 169
22.1 尋找代碼凍結 169
22.2 世界新秩序 170
22.3 凍結的類型 171
22.4 採用分支解決問題 172
22.5 不是真正凍結 172
22.6 代碼凍結的時間 173
22.7 感受代碼凍結 173
22.8 就快結束了 174
22.9 反代碼凍結 174
22.10 結論 175
第 23 章 軟件發布 177
23.1 流程的一部分 178
23.2 機器上的一個齒輪 179
23.2.1 第 1 步:初始化發布 179
23.2.2 第 2 步:準備發布 179
23.2.3 第 3 步:構建發布 180
23.2.4 第 4 步:打包 181
23.2.5 第 5 步:部署 181
23.3 早發布、勤發布 182
23.4 還有更多…… 182
第三部分 束身修行
第 24 章 做一個樂知者 186
24.1 學習什麼 187
24.2 學習如何學習 188
24.3 學習模型 190
24.4 以教促學 192
24.5 知行合一 192
24.6 我們學到了什麼 193
第 25 章 考試驅動型程序員 195
25.1 把問題講清楚 196
25.2 成功使人自滿 196
25.3 考試時光 197
25.4 考試驅動型程序員 197
25.5 結論 198
第 26 章 享受挑戰 200
26.1 激勵 200
26.2 有哪些挑戰 201
26.3 是誰在說:不要這麼做! 201
26.4 接受挑戰 202
26.5 結論 203
第 27 章 避免停滯 204
27.1 技能就是你的投資 205
27.2 為本書讀者準備的一個練習 205
27.3 職業安全 206
第 28 章 程序員的道德規範 209
28.1 對代碼的態度 210
28.2 法律問題 211
28.3 對人的態度 211
28.3.1 隊友 212
28.3.2 管理者 213
28.3.3 雇主 213
28.3.4 你自己 214
28.4 希波克拉底誓言 214
28.5 結論 214
第 29 章 熱愛編程語言 217
29.1 熱愛所有的語言 217
29.2 熱愛你的語言 219
29.3 與編程語言磨合 220
29.3.1 愛和尊重 220
29.3.2 承諾 220
29.3.3 溝通 221
29.3.4 耐心 221
29.3.5 共同的價值觀 222
29.4 這是一個完美的比喻嗎 222
29.5 結論 222
第 30 章 程序員的姿態 224
30.1 基本的計算機操作姿態 224
30.1.1 調試代碼時的姿態 226
30.1.2 當情況惡化時 227
30.1.3 通宵加班 227
30.1.4 高層介入乾預 228
30.1.5 警報解除 228
30.1.6 設計階段 229
30.2 視覺疲勞 229
30.3 結論 230
第四部分 計日程功
第 31 章 用智不用力 234
31.1 慎選戰場 235
31.2 戰鬥策略 235
31.2.1 復用智慧 235
31.2.2 轉變成別人的問題 235
31.2.3 只做必須做的 236
31.2.4 使用探針試驗 236
31.2.5 排優先級 236
31.2.6 確認什麼是真正需要的 237
31.2.7 一次只做一件事 237
31.2.8 保持簡單 237
31.2.9 不要拖延和積累問題 238
31.2.10 自動化 238
31.2.11 預防錯誤 238
31.2.12 溝通 239
31.2.13 避免過度疲勞 239
31.2.14 強大的工具 239
31.3 結論 239
第 32 章 完成之際即完成 242
32.1 我們還沒到嗎 242
32.2 逆向開發:分解 243
32.3 定義“完成” 244
32.4 說乾就乾 246
第 33 章 這次我明白了…… 249
33.1 荒島式開發 251
33.2 站在山腳下 252
第五部分 覓良師益友
第 34 章 他人之力 256
34.1 如何實現 257
34.2 你心目中的專家 258
34.3 事後諸葛亮 258
第 35 章 至關重要的一個認知 261
35.1 拓展這個隱喻 262
35.2 責任感是關鍵 262
35.3 代碼評審 263
35.4 落地 263
35.5 定標準 264
35.6 後續行動 264
35.7 結論 265
第 36 章 說出來! 267
36.1 編寫代碼就是溝通 267
36.1.1 和機器說話 267
36.1.2 和生靈說話 268
36.1.3 和工具說話 270
36.2 人與人之間的溝通 270
36.2.1 交談方式 270
36.2.2 注意你的言辭 271
36.2.3 肢體語言 271
36.2.4 並行溝通 272
36.3 團隊之間的溝通 272
36.4 與客戶溝通 273
36.5 其他溝通 273
36.6 結論 273
第 37 章 各種宣言 276
37.1 軟件開發通用宣言 277
37.2 就此打住 277
37.3 一些宣言 277
37.4 真是這樣嗎 277
37.5 畫龍點睛 278
第 38 章 代碼賦 281
後記 285