2018-04-27 《程序員的職業(yè)素養(yǎng) - The Clean Coder》

作者:[美] 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 不行損害之事

  1. 不破壞軟件功能
    讓QA找不出問題三热,而不是讓QA幫忙檢查
  2. 確信代碼能正常運(yùn)行
    要考慮單元測試趴生,測試覆蓋率茅郎,測試驅(qū)動開發(fā)(TDD)
  3. 自動化QA
  4. 不破壞結(jié)構(gòu)
    所有軟件項目的根本指導(dǎo)原則是:軟件要易于修改患雏。
    不破壞結(jié)構(gòu)并不表示盡量少修改代碼茅茂,相反捏萍,如果期望自己的軟件靈活可變,就應(yīng)該時常修改它空闲。
    事實是令杈,大多數(shù)開發(fā)人員不敢不斷修改代碼,因為害怕改壞了碴倾。這里就又回到上面的“自動化測試”逗噩,如果有自動化測試,并且測試覆蓋率也很高跌榔,那么就不會害怕改壞了异雁。

1.4 職業(yè)道德

職業(yè)發(fā)展是個人的事情,雇主沒有義務(wù)考慮這些僧须,也沒有義務(wù)給你培訓(xùn)纲刀,送你參加會議等等。

職業(yè)道德是:

  1. 你自己要計劃每周工作的時間担平,比如60小時示绊,其中40小時是給雇主的芥挣,剩下的20小時是給自己做提升使用。
  2. 了解你的領(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)真全陨、付諸行動。

“缺乏承諾的”的征兆:

  1. 我們要衷掷。辱姨。。
  2. 我需要戚嗅。雨涛。。
  3. 懦胞。替久。。應(yīng)當(dāng)躏尉。蚯根。。
  4. 讓我們胀糜。颅拦。。
  5. 希望僚纷。矩距。。
  6. 但愿怖竭。锥债。。

真正的承諾:我將在(時間點)之前完成(某個任務(wù))
言必行行必果痊臭,如果沒做到的話哮肚,要如何應(yīng)對呢?

  1. 之所以沒成功广匙,是因為我寄希望于某某去做這件事允趟。
  2. 之所以沒成功,是因為我不太確信是否真能完成得了
    即使目標(biāo)無法完成鸦致,也能全力前進(jìn)潮剪,離目標(biāo)更近。
  3. 之所以沒成功分唾,是因為有些時候我真的無能為力抗碰。
    突發(fā)事件出現(xiàn)后,盡快去調(diào)整別人對你的預(yù)期(越快越好)绽乔。

總結(jié):估算日期弧蝇、確定最后期限、交流溝通等等,做出承諾會令人害怕看疗,但是可以建立個人的信譽(yù)(reputation)沙峻。

3.2 學(xué)習(xí)如何說“是”

  1. “試試”的另一面


    image.png
  2. 堅守原則
    首先,測試两芳、文檔摔寨、代碼整潔性這些是不能夠省略的,因為省略這些也不能保證更快完成怖辆。多年的經(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)備

編碼要求聚精會神,要避免:

  1. 心煩意亂時寫代碼
  2. 疲勞時寫代碼(比如加班亭病,凌晨3點)
  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不光是一種技巧泞当,也是一種思維方式。
三大原則:

  1. 編好失敗單元測試之前,不要編寫任何產(chǎn)品代碼襟士。
  2. 只要有一個單元測試失敗了盗飒,就不要再編寫代碼;無法通過編譯也是一種失敗情況陋桂。
  3. 產(chǎn)品代碼恰好能夠讓當(dāng)前失敗的單元測試成功通過即可逆趣,不要多謝。

這樣測試代碼嗜历、產(chǎn)品代碼宣渗、測試代碼、產(chǎn)品代碼梨州。痕囱。。同步增長暴匠,互為補(bǔ)充鞍恢。

5.3 TDD的優(yōu)勢

  1. 確定性
    單元測試通過了,對產(chǎn)品就有把握了每窖。
  2. 降低缺陷注入率
  3. 勇氣
    有助于重構(gòu)帮掉、修改糟糕代碼
  4. 文檔
    單元測試即文檔。
  5. 設(shè)計
    測試代碼的一個問題是必須隔離出待測試的代碼窒典,這樣有助于代碼的解耦蟆炊,也就有助于開發(fā)出更好的設(shè)計。
    (先寫產(chǎn)品代碼瀑志,很容易寫出一大坨耦合的代碼涩搓,不利于測試;先寫測試代碼就可以避免)
  6. 專業(yè)人士的選擇

5.4 TDD的局限

測試代碼也可能很糟糕劈猪。缩膝。。
還有一些其他場景岸霹,不適合TDD
等等

第六章 練習(xí)

為開源項目貢獻(xiàn)代碼疾层。

第七章 驗收測試

7.1 需求的溝通

  1. 避免過早精細(xì)化
    需求總會變化的,突發(fā)事件也總是會發(fā)生的贡避,在這之前想要確定最終交付的一項項的功能痛黎,就有點浪費(fèi)精力了。
  2. 明確需求
    跟客戶直接隔著一層又一層刮吧,就會導(dǎo)致信息的丟失湖饱,也就會導(dǎo)致對需求理解的偏差。

7.2 驗收測試

  1. 什么叫完成杀捻?
    QA + 需求方都確認(rèn)了井厌,才叫完成。
  2. 溝通
  3. 自動化
  4. 額外工作
    5.驗收測試什么時候?qū)懀烧l寫
    業(yè)務(wù)方+QA > 業(yè)務(wù)分析員+QA > QA > Dev
    避免同一個人既寫了代碼又寫了測試仅仆。
  5. 測試的協(xié)商與被動推進(jìn)
  6. 驗收測試和單元測試
  7. GUI及其他因素
  8. CI

7.3 結(jié)論

編寫自動化的驗收測試可以避免交流中的誤解器赞。

第八章 測試策略

8.1 QA應(yīng)該找不到錯誤

QA和Dev是一個團(tuán)隊的刨仑,而不是對立的匿沛。

8.2 自動化測試金字塔

從下往上,覆蓋率由高到低:
單元測試胳赌,組件測試咳榜,集成測試夏醉,系統(tǒng)測試,Web自動化測試涌韩,人工探索式測試畔柔。

第九章 時間管理

9.1 會議

  1. 拒絕一些會議
  2. 提前離席
  3. 確定議程與目標(biāo)
  4. 站會(盡可能快)
  5. 迭代計劃會議
  6. Retro
  7. 爭論/反對(爭論之所以花費(fèi)很多時間,是因為各方都拿不出有力的證據(jù))

9.2 注意力(精力)

  1. 睡眠
  2. 咖啡因
  3. 恢復(fù)
  4. 肌肉注意力
  5. 輸入與輸出

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 避免壓力

  1. 承諾
  2. 保持整潔
  3. 危機(jī)中的紀(jì)律

11.2 應(yīng)對壓力

  1. 不要慌張
  2. 溝通
  3. 依靠紀(jì)律原則
  4. 尋求幫助

11.3 結(jié)論

能回避壓力的時候盡可能回避,無法回避時則勇敢直面壓力。
可以通過慎重承諾呕诉、遵循自己的紀(jì)律原則缘厢、保持整潔來回避壓力。
直面壓力時义钉,保持冷靜昧绣,多與人溝通,堅持原則捶闸,尋求他人幫助夜畴。

第十二章 協(xié)作

12.1 程序員與人

  1. 與雇主
    多了解業(yè)務(wù)
  2. 與程序員
    互相學(xué)習(xí)、互相幫助

12.3 結(jié)論

編程就意味著與人協(xié)作删壮,與人交流贪绘。

第十三章 團(tuán)隊與項目

13.1 只是簡單的混合嗎

  1. 有凝聚力的團(tuán)隊
  2. 如何管理有凝聚力的團(tuán)隊
  3. 項目承包人的困境

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é)一下:

  1. 提高預(yù)估勺鸦、排期的能力并巍,從而可以從容地說“不”,說“是”换途,提高個人的聲譽(yù)懊渡,減小壓力;
  2. 溝通交流军拟,不僅要與業(yè)務(wù)方交流業(yè)務(wù)剃执,還要與管理者交流進(jìn)度,還要與其他程序員交流技術(shù)懈息,互相幫助肾档;
  3. 管理好時間,不光是工作上漓拾,減少無意義的會議、管理精力戒祠、排好優(yōu)先級骇两、避免死胡同和泥潭,還要給自己保留提升個人技藝的時間姜盈,勤加練習(xí)低千;
  4. 建立個人的原則,例如不輕易承諾馏颂、保持整潔示血、不能為了工期而削減測試代碼等等,這些紀(jì)律也可以幫助你說“不”救拉,說“是”难审,以及應(yīng)對壓力;
  5. 團(tuán)隊凝聚力是完成項目的前提亿絮;
  6. 怎么才算完成告喊?開發(fā)人員要做到自己測試沒問題麸拄,然后再交給QA,等QA和業(yè)務(wù)方都確認(rèn)后才算完成黔姜。
    不是說代碼寫完了就完了的拢切。

做到了上面的這些,才能算作專業(yè)人士秆吵,才能算是具有程序員的職業(yè)素養(yǎng)淮椰!

P.S. 雖然本身很務(wù)虛,但也通過大量的舉例纳寂,提出了一些務(wù)實的建議和方法主穗,比如:

  1. 多了解技能領(lǐng)域:設(shè)計模式、設(shè)計原則烈疚、方法黔牵、實踐、工件等
  2. 編碼是一項腦力+體力勞動爷肝,所以需要身體做好準(zhǔn)備猾浦,要避免疲勞、焦慮時編碼
  3. 時間管理里灯抛,減少會議時間金赦、減少無意義的爭論(讓數(shù)據(jù)說話)
  4. 預(yù)估任務(wù)時,(1对嚼,2夹抗,3,5纵竖,8)漠烧,拆分任務(wù)再預(yù)估
  5. 項目交付快要失敗前,及時溝通靡砌,降低別人的期望已脓,保護(hù)你自己的聲譽(yù),也減小你的壓力
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末通殃,一起剝皮案震驚了整個濱河市度液,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌画舌,老刑警劉巖堕担,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異曲聂,居然都是意外死亡霹购,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門朋腋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厕鹃,“玉大人兢仰,你說我怎么就攤上這事〖敛辏” “怎么了把将?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忆矛。 經(jīng)常有香客問我察蹲,道長,這世上最難降的妖魔是什么催训? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任洽议,我火速辦了婚禮,結(jié)果婚禮上漫拭,老公的妹妹穿的比我還像新娘亚兄。我一直安慰自己,他們只是感情好采驻,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布审胚。 她就那樣靜靜地躺著,像睡著了一般礼旅。 火紅的嫁衣襯著肌膚如雪膳叨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天痘系,我揣著相機(jī)與錄音菲嘴,去河邊找鬼。 笑死汰翠,一個胖子當(dāng)著我的面吹牛龄坪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播复唤,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼健田,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了苟穆?” 一聲冷哼從身側(cè)響起抄课,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤唱星,失蹤者是張志新(化名)和其女友劉穎雳旅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體间聊,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡攒盈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哎榴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片型豁。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡僵蛛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出迎变,到底是詐尸還是另有隱情充尉,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布衣形,位于F島的核電站驼侠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谆吴。R本人自食惡果不足惜倒源,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望句狼。 院中可真熱鬧笋熬,春花似錦、人聲如沸腻菇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芜繁。三九已至旺隙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骏令,已是汗流浹背蔬捷。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留榔袋,地道東北人周拐。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像凰兑,于是被迫代替她去往敵國和親妥粟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容