本書是編程大師“Bob 大叔”40余年編程生涯的心得體會(huì)的總結(jié),講解要成為真正專業(yè)的程序員需要具備什么樣的態(tài)度,需要遵循什么樣的原則,需要采取什么樣的行動(dòng)。作者以自己以及身邊的同事走過的彎路、犯過的錯(cuò)誤為例,意在為后來者引路,助其職業(yè)生涯邁上更高臺階。
1. 匯聚編程大師40余年編程生涯的心得體會(huì)
2. 闡釋軟件工藝中的原理、技術(shù)、工具和實(shí)踐
3. 助力專業(yè)軟件開發(fā)人員具備令人敬佩的職業(yè)素養(yǎng)
成功的程序員在以往的工作和生活中都曾經(jīng)歷過大大小小的不確定性,承受過永無休止的壓力。他們之所以能夠成功,是因?yàn)閾碛幸粋(gè)共同點(diǎn),都深切關(guān)注創(chuàng)建軟件所需的各項(xiàng)實(shí)踐。他們將軟件開發(fā)視為一種需要精雕細(xì)琢加以修煉的技藝,他們以專業(yè)人士的標(biāo)準(zhǔn)要求自己,他們具有職業(yè)素養(yǎng)。
軟件開發(fā)大師Robert C. Martin在書中介紹了真實(shí)軟件技藝中的各項(xiàng)原則、技術(shù)、工具和實(shí)踐,展示了怎么以自豪、自尊和自信的心態(tài)進(jìn)行軟件開發(fā),怎么取得卓越表現(xiàn)和豐碩成果,怎么做到有效溝通和確切估算,怎么以坦誠的心態(tài)面對困難,并引導(dǎo)讀者認(rèn)識到專業(yè)程序員肩負(fù)的責(zé)任重大,闡述了什么才是程序員的職業(yè)素養(yǎng)。
書中的具體內(nèi)容包括:
● 成為真正的軟件專業(yè)人士需要具備哪些條件,如何應(yīng)對彼此沖突又緊張的進(jìn)度表和不近情理的管理人員;
● 如何做到流暢編程,克服阻塞狀態(tài);
● 如何應(yīng)對無休止的工作壓力,避免崩潰;
● 如何培養(yǎng)堅(jiān)持不懈的態(tài)度,如何擁抱新的開發(fā)范式;
● 如何管理好時(shí)間,避免身陷泥潭無法自拔;
● 如何培育有利于程序員和開發(fā)團(tuán)隊(duì)茁壯成長的環(huán)境;
● 什么時(shí)候應(yīng)該說“不”,怎么說;
● 什么時(shí)候應(yīng)該說“是”,承諾意味著什么。
軟件強(qiáng)大、優(yōu)雅而實(shí)用,讓人驚嘆不已,不論是開發(fā)者還是用戶都樂于使用這樣的軟件。它們并非是由機(jī)器編寫出來的,而是出自那些對軟件技藝擁有堅(jiān)定信念的專業(yè)軟件開發(fā)者之手。本書將幫助讀者成為專業(yè)軟件開發(fā)者中的一員,并贏得只有他們才能擁有的榮譽(yù)感和成就感。
必讀引言 1
第1章 專業(yè)主義 7
1.1 清楚你要什么 8
1.2 擔(dān)當(dāng)責(zé)任 8
1.3 首先,不行損害之事 10
1.3.1 不要破壞軟件功能 10
1.3.2 不要破壞結(jié)構(gòu) 12
1.4 職業(yè)道德 13
1.4.1 了解你的領(lǐng)域 14
1.4.2 堅(jiān)持學(xué)習(xí) 16
1.4.3 練習(xí) 16
1.4.4 合作 17
1.4.5 輔導(dǎo) 17
1.4.6 了解業(yè)務(wù)領(lǐng)域 17
1.4.7 與雇主/客戶保持一致 18
1.4.8 謙遜 18
1.5 參考文獻(xiàn) 18
第2章 說“不” 19
2.1 對抗角色 21
2.2 高風(fēng)險(xiǎn)時(shí)刻 24
2.3 要有團(tuán)隊(duì)精神 25
2.3.1 試試看 26
2.3.2 消極對抗 28
2.4 說“是”的成本 30
2.5 如何寫出好代碼 35
第3章 說“是” 37
3.1 承諾用語 39
3.1.1 識別“缺乏承諾”的征兆 40
3.1.2 真正的承諾聽起來是怎樣的 40
3.1.3 總結(jié) 43
3.2 學(xué)習(xí)如何說“是” 43
3.2.1 “試試”的另一面 43
3.2.2 堅(jiān)守原則 44
3.3 結(jié)論 46
第4章 編碼 47
4.1 做好準(zhǔn)備 48
4.1.1 凌晨3點(diǎn)寫出的代碼 49
4.1.2 焦慮時(shí)寫下的代碼 50
4.2 流態(tài)區(qū) 51
4.2.1 音樂 52
4.2.2 中斷 53
4.3 阻塞 53
4.4 調(diào)試 55
4.5 保持節(jié)奏 57
4.5.1 知道何時(shí)應(yīng)該離開一會(huì) 58
4.5.2 開車回家路上 58
4.5.3 洗澡 58
4.6 進(jìn)度延遲 58
4.6.1 期望 59
4.6.2 盲目沖刺 59
4.6.3 加班加點(diǎn) 60
4.6.4 交付失誤 60
4.6.5 定義“完成” 61
4.7 幫助 61
4.7.1 幫助他人 61
4.7.2 接受他人的幫助 62
4.7.3 輔導(dǎo) 62
4.8 參考文獻(xiàn) 63
第5章 測試驅(qū)動(dòng)開發(fā) 65
5.1 此事已有定論 66
5.2 TDD的三項(xiàng)法則 67
5.3 TDD的優(yōu)勢 68
5.3.1 確定性 68
5.3.2 缺陷注入率 68
5.3.3 勇氣 69
5.3.4 文檔 69
5.3.5 設(shè)計(jì) 70
5.3.6 專業(yè)人士的選擇 70
5.4 TDD的局限 70
5.5 參考文獻(xiàn) 71
第6章 練習(xí) 73
6.1 引子 73
6.1.1 10的22次方 74
6.1.2 轉(zhuǎn)變 75
6.2 編程柔道場 76
6.2.1 卡塔 77
6.2.2 瓦薩 78
6.2.3 自由練習(xí) 78
6.3 自身經(jīng)驗(yàn)的拓展 79
6.3.1 開源 79
6.3.2 關(guān)于練習(xí)的職業(yè)道德 79
6.4 結(jié)論 80
6.5 參考文獻(xiàn) 80
第7章 驗(yàn)收測試 81
7.1 需求的溝通 81
7.1.1 過早精細(xì)化 83
7.1.2 遲來的模糊性 83
7.2 驗(yàn)收測試 85
7.2.1 “完成”的定義 85
7.2.2 溝通 88
7.2.3 自動(dòng)化 88
7.2.4 額外工作 89
7.2.5 驗(yàn)收測試什么時(shí)候?qū)懀烧l來寫 90
7.2.6 開發(fā)人員的角色 90
7.2.7 測試的協(xié)商與被動(dòng)推進(jìn) 91
7.2.8 驗(yàn)收測試和單元測試 93
7.2.9 圖形界面及其他復(fù)雜因素 93
7.2.10 持續(xù)集成 94
7.3 結(jié)論 95
第8章 測試策略 97
8.1 QA應(yīng)該找不到任何錯(cuò)誤 98
8.1.1 QA也是團(tuán)隊(duì)的一部分 98
8.1.2 需求規(guī)約定義者 98
8.1.3 特性描述者 98
8.2 自動(dòng)化測試金字塔 98
8.2.1 單元測試 99
8.2.2 組件測試 100
8.2.3 集成測試 100
8.2.4 系統(tǒng)測試 101
8.2.5 人工探索式測試 102
8.3 結(jié)論 102
8.4 參考文獻(xiàn) 102
第9章 時(shí)間管理 103
9.1 會(huì)議 104
9.1.1 拒絕 104
9.1.2 離席 105
9.1.3 確定議程與目標(biāo) 105
9.1.4 立會(huì) 106
9.1.5 迭代計(jì)劃會(huì)議 106
9.1.6 迭代回顧和DEMO展示 107
9.1.7 爭論/反對 107
9.2 注意力點(diǎn)數(shù) 108
9.2.1 睡眠 108
9.2.2 咖啡因 108
9.2.3 恢復(fù) 109
9.2.4 肌肉注意力 109
9.2.5 輸入與輸出 109
9.3 時(shí)間拆分和番茄工作法 110
9.4 要避免的行為 110
9.5 死胡同 111
9.6 泥潭 111
9.7 結(jié)論 112
第10章 預(yù)估 113
10.1 什么是預(yù)估 115
10.1.1 承諾 115
10.1.2 預(yù)估 115
10.1.3 暗示性承諾 117
10.2 PERT 118
10.3 預(yù)估任務(wù) 120
10.4 大數(shù)定律 122
10.5 結(jié)論 123
10.6 參考文獻(xiàn) 123
第11章 壓力 125
11.1 避免壓力 127
11.1.1 承諾 127
11.1.2 保持整潔 127
11.1.3 危機(jī)中的紀(jì)律 128
11.2 應(yīng)對壓力 128
11.2.1 不要驚慌失措 128
11.2.2 溝通 129
11.2.3 依靠你的紀(jì)律原則 129
11.2.4 尋求幫助 129
11.3 結(jié)論 129
第12章 協(xié)作 131
12.1 程序員與人 133
12.1.1 程序員與雇主 133
12.1.2 程序員與程序員 135
12.2 小腦 137
12.3 結(jié)論 138
第13章 團(tuán)隊(duì)與項(xiàng)目 139
13.1 只是簡單混合嗎 139
13.1.1 有凝聚力的團(tuán)隊(duì) 140
13.1.2 如何管理有凝聚力的 團(tuán)隊(duì) 141
13.1.3 項(xiàng)目承包人的困境 142
13.2 結(jié)論 142
13.3 參考文獻(xiàn) 143
第14章 輔導(dǎo)、學(xué)徒期與技藝 145
14.1 失敗的學(xué)位教育 145
14.2 輔導(dǎo) 146
14.2.1 DIGI-COMP I,我的 第一臺計(jì)算機(jī) 146
14.2.2 高中時(shí)代的ECP-18 148
14.2.3 非常規(guī)輔導(dǎo) 150
14.2.4 艱難的錘煉 150
14.3 學(xué)徒期 151
14.3.1 軟件學(xué)徒期 152
14.3.2 現(xiàn)實(shí)情況 154
14.4 技藝 154
14.5 結(jié)論 155
附錄 工具 157