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