本書(shū)是編程大師“Bob 大叔”40余年編程生涯的心得體會(huì)的總結(jié),講解要成為真正專(zhuān)業(yè)的程序員需要具備什么樣的態(tài)度,需要遵循什么樣的原則,需要采取什么樣的行動(dòng)。作者以自己以及身邊的同事走過(guò)的彎路、犯過(guò)的錯(cuò)誤為例,意在為后來(lái)者引路,助其職業(yè)生涯邁上更高臺(tái)階。
1. 匯聚編程大師40余年編程生涯的心得體會(huì)
2. 闡釋軟件工藝中的原理、技術(shù)、工具和實(shí)踐
3. 助力專(zhuān)業(yè)軟件開(kāi)發(fā)人員具備令人敬佩的職業(yè)素養(yǎng)
成功的程序員在以往的工作和生活中都曾經(jīng)歷過(guò)大大小小的不確定性,承受過(guò)永無(wú)休止的壓力。他們之所以能夠成功,是因?yàn)閾碛幸粋(gè)共同點(diǎn),都深切關(guān)注創(chuàng)建軟件所需的各項(xiàng)實(shí)踐。他們將軟件開(kāi)發(fā)視為一種需要精雕細(xì)琢加以修煉的技藝,他們以專(zhuān)業(yè)人士的標(biāo)準(zhǔn)要求自己,他們具有職業(yè)素養(yǎng)。
軟件開(kāi)發(fā)大師Robert C. Martin在書(shū)中介紹了真實(shí)軟件技藝中的各項(xiàng)原則、技術(shù)、工具和實(shí)踐,展示了怎么以自豪、自尊和自信的心態(tài)進(jìn)行軟件開(kāi)發(fā),怎么取得卓越表現(xiàn)和豐碩成果,怎么做到有效溝通和確切估算,怎么以坦誠(chéng)的心態(tài)面對(duì)困難,并引導(dǎo)讀者認(rèn)識(shí)到專(zhuān)業(yè)程序員肩負(fù)的責(zé)任重大,闡述了什么才是程序員的職業(yè)素養(yǎng)。
書(shū)中的具體內(nèi)容包括:
● 成為真正的軟件專(zhuān)業(yè)人士需要具備哪些條件,如何應(yīng)對(duì)彼此沖突又緊張的進(jìn)度表和不近情理的管理人員;
● 如何做到流暢編程,克服阻塞狀態(tài);
● 如何應(yīng)對(duì)無(wú)休止的工作壓力,避免崩潰;
● 如何培養(yǎng)堅(jiān)持不懈的態(tài)度,如何擁抱新的開(kāi)發(fā)范式;
● 如何管理好時(shí)間,避免身陷泥潭無(wú)法自拔;
● 如何培育有利于程序員和開(kāi)發(fā)團(tuán)隊(duì)茁壯成長(zhǎng)的環(huán)境;
● 什么時(shí)候應(yīng)該說(shuō)“不”,怎么說(shuō);
● 什么時(shí)候應(yīng)該說(shuō)“是”,承諾意味著什么。
軟件強(qiáng)大、優(yōu)雅而實(shí)用,讓人驚嘆不已,不論是開(kāi)發(fā)者還是用戶(hù)都樂(lè)于使用這樣的軟件。它們并非是由機(jī)器編寫(xiě)出來(lái)的,而是出自那些對(duì)軟件技藝擁有堅(jiān)定信念的專(zhuān)業(yè)軟件開(kāi)發(fā)者之手。本書(shū)將幫助讀者成為專(zhuān)業(yè)軟件開(kāi)發(fā)者中的一員,并贏得只有他們才能擁有的榮譽(yù)感和成就感。
必讀引言 1
第1章 專(zhuān)業(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 與雇主/客戶(hù)保持一致 18
1.4.8 謙遜 18
1.5 參考文獻(xiàn) 18
第2章 說(shuō)“不” 19
2.1 對(duì)抗角色 21
2.2 高風(fēng)險(xiǎn)時(shí)刻 24
2.3 要有團(tuán)隊(duì)精神 25
2.3.1 試試看 26
2.3.2 消極對(duì)抗 28
2.4 說(shuō)“是”的成本 30
2.5 如何寫(xiě)出好代碼 35
第3章 說(shuō)“是” 37
3.1 承諾用語(yǔ) 39
3.1.1 識(shí)別“缺乏承諾”的征兆 40
3.1.2 真正的承諾聽(tīng)起來(lái)是怎樣的 40
3.1.3 總結(jié) 43
3.2 學(xué)習(xí)如何說(shuō)“是” 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)寫(xiě)出的代碼 49
4.1.2 焦慮時(shí)寫(xiě)下的代碼 50
4.2 流態(tài)區(qū) 51
4.2.1 音樂(lè) 52
4.2.2 中斷 53
4.3 阻塞 53
4.4 調(diào)試 55
4.5 保持節(jié)奏 57
4.5.1 知道何時(shí)應(yīng)該離開(kāi)一會(huì) 58
4.5.2 開(kāi)車(chē)回家路上 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章 測(cè)試驅(qū)動(dòng)開(kāi)發(fā) 65
5.1 此事已有定論 66
5.2 TDD的三項(xiàng)法則 67
5.3 TDD的優(yōu)勢(shì) 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 專(zhuān)業(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 編程柔道場(chǎng) 76
6.2.1 卡塔 77
6.2.2 瓦薩 78
6.2.3 自由練習(xí) 78
6.3 自身經(jīng)驗(yàn)的拓展 79
6.3.1 開(kāi)源 79
6.3.2 關(guān)于練習(xí)的職業(yè)道德 79
6.4 結(jié)論 80
6.5 參考文獻(xiàn) 80
第7章 驗(yàn)收測(cè)試 81
7.1 需求的溝通 81
7.1.1 過(guò)早精細(xì)化 83
7.1.2 遲來(lái)的模糊性 83
7.2 驗(yàn)收測(cè)試 85
7.2.1 “完成”的定義 85
7.2.2 溝通 88
7.2.3 自動(dòng)化 88
7.2.4 額外工作 89
7.2.5 驗(yàn)收測(cè)試什么時(shí)候?qū),由誰(shuí)來(lái)寫(xiě) 90
7.2.6 開(kāi)發(fā)人員的角色 90
7.2.7 測(cè)試的協(xié)商與被動(dòng)推進(jìn) 91
7.2.8 驗(yàn)收測(cè)試和單元測(cè)試 93
7.2.9 圖形界面及其他復(fù)雜因素 93
7.2.10 持續(xù)集成 94
7.3 結(jié)論 95
第8章 測(cè)試策略 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)化測(cè)試金字塔 98
8.2.1 單元測(cè)試 99
8.2.2 組件測(cè)試 100
8.2.3 集成測(cè)試 100
8.2.4 系統(tǒng)測(cè)試 101
8.2.5 人工探索式測(cè)試 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 爭(zhēng)論/反對(duì) 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)對(duì)壓力 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 只是簡(jiǎn)單混合嗎 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,我的 第一臺(tá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