《Clean Craftsmanship》Podcast 準備稿:倫理.程式設計師的誓言與「首害勿為」
書名: 整潔的軟體工藝 Clean Craftsmanship(Disciplines, Standards, and Ethics) 作者: Robert C. Martin(Uncle Bob) 系列: Reading Uncle Bob(恩普拉氏) 公開標題建議: Reading Uncle Bob|Clean Craftsmanship.我們正用程式碼殺人 (8/9) 涵蓋範圍: Part III The Ethics 導論(圖靈、軟體災難、程式設計師的誓言)+ 第12章 Harm(首害勿為)
背景速覽
這是全書野心最大、也最有重量的一部。前兩部講技術紀律與職業標準,Part III 直接上升到倫理——當軟體深入社會每個角落,程式設計師寫的不只是程式,而是「在機器裡執行、監控並協調我們生活每一面向的規則」。Uncle Bob 從圖靈講到一連串真實的軟體災難,最後祭出對標醫師希波克拉底誓言的「程式設計師的誓言」十條。這集涵蓋導論(誓言總綱)與第12章 Harm(誓言前三條:不傷害)。
一句話重點
Uncle Bob 把寫程式從「技能」一路拔高到「攸關公眾性命的職業倫理」——他主張軟體業已經是「世界的統治者」(we rule the world),卻還沒有醫師那樣的倫理約束;而誓言的第一條、也是最根本的一條,正是借自醫學的「首先,不造成傷害(First, do no harm)」。
值得討論的重點
1. We Rule the World:從圖靈到「我們正用程式碼殺人」
導論的鋪陳很有戲劇張力,值得照著情緒曲線講:
- 75 年的職業:軟體業才一個人的壽命大,程式設計師人口每五年翻倍——「永恆的無經驗」(任何時刻半數人資歷不到五年)。
- 形象變遷:從隱形 → 書呆子 → 反派(HAL 9000)→ 英雄(駭客救世界)→ 救世主(Matrix)。小孩子現在的偶像是 Minecraft 的程式設計師 Jeb。
- 但有英雄就有反派:2015 年 Volkswagen 排放造假——「就是某些程式設計師寫下了那些說謊、作弊的程式碼」。
- 災難清單:Ariane 5(整數溢位、發射 37 秒自毀)、Mars Climate Orbiter(公制/英制搞混)、Therac-25(race condition 殺死 3 人)、Knight Capital(45 分鐘賠 4.6 億)、Toyota 暴衝(疑似 89 死)、HealthCare.gov、Schiaparelli 火星著陸器。
然後是那句最重的話:「我們正在透過我們寫下的程式碼殺人」,而且「終有一天某個倒楣的程式設計師會做一件微小的蠢事、然後數萬人死亡——這不是狂想,只是時間問題」。屆時政客會要我們交代,如果我們出庭時沒有倫理、沒有標準、沒有紀律,只會哀嚎期限不合理,那就會被判 GUILTY。
2. 程式設計師的誓言:對標希波克拉底
導論的高潮是十條誓言(對應 Part III 三章):
- 不傷害(Ch.12 Harm):1. 不產出有害程式碼;2. 永遠是我最好的作品、不讓缺陷累積;3. 每次 release 提供快速、確定、可重複的證明。
- 正直(Ch.13 Integrity):4. 頻繁小型 release;5. 無畏不懈地改善;6. 維持生產力。
- 團隊(Ch.14 Teamwork):7. 互相 cover;8. 誠實估算;9. 尊重同儕;10. 永不停止學習。
「誓言」這個形式本身就是 Uncle Bob 最大的企圖——他要的不是 best practices 清單,而是像醫師宣誓那樣、把職業責任內化成個人承諾。
3. 首害勿為:結構價值 > 行為價值
第12章把前三條誓言展開。「不傷害」分三個層次:對社會(Volkswagen、HealthCare.gov——「躲在別人寫的需求背後不是藉口」)、對功能(Knight Capital、Toyota 一萬個全域變數)、對結構。最深刻的是「對結構的傷害」這一段,帶出全書的核心命題:軟體有兩個價值——
- 行為價值:軟體現在做了什麼。
- 結構價值(Softness):軟體有多容易被改。
哪個更重要?想像程式 A 完美運作但無法修改(需求一變就永遠無用)vs 程式 B 什麼都做不對但容易改(可以被改到正確)。所以結構價值優先於行為價值。他用 Eisenhower 矩陣鎖死這個結論:緊急 = 短期 = 行為,重要 = 長期 = 結構;行為只是「緊急」,結構才是「重要」。最後給出調和「先讓它能動」與「結構優先」的方法——把問題拆到比 user story 更小的單位:測試。先讓一個測試過、再修結構、再寫下一個測試。這就是 TDD 紅綠重構的道德基礎。第三條誓言(可重複的證明)則把 Dijkstra 的正確性證明思想接到 TDD——「測試就是理論」,軟體不是數學(形式證明)而是科學(用通過的測試做實證)。
注意事項
⚠️ 「誓言」這個形式本身就是整季最大的爭點,必須誠實處理。 軟體業沒有醫師的執照制度、沒有可吊銷的資格、沒有強制的倫理委員會——所以「程式設計師的誓言」是 Uncle Bob 的個人倡議與理想,不是行業共識,也沒有任何強制力。批評者(包括業界不少聲音)認為:在沒有對等的職業保護(醫師有工會、有專業自主權、能拒絕不安全的指令)的情況下,光要求個人宣誓、卻把責任全壓在工程師身上,是不對稱的——當老闆逼你趕工、你又沒有醫師那種說「不」的制度後盾時,誓言可能變成額外的道德負擔。公允的講法:這是一個值得嚴肅對待的理想,但它的落地需要的不只是個人宣誓,還需要行業層級的結構改變。
⚠️ 災難清單很有衝擊力,但講的時候別「全部記在程式設計師頭上」。Ariane 5、Therac-25、Knight Capital 的根因多半是系統性的——流程缺失、測試不足、組織壓力、需求溝通失敗——不是某個工程師道德淪喪。Uncle Bob 的修辭(「我們正在殺人」)是為了喚起責任感,但把複雜的系統性失敗化約成「程式設計師的個人倫理」,會錯失真正的教訓。Therac-25 的經典分析(Nancy Leveson)就強調是整個工程系統的問題。
⚠️ 「結構價值 > 行為價值」是強主張,多數情況成立,但有反例。對一次性腳本、確定不會再改的 throwaway 程式、或商業上「先活下來再說」的極早期新創,過度投資結構可能是浪費(YAGNI 的另一面)。Uncle Bob 自己也說「除了最緊急的情況外」——這個但書值得保留,別講成絕對律令。
專家補充
💡 「程式設計師的誓言」對標希波克拉底誓言,這個類比本身值得拆解。醫師誓言之所以有力,不只因為有人宣誓,而是因為背後有一整套制度:醫學院、執照考、醫師公會、可吊銷的資格、以及——關鍵——醫師對「治療決定」有專業自主權,老闆(醫院)不能命令醫師開不安全的處方。軟體業缺的正是後面這一整套。所以本集最值得拋給聽眾的大哉問是:我們要的是「個人宣誓」,還是「整個行業變成像醫學那樣的專業(profession)」? 後者代價巨大(執照、責任、可能扼殺現在的開放性),這是個沒有標準答案的真問題。
💡 「軟體是科學不是數學」這個轉折很有思想史份量。Dijkstra 一生想把程式設計變成可形式化證明的數學分支,但他自己也承認:要工程師為每個迴圈寫形式證明,就永遠寫不出有規模的程式。Uncle Bob 接手這條線給了務實答案——我們不做數學證明,我們做科學實驗:每個通過的測試是一次成功的實驗,測試套件是不斷被驗證的「理論」。這把 TDD 從「一種寫法」提升到「軟體正確性的認識論」,是全書最有深度的一段。
💡 「結構是重要的、行為是緊急的」這組 Eisenhower 對應,是給聽眾的一把好用的決策工具。它解釋了為什麼技術債總是被推遲——因為它「不緊急」,而我們的注意力被「緊急但不重要」的事綁架。Uncle Bob 的提醒很實在:維護結構不是你老闆的工作(他多半不懂 SOLID),是你的;如果你不在「重要但不緊急」的象限主動投資,沒有人會替你投資。
討論問題
🎙️ 開場鉤子:「世界上電腦比人多,幾乎沒有一件事能在沒有軟體的情況下發生。Uncle Bob 說:那讓我們成了世界的統治者——而我們,正在用程式碼殺人。」
🎙️ 自問自答:「Volkswagen 寫排放造假程式的工程師,能說『我只是照需求做』嗎?」——Uncle Bob 的答案是不行:躲在別人寫的需求背後,不是藉口。
🎙️ 拋給聽眾的大哉問:「我們真的需要一個『程式設計師的誓言』嗎?還是我們需要的是讓寫程式變成像醫學那樣、有執照有公會的『專業』?這兩者代價天差地別——你選哪個?」
🎙️ 帶走的一題:「想一件你手上『重要但不緊急』的結構問題——那個你一直說『之後再清』的技術債。它之所以一直被推遲,正因為它不緊急。這禮拜,先還一點點。」
更大範圍關聯
- 災難案例的經典分析:Therac-25 的權威分析來自 Nancy Leveson《Safeware》——她強調這是「系統性工程失敗」而非個人疏失,正好和 Uncle Bob 的個人倫理框架形成有益的張力,值得並陳。
- 結構 vs 行為:這條主軸是 Uncle Bob《Clean Architecture》整本書的核心命題(「軟體的價值在於它的 soft」),本章是它的倫理化表述——兩本對照讀,一本講「為什麼」、一本講「怎麼分層做到」。
- 誓言的思想脈絡:ACM/IEEE 的《Software Engineering Code of Ethics》是行業層級的正式倫理規範,比 Uncle Bob 的個人誓言更制度化、也更平衡(同時要求雇主與工程師)——可以拿來對照,看「個人宣誓」與「行業守則」的差別。
- 同系列接點:誓言的後七條會在下一集(最終集)的 Integrity 與 Teamwork 章展開;本章的「測試即理論/科學」回扣 EP2-4 的 TDD 三章,是整本書收束的關鍵節點。
錄製建議
- 建議時長:約 24-26 分鐘。配比:we rule the world 與災難清單 8 分、誓言總綱 4 分、首害勿為三層次 5 分、結構 vs 行為與 Eisenhower 5 分、軟體是科學(Dijkstra → TDD)4 分。
- 討論策略:這集情緒最重、也最有「節目高光」潛力。導論的災難清單按情緒曲線層層堆疊(隱形→英雄→反派→殺人),是天生的敘事。「我們正用程式碼殺人」這句要敢講、但講完立刻拉平衡(系統性失敗 vs 個人倫理)。最值得花時間的是那個大哉問——「要誓言還是要變成專業」,這是整季最深的一題,留給聽眾帶走、不要替他們作答。結尾預告最終集:誓言的後七條,從正直走到團隊,整本書收尾。