作者:[美] Robert C. Martin
翻譯:章顯洲 余晟
https://book.douban.com/subject/11614538/
第一章 專業(yè)主義
1.1 清楚你要什么
專業(yè)主義的精髓在于將公司利益視同個人利益堰塌。所以犯錯不是“在所難免的”,而是應(yīng)當(dāng)極力避免聚假,并勇于承擔(dān)后果遵堵。
1.2 擔(dān)當(dāng)責(zé)任
1.3 不行損害之事
- 不破壞軟件功能
讓QA找不出問題三热,而不是讓QA幫忙檢查 - 確信代碼能正常運(yùn)行
要考慮單元測試趴生,測試覆蓋率茅郎,測試驅(qū)動開發(fā)(TDD) - 自動化QA
- 不破壞結(jié)構(gòu)
所有軟件項目的根本指導(dǎo)原則是:軟件要易于修改患雏。
不破壞結(jié)構(gòu)并不表示盡量少修改代碼茅茂,相反捏萍,如果期望自己的軟件靈活可變,就應(yīng)該時常修改它空闲。
事實是令杈,大多數(shù)開發(fā)人員不敢不斷修改代碼,因為害怕改壞了碴倾。這里就又回到上面的“自動化測試”逗噩,如果有自動化測試,并且測試覆蓋率也很高跌榔,那么就不會害怕改壞了异雁。
1.4 職業(yè)道德
職業(yè)發(fā)展是個人的事情,雇主沒有義務(wù)考慮這些僧须,也沒有義務(wù)給你培訓(xùn)纲刀,送你參加會議等等。
職業(yè)道德是:
- 你自己要計劃每周工作的時間担平,比如60小時示绊,其中40小時是給雇主的芥挣,剩下的20小時是給自己做提升使用。
- 了解你的領(lǐng)域
工作中涉及到的東西都要去了解耻台,否則只能寫寫 if-else, while 之類的代碼了。
以下是每個專業(yè)軟件開發(fā)人員必須精通的事項:
設(shè)計模式:GoF 書中(設(shè)計模式)的23種模式
設(shè)計原則:必須了解SOLID原則空另,而且要深刻理解組件設(shè)計原則
方法:XP盆耽、Scrum、精益扼菠、看板摄杂、瀑布、結(jié)構(gòu)化分析循榆、結(jié)構(gòu)化設(shè)計等
實踐:TDD析恢、OOP、結(jié)構(gòu)化編程秧饮、CI&CD&CD映挂、結(jié)對編程
工件:UML圖、DFD圖盗尸、結(jié)構(gòu)圖柑船、Petri網(wǎng)絡(luò)圖、狀態(tài)遷移圖表泼各、流程圖鞍时、決策表
堅持學(xué)習(xí)
堅持練習(xí)(業(yè)精于勤)
合作
輔導(dǎo)(教學(xué)相長)
了解業(yè)務(wù)領(lǐng)域(熟悉行業(yè)背景,不能全按照規(guī)格說明去編碼扣蜻,而是要能夠辨別逆巍、質(zhì)疑一些需求)
與雇主/客戶保持一致
謙遜(每個人都會犯錯,所以不要嘲笑別人莽使,自己出錯了能坦然接收別人的嘲笑)
第二章 說“不”
能就是能锐极,不能就是不能。不要說“試試看”吮旅。 - 尤達(dá)
這一章介紹了“專業(yè)程序員要竭盡所能地追求和捍衛(wèi)自身的目標(biāo)溪烤,從而會和管理者產(chǎn)生對抗”,“高風(fēng)險時刻更應(yīng)該說不”庇勃,“團(tuán)隊精神是為整體目標(biāo)著想檬嘀,而不是試試看”。而這些前提都是開發(fā)人員人員能夠做到較好的項目排期责嚷,并且有理有據(jù)地對管理者說“不”鸳兽,同時也不能總說不,否則就是能力問題了罕拂。
第三章 說“是”
3.1 承諾用語
口頭上說揍异、心理認(rèn)真全陨、付諸行動。
“缺乏承諾的”的征兆:
- 我們要衷掷。辱姨。。
- 我需要戚嗅。雨涛。。
- 懦胞。替久。。應(yīng)當(dāng)躏尉。蚯根。。
- 讓我們胀糜。颅拦。。
- 希望僚纷。矩距。。
- 但愿怖竭。锥债。。
真正的承諾:我將在(時間點)之前完成(某個任務(wù))
言必行行必果痊臭,如果沒做到的話哮肚,要如何應(yīng)對呢?
- 之所以沒成功广匙,是因為我寄希望于某某去做這件事允趟。
- 之所以沒成功,是因為我不太確信是否真能完成得了
即使目標(biāo)無法完成鸦致,也能全力前進(jìn)潮剪,離目標(biāo)更近。 - 之所以沒成功分唾,是因為有些時候我真的無能為力抗碰。
突發(fā)事件出現(xiàn)后,盡快去調(diào)整別人對你的預(yù)期(越快越好)绽乔。
總結(jié):估算日期弧蝇、確定最后期限、交流溝通等等,做出承諾會令人害怕看疗,但是可以建立個人的信譽(yù)(reputation)沙峻。
3.2 學(xué)習(xí)如何說“是”
-
“試試”的另一面
- 堅守原則
首先,測試两芳、文檔摔寨、代碼整潔性這些是不能夠省略的,因為省略這些也不能保證更快完成怖辆。多年的經(jīng)驗是祷肯,打破這些紀(jì)律和原則,更會拖慢進(jìn)度疗隶。
然后,嘗試說服管理者確實無法做到翼闹,可以找
最后斑鼻,如果實在不行,必須要做到猎荠,也得給自己爭取利益坚弱,不管是加人也好、調(diào)休也好关摇。
3.3 總結(jié)
專業(yè)人士不需要對所有請求都回答“是”荒叶。不過,應(yīng)該努力尋找創(chuàng)新的方法输虱,盡可能做到有求必應(yīng)些楣。當(dāng)專業(yè)人士給出肯定回答時,他們會使用承諾用語宪睹,以確保各方能夠明白無誤地理解承諾內(nèi)容愁茁。
第四章 編碼
4.1 做好準(zhǔn)備
編碼要求聚精會神,要避免:
- 心煩意亂時寫代碼
- 疲勞時寫代碼(比如加班亭病,凌晨3點)
- 焦慮時寫代碼
4.2 流態(tài)區(qū)
其實就是效率很高的狀態(tài)鹅很。
但是這種狀態(tài)其實是一種”淺層冥想”狀態(tài),敲出的代碼會增多罪帖,但是理性思考就少了促煮。
結(jié)對編程的好處在于任何一方都不會進(jìn)入流態(tài)區(qū)。
4.3 阻塞
寫不出來的時候要學(xué)會調(diào)整狀態(tài)整袁。做些事情菠齿,而不是死盯著屏幕。
4.4 調(diào)試
4.5 保持節(jié)奏
也就是調(diào)整狀態(tài)葬项。
4.6 進(jìn)度延遲
4.7 幫助他人
第五章 測試驅(qū)動開發(fā)
TDD不光是一種技巧泞当,也是一種思維方式。
三大原則:
- 編好失敗單元測試之前,不要編寫任何產(chǎn)品代碼襟士。
- 只要有一個單元測試失敗了盗飒,就不要再編寫代碼;無法通過編譯也是一種失敗情況陋桂。
- 產(chǎn)品代碼恰好能夠讓當(dāng)前失敗的單元測試成功通過即可逆趣,不要多謝。
這樣測試代碼嗜历、產(chǎn)品代碼宣渗、測試代碼、產(chǎn)品代碼梨州。痕囱。。同步增長暴匠,互為補(bǔ)充鞍恢。
5.3 TDD的優(yōu)勢
- 確定性
單元測試通過了,對產(chǎn)品就有把握了每窖。 - 降低缺陷注入率
- 勇氣
有助于重構(gòu)帮掉、修改糟糕代碼 - 文檔
單元測試即文檔。 - 設(shè)計
測試代碼的一個問題是必須隔離出待測試的代碼窒典,這樣有助于代碼的解耦蟆炊,也就有助于開發(fā)出更好的設(shè)計。
(先寫產(chǎn)品代碼瀑志,很容易寫出一大坨耦合的代碼涩搓,不利于測試;先寫測試代碼就可以避免) - 專業(yè)人士的選擇
5.4 TDD的局限
測試代碼也可能很糟糕劈猪。缩膝。。
還有一些其他場景岸霹,不適合TDD
等等
第六章 練習(xí)
為開源項目貢獻(xiàn)代碼疾层。
第七章 驗收測試
7.1 需求的溝通
- 避免過早精細(xì)化
需求總會變化的,突發(fā)事件也總是會發(fā)生的贡避,在這之前想要確定最終交付的一項項的功能痛黎,就有點浪費(fèi)精力了。 - 明確需求
跟客戶直接隔著一層又一層刮吧,就會導(dǎo)致信息的丟失湖饱,也就會導(dǎo)致對需求理解的偏差。
7.2 驗收測試
- 什么叫完成杀捻?
QA + 需求方都確認(rèn)了井厌,才叫完成。 - 溝通
- 自動化
- 額外工作
5.驗收測試什么時候?qū)懀烧l寫
業(yè)務(wù)方+QA > 業(yè)務(wù)分析員+QA > QA > Dev
避免同一個人既寫了代碼又寫了測試仅仆。 - 測試的協(xié)商與被動推進(jìn)
- 驗收測試和單元測試
- GUI及其他因素
- CI
7.3 結(jié)論
編寫自動化的驗收測試可以避免交流中的誤解器赞。
第八章 測試策略
8.1 QA應(yīng)該找不到錯誤
QA和Dev是一個團(tuán)隊的刨仑,而不是對立的匿沛。
8.2 自動化測試金字塔
從下往上,覆蓋率由高到低:
單元測試胳赌,組件測試咳榜,集成測試夏醉,系統(tǒng)測試,Web自動化測試涌韩,人工探索式測試畔柔。
第九章 時間管理
9.1 會議
- 拒絕一些會議
- 提前離席
- 確定議程與目標(biāo)
- 站會(盡可能快)
- 迭代計劃會議
- Retro
- 爭論/反對(爭論之所以花費(fèi)很多時間,是因為各方都拿不出有力的證據(jù))
9.2 注意力(精力)
- 睡眠
- 咖啡因
- 恢復(fù)
- 肌肉注意力
- 輸入與輸出
9.3 時間拆分和番茄工作法
劃分時間段臣樱,比如25分鐘一個時間段释树,這段時間內(nèi)只做一件事,25分鐘結(jié)束后再處理這段時間內(nèi)發(fā)生的事情擎淤。
25分鐘專注+5分鐘休息,4輪過后休息30分鐘秸仙。
9.4 排好優(yōu)先級
9.5 避免死胡同里浪費(fèi)時間
9.6 避免陷入泥潭
9.7 結(jié)論
專業(yè)開發(fā)人員要注意管理自己的時間和精力嘴拢,排好優(yōu)先級,認(rèn)清當(dāng)前的狀況寂纪,并避免走入死胡同和陷入泥潭席吴。
第十章 預(yù)估
第二章 說“不” 里已經(jīng)提到了預(yù)估的重要性。
10.1 區(qū)分預(yù)估和承諾
10.3 預(yù)估任務(wù)
按照斐波那契數(shù)列預(yù)估(1捞蛋,2孝冒,3,5拟杉,8)
10.4 大數(shù)定律
大任務(wù)分割為小任務(wù)庄涡,預(yù)估,加和搬设,這樣預(yù)估準(zhǔn)確率高一些
10.5 結(jié)論
專業(yè)開發(fā)人員一旦做了承諾穴店,就會提供確定的數(shù)字,按時兌現(xiàn)拿穴。
但是大多數(shù)情況下泣洞,他們不會做這種承諾,而是提供概率預(yù)估默色,來描述期望的完成時間和可能的變數(shù)球凰。
第十一章 壓力
11.1 避免壓力
- 承諾
- 保持整潔
- 危機(jī)中的紀(jì)律
11.2 應(yīng)對壓力
- 不要慌張
- 溝通
- 依靠紀(jì)律原則
- 尋求幫助
11.3 結(jié)論
能回避壓力的時候盡可能回避,無法回避時則勇敢直面壓力。
可以通過慎重承諾呕诉、遵循自己的紀(jì)律原則缘厢、保持整潔來回避壓力。
直面壓力時义钉,保持冷靜昧绣,多與人溝通,堅持原則捶闸,尋求他人幫助夜畴。
第十二章 協(xié)作
12.1 程序員與人
- 與雇主
多了解業(yè)務(wù) - 與程序員
互相學(xué)習(xí)、互相幫助
12.3 結(jié)論
編程就意味著與人協(xié)作删壮,與人交流贪绘。
第十三章 團(tuán)隊與項目
13.1 只是簡單的混合嗎
- 有凝聚力的團(tuán)隊
- 如何管理有凝聚力的團(tuán)隊
- 項目承包人的困境
13.2 結(jié)論
團(tuán)隊比項目更難構(gòu)建。因此央碟,組件穩(wěn)健的團(tuán)隊税灌,接手一個又一個的項目,整體移動亿虽,形成凝聚力菱涤,不斷磨合,一直共同工作洛勉,成為不斷交付項目的強(qiáng)大引擎粘秆。
第十四章 輔導(dǎo)、學(xué)徒期與技藝
14.1 失敗的學(xué)位教育
14.2 輔導(dǎo)
14.3 學(xué)徒期
14.4 技藝
14.5 結(jié)論
學(xué)校傳授的是計算機(jī)編程的理論收毫,還缺少原則攻走、實踐、技能此再。需要軟件行業(yè)中的每一代人去引導(dǎo)下一代人昔搂。
讀后感
這本書的內(nèi)容本身就很務(wù)虛,作者通過大量的输拇、大段的舉例說明摘符,來描述他想要表達(dá)的思想。
而這些思想又不是各自獨(dú)立的策吠,分為十四個章節(jié)议慰,相互交織在一起,導(dǎo)致一些重復(fù)(比如多次提到需要溝通奴曙,還有關(guān)于測試别凹,團(tuán)隊協(xié)作,團(tuán)隊精神等等)洽糟,所以顯得有些混亂炉菲。
同時這十四個章節(jié)涵蓋的面又有些廣堕战,從個人技能到與人協(xié)作,再到輔導(dǎo)拍霜、學(xué)徒嘱丢,稍顯零散。
不過可以看出祠饺,這些思想是作者經(jīng)年累月的寶貴的人生經(jīng)驗越驻,還是可以讓讀者在多個方面產(chǎn)生共鳴的。
記住這些經(jīng)驗道偷,在工作中時刻提醒自己缀旁,一定可以有所收獲的。
簡單地總結(jié)一下:
- 提高預(yù)估勺鸦、排期的能力并巍,從而可以從容地說“不”,說“是”换途,提高個人的聲譽(yù)懊渡,減小壓力;
- 溝通交流军拟,不僅要與業(yè)務(wù)方交流業(yè)務(wù)剃执,還要與管理者交流進(jìn)度,還要與其他程序員交流技術(shù)懈息,互相幫助肾档;
- 管理好時間,不光是工作上漓拾,減少無意義的會議、管理精力戒祠、排好優(yōu)先級骇两、避免死胡同和泥潭,還要給自己保留提升個人技藝的時間姜盈,勤加練習(xí)低千;
- 建立個人的原則,例如不輕易承諾馏颂、保持整潔示血、不能為了工期而削減測試代碼等等,這些紀(jì)律也可以幫助你說“不”救拉,說“是”难审,以及應(yīng)對壓力;
- 團(tuán)隊凝聚力是完成項目的前提亿絮;
- 怎么才算完成告喊?開發(fā)人員要做到自己測試沒問題麸拄,然后再交給QA,等QA和業(yè)務(wù)方都確認(rèn)后才算完成黔姜。
不是說代碼寫完了就完了的拢切。
做到了上面的這些,才能算作專業(yè)人士秆吵,才能算是具有程序員的職業(yè)素養(yǎng)淮椰!
P.S. 雖然本身很務(wù)虛,但也通過大量的舉例纳寂,提出了一些務(wù)實的建議和方法主穗,比如:
- 多了解技能領(lǐng)域:設(shè)計模式、設(shè)計原則烈疚、方法黔牵、實踐、工件等
- 編碼是一項腦力+體力勞動爷肝,所以需要身體做好準(zhǔn)備猾浦,要避免疲勞、焦慮時編碼
- 時間管理里灯抛,減少會議時間金赦、減少無意義的爭論(讓數(shù)據(jù)說話)
- 預(yù)估任務(wù)時,(1对嚼,2夹抗,3,5纵竖,8)漠烧,拆分任務(wù)再預(yù)估
- 項目交付快要失敗前,及時溝通靡砌,降低別人的期望已脓,保護(hù)你自己的聲譽(yù),也減小你的壓力