《Clean Craftsmanship》Podcast 準備稿:正直與團隊.誓言的後七條與全書收尾
書名: 整潔的軟體工藝 Clean Craftsmanship(Disciplines, Standards, and Ethics) 作者: Robert C. Martin(Uncle Bob) 系列: Reading Uncle Bob(恩普拉氏) 公開標題建議: Reading Uncle Bob|Clean Craftsmanship.你欠你的職業生涯每週 10-20 小時 (9/9) 涵蓋範圍: Part III 第13章 Integrity(正直)+ 第14章 Teamwork(團隊)+ 全書收尾
背景速覽
這是整季「啃大書」的最終集。上一集講了誓言的前三條(不傷害),這集講後七條——正直(小循環、持續改善、維持生產力)與團隊(互相補位、誠實估算、尊重、永不停止學習)。內容從很硬的技術(版控演進、PERT 估算公式)到很「人」的承諾(尊重同儕、每週多花 10-20 小時學習)。講完這集,整本《Clean Craftsmanship》的紀律—標準—倫理三層金字塔就完整了。
一句話重點
誓言的後七條把「正直」和「團隊」落到可操作的紀律上——正直是對自己的要求(小步提交、持續改善、保護生產力),團隊是對他人的承諾(補位、誠實估算、尊重、永不停學);而 Uncle Bob 最有爭議也最有重量的結語是:「你欠雇主每週 35-40 小時,你欠你的職業生涯另外 10-20 小時」。
值得討論的重點
1. 正直之一:小循環——整個版控史都在縮短週期
第13章用版控系統的演進史串起一個底層驅動力:人類一直在縮短循環週期。從打卡片時代(原始碼就是你抽屜裡那疊卡)、磁帶時代(圖釘公告板標記誰在改哪塊)、SCCS/RCS 的悲觀鎖定、CVS/Subversion 的樂觀鎖定,到 2005 年 Git 消除了「主帶」的概念——每台機器都有完整歷史,你可以每 30 秒提交一次、每過一個單元測試就提交。這條歷史線推向「持續整合」與「持續部署」:提交越頻繁、合併越瑣碎、衝突越少。配一個實用討論——分支 vs 開關(feature toggle):長命分支會帶來大規模合併的痛,Uncle Bob(從反分支派轉變後)傾向在主線開發、用 Command/Decorator/Factory 等模式藏起未完成功能(最常見的就是「按鈕不放上網頁、使用者就用不到」)。
2. 正直之二、之三:持續改善與保護生產力
- 持續改善(Promise 5):源自童子軍創辦人「讓世界比你發現時更好」。工具是測試覆蓋率(100% 是漸近目標,但絕不能把覆蓋率變成管理 KPI——否則會誘發作弊,例如刪掉 assertion 衝高數字)與突變測試(把
>改成<、==改成!=,看測試會不會抓到;抓不到的叫「存活突變」,代表測試有漏洞)。目標是語意穩定性——任何必需行為被破壞時測試都會失敗。 - 維持生產力(Promise 6):核心金句「唯一快速的方法是做好」。三個面向:降低黏滯性(建置不該超過一兩分鐘、測試靠 mock 排除周邊設備、部署一鍵自動化)、管理干擾(會議無聊就離開、拒絕大多數會議、Uncle Bob 連聽音樂寫 code 都反對——他曾在註解裡發現當時在聽的歌詞)、時間管理(番茄工作法:保衛番茄、被打斷就延到休息時處理)。有個反直覺的點:他認為「心流」狀態產出的 code 往往品質較差、不夠周全,而結對正好能打斷心流。
3. 團隊:誠實估算的數學(PERT)與最有爭議的結語
第14章把「誠實」量化。兩個故事點出估算的巨大誤差範圍:Vectors(估 2 週、實際 12 週、偏差 6 倍)與 pCCU(估一人年、實際 2 週、只用了二十分之一)。所以「估算不是日期,是範圍,是機率分布」。工具是 PERT(為北極星飛彈計畫發明):每個任務給 Best/Normal/Worst 三個數,算 σ=(W−B)/6、μ=(2N+(B+W)/2)/3,專案 μ 是總和、σ 是平方和開根號。配 WBS(工作分解結構)——但我們通常會漏掉約一半子任務,所以乘 2-4 倍修正係數;而且「完整 WBS 的成本等同於完成專案本身」。回到誠實:老闆問「你能不能至少試試?」,正確回應仍是「不。我已經在盡力了」。
最後兩條承諾收尾:尊重同儕(加入社群的唯一資格是技能、紀律、標準、倫理,不容任何其他基礎的歧視)與永不停止學習(每年學一門不同家族的語言、重視 1960-80 年代的經典、「不要認為培訓是雇主的責任」)。
注意事項
⚠️ 「你欠你的職業生涯每週 10-20 小時、應該工作 50-60 小時」是全書最受爭議的一句,絕對要正面處理、不能滑過去。 這在 work-life balance、反過勞、防 burnout 的當代價值觀下,是會被強烈反彈的主張。批評很直接:把「無償的個人時間投入」包裝成「專業義務」,對有照護責任的人、對不同人生階段的人是不公平的,而且長時間工作與產出品質未必正相關(甚至常常相反)。公允的講法:Uncle Bob 的精神內核——「專業需要持續維護、學習不會自動發生」——是對的;但「每週 50-60 小時」這個具體數字是他那一代、他個人的處方,不該被當成普世義務。把「持續學習的承諾」和「特定時數」分開來談,才公道。
⚠️ 「反對聽音樂寫程式」「心流產出品質較差」這些是 Uncle Bob 的個人經驗與偏好,不是有研究支撐的通則。很多工程師靠音樂進入專注、靠心流產出最好的工作——這因人而異。講的時候標清楚這是「一家之言」,別當成紀律。同理「拒絕大多數會議」也要看角色,有協調職責的人不能照搬。
⚠️ PERT 公式很漂亮,但別讓聽眾以為「套公式就能準」。估算的根本困難(漏掉一半子任務、葉節點全靠直覺類比)公式解決不了——PERT 的價值不在「算出精準數字」,而在「逼你把不確定性顯式地表達出來」(用三點估計而非單點)。這跟 EP7 講的「機率分布而非日期」是同一件事的量化版。
專家補充
💡 把「整個版控史都在縮短循環」這條線抽出來看,會發現它其實是整本書的隱藏主軸:TDD 把循環縮到秒、小型 release 把循環縮到天、CI/CD 把整合縮到分鐘——Clean Craftsmanship 從頭到尾都在對抗「大批次」。大批次(big batch)是軟體的萬惡之源:大合併、大發布、大重寫、大估算,全都把風險累積到一次引爆。這個視角能把九集的內容串成一句話——整潔的軟體工藝,本質上就是「把一切都做小、做頻繁」的紀律。
💡 「不要把覆蓋率變成管理 KPI」這個警告,是 Goodhart’s Law 的又一個活例(跟 EP7 的「bug 經濟」同源)。一旦覆蓋率從「開發者自用的工具」變成「主管考核的數字」,它就立刻失效——人會刪 assertion、寫假測試衝數字。這個洞見值得放大成一個通用原則送給聽眾:好的工程指標一旦被拿去考核,就會被優化到失去意義。
💡 「重視過去的經典著作、業界真正過時的東西並不多」這句,是 Uncle Bob 對「技術時尚焦慮」的解藥,也很適合當整季的收尾哲學。我們這個行業沉迷於最新的框架,但本書講的紀律——TDD、重構、簡單設計、誠實估算——幾乎都是 20-40 年前就成形的。新的是工具,舊的是手藝。 這正好呼應 Reading Uncle Bob 系列「讀經典、學不過時的東西」的初衷。
討論問題
🎙️ 開場鉤子:「Git 為什麼是個哲學上的突破?因為它消滅了『主帶』——讓你可以每 30 秒提交一次。Uncle Bob 說:整個版控史,其實都在做同一件事——把循環縮短。」
🎙️ 自問自答:「為什麼我們的估算總是錯得離譜?」——兩個真實故事:一個偏差 6 倍、一個只用了二十分之一。誠實的估算不是一個日期,是一條機率分布。
🎙️ 拋給聽眾的爭議題:「Uncle Bob 說你欠你的職業生涯每週 10-20 小時、該工作 50-60 小時——這在反過勞的年代聽起來刺耳。你覺得『專業義務』和『不被剝削』的界線該畫在哪?」
🎙️ 帶走的一題(整季收尾):「九集走完整本《Clean Craftsmanship》。如果只能帶走一條紀律從明天開始做——你選哪一條?TDD?童子軍規則?學會說不?還是每年學一門新語言?選一條,真的去做。」
更大範圍關聯
- 小批次的思想源頭:「把一切做小做頻繁」這條主軸,與 Lean / Toyota 的「小批量流動」一脈相承,也是《Accelerate》(Nicole Forsgren 等)用數據證明「高頻部署 = 高績效」的核心發現——Uncle Bob 的紀律在那本書裡得到了實證背書。
- 估算的延伸:Steve McConnell《Software Estimation: Demystifying the Black Art》是估算主題的權威,把 PERT、機率分布、修正係數講得比本章完整。
- 同系列收束:本集完成誓言十條,也完成 Reading Uncle Bob 對《Clean Craftsmanship》的完整走讀。可在結尾把全系列六本接起來:Clean Code(寫)→ Architecture(分層)→ Coder(專業行為)→ Agile(流程)→ Craftsmanship(紀律/標準/倫理,集大成) → Functional Design(晚期的 FP 轉向,TPP 的伏筆在此開花)。
- 領域定位:用 [軟體工程領域切分藍圖] 看,這本書是「coding practice」與「professional ethics」的交會點,而本集正是從「技術紀律」一路收束到「職業倫理」的終點——整季的閉環。
錄製建議
- 建議時長:約 22-25 分鐘(兩章 + 全季收尾)。配比:小循環與版控史 6 分、持續改善與生產力 6 分、PERT 估算 5 分、尊重與學習 + 50-60 小時爭議 4 分、全季收尾 3-4 分。
- 討論策略:這是最終集,前半給足技術乾貨(版控史、PERT、突變測試),後半轉向價值思辨。「每週 50-60 小時」那段一定要正面交鋒、給足平衡——這是整季理想主義與現實張力的最後一次、也是最尖銳的一次對撞。結尾務必做「整季收束」:用「整潔的軟體工藝 = 把一切做小做頻繁的紀律」這條隱藏主軸把九集串成一句話,再回扣系列「讀經典、學不過時的手藝」的初衷,請聽眾「選一條,明天就做」。給整季一個有重量、有行動的句點。