第 1 / 5 部 待錄

專業主義與說不

《The Clean Coder》Podcast 準備稿:專業主義與說不

書名: 無瑕的程式碼番外篇 The Clean Coder(A Code of Conduct for Professional Programmers) 作者: Robert C. Martin(Uncle Bob) 系列: Reading Uncle Bob(恩普拉氏) 公開標題建議: Reading Uncle Bob|The Clean Coder.什麼叫專業:為自己負責、敢說不 (1/5) 涵蓋範圍: 第1章 專業主義 + 第2章 說 不

背景速覽

這是 Reading Uncle Bob 系列第三本《The Clean Coder》的起手集。前兩本《Clean Code》《Clean Architecture》談的是「程式碼長怎樣」「系統長怎樣」,都是技術;這一本完全轉向——談的是人的態度、紀律與行為,是一本「軟體職人的處世守則」。Uncle Bob 把它寫成一本帶著大量親身慘案的回憶錄式作品,第一章先定義「什麼叫專業」,第二章馬上丟出全書最反直覺、也最重要的一條:專業人士最明顯的標誌,是敢說不。

一句話重點

專業的本質是當責(accountability)——對自己的產出、自己的錯誤、自己的職涯負起全責;而當責最尖銳的表現,就是在不合理的時程與需求面前誠實地說「不」,因為對做不到的事說「好」不是配合,是說謊。

值得討論的重點

1. 專業 = 為自己的錯誤負責(不是「不犯錯」)

Uncle Bob 開宗明義:業餘和專業的差別不在技術高低,而在當責。專業人士不把責任外包——尤其不把品質責任外包給 QA。他講了一句很扎人的話:當 QA 找到你的 bug,你的正確反應不該是「喔好,再修一下」,而該是震驚與羞愧,因為那代表你把該自己守住的品質丟出去了。延伸出兩條紀律:「不製造傷害(Do No Harm)」——別破壞既有功能;以及用測試證明一切正常——追求接近 100% 的覆蓋率,不是為了好看,而是讓你敢改、敢重構。覆蓋率的真正價值不是「證明對」,是給你「動手的勇氣」。

2. 職業道德是你自己的事,不是雇主的義務

這章有一條會引爆討論的主張:專業發展是你個人的責任。Uncle Bob 開了一張清單(設計模式、SOLID、各種方法論、TDD、UML……)說這些你都該熟,而且——「如果你只靠雇主提供的訓練學習,你只是個勞工,不是專業人士。」他拿醫生、律師類比:沒人付錢叫醫生下班讀醫學期刊,但好醫生就是會讀。這個立場後面(EP3 練習章)會更激進,這集先埋下種子就好。

3. 保持謙遜:正因為知道會犯錯,才需要防護網

寫程式這件事天生養自負——我們在虛擬世界裡當造物主、訂規則。但 Uncle Bob 把謙遜接回到工程實務:正因為你一定會犯錯,所以你才需要測試、Code Review、結對、團隊互補。謙遜在這裡不是道德口號,是一種務實的風險管理——承認腦容量有限,所以建防護網。

4. 說「不」才是專業的標誌(第2章主菜)

這是全書的引爆點。Uncle Bob 說:專業人士最明顯的特徵,是敢對不合理要求說「不」。商業方的目標(功能、時程)和工程方的目標(品質、可行性)本質上就是衝突的,而這個衝突是健康的——唯有雙方各自捍衛立場、認真談判,公司才能在兩難中找到「最佳可能解」。如果你永遠點頭,你不是好配合,你是剝奪了公司做正確決策的機會。而且越是關鍵時刻(重大發佈前夕、壓力最大時),那個「不」越難講、也越珍貴——因為此時錯誤決策的代價最高,你的誠實評估最值錢。

5. 「我試試看」是惡夢的開始,英雄主義是陷阱

Uncle Bob 特別點名兩個詞。第一個是「我會試試看(trying)」——他說當你講出這句,你其實在暗示「我平常有所保留、現在我要多擠一點」,但這個「多擠」通常意味著跳過測試、犧牲品質、加班硬撐。而最慘的是:對方不會珍惜你犧牲了什麼,他們只會學到「原來逼一下就做得出來」,於是把這個不合理節奏常態化。第二個是英雄主義——「拯救專案的英雄」很迷人、讓人覺得被需要,但專業人士選擇穩定可靠的產出,而不是依賴奇蹟。專業人士不「試」,他們承諾做得到的,拒絕做不到的。

注意事項

⚠️ 「不靠雇主訓練、自己負責成長」這條,本書帶有 Uncle Bob 的個人色彩與爭議。 他的立場相當強硬(清單列得很長、語氣帶教訓味),而且後面練習章會延伸到「該用週末和下班時間練功」的主張——這部分在業界曾被批評為 toxic、漠視工時界線與生活平衡。第一集就誠實先打個預防針:當責、為自己職涯負責這個核心精神我同意,但「具體要犧牲多少私人時間」是可以也應該被質疑的,別把它當鐵律。

⚠️ 「說不」不是叫你當刺頭。 Uncle Bob 講的「不」是建立在你真的做過評估、有資料支撐的前提上,而且要搭配「那我能做到什麼」的建設性替代方案(這是下一集說「是」的主題)。如果聽眾把這集聽成「以後可以理直氣壯拒絕一切」,那就完全誤讀了——專業的「不」永遠附帶一個誠實的「但我可以……」。

專家補充

💡 「對 QA 找到 bug 感到羞愧」這條,放在現代 DevOps/持續交付的脈絡看更有意思。今天主流早就是「左移測試(shift-left)」——把品質責任前移到開發者身上,而不是丟給下游的 QA 關卡。Uncle Bob 2011 年講的這件事,其實預告了整個產業十年的走向:QA 不該是抓蟲的網子,開發者自己就該交付近乎零缺陷的東西。

💡 「說不」這件事有個更廣的職場心理學支撐。資深工程師和初階最大的差別之一,往往不是寫程式的能力,而是對不合理需求的免疫力——初階容易因為想證明自己、怕被討厭而什麼都接,資深知道接了做不到的事傷害更大。可以接到一個有名的觀察:很多 burnout 不是工作量造成的,是「無法說不」造成的。

💡 商業 vs 工程的「健康衝突」這個框架,其實是整個 Agile 運動的底層假設。Scrum 裡 Product Owner(要功能)和 Dev Team(守可行性)的角色分立、刻意不讓同一人兼任,就是制度化地讓這個張力存在。Uncle Bob 是 Agile 宣言共同起草人,這條不是隨口說的,是他整套方法論的延伸。

討論問題

🎙️ 開場鉤子:「你上一次明知道做不到、卻還是說了『好,我盡量』,是什麼時候?後來呢——是不是最後加班加到很慘,對方還覺得理所當然?今天這集,我們來談談為什麼那個『好』其實是說謊。」

🎙️ 自問自答:「『為自己職涯負責』我完全同意,但 Uncle Bob 說該用下班和週末練功——這條我買單嗎?」可以誠實地談:當責的精神和「犧牲多少私人時間」是兩回事,前者是專業底線,後者是個人選擇,把它講成道德義務就過頭了。

🎙️ 帶走的一題:「這禮拜,找一個你其實做不到、卻含糊答應的請求,練習把『我盡量』換成一句誠實的話——『這個期限我做不到,但我能做到的是……』。先在低風險的小事上練,把『誠實的不』變成肌肉記憶。」

更大範圍關聯

  • Reading Uncle Bob 六本的座標:六本分兩組——《Clean Code》《Clean Architecture》《Functional Design》談技術產物(程式碼、系統、設計);《The Clean Coder》《Clean Agile》《Clean Craftsmanship》談人與紀律(態度、流程、工藝)。本書是「人」這組的入口,是從「寫好程式碼」跨到「當好一個專業人」的轉折點。
  • 職涯/工匠經典群的對話:「為自己職涯負責」最早、最經典的源頭是《The Pragmatic Programmer》(Hunt & Thomas)開篇的「Your knowledge portfolio(知識資產組合)」——把技能當投資組合經營。而「說不、設界線、可持續工作」這條,《Soft Skills》(John Sonmez)談得更全面(含理財、健康、心態),可作為本書「軟性面」的延伸閱讀。
  • 學徒制與工藝精神:本書反覆出現的 craftsmanship 概念,《Apprenticeship Patterns》(Hoover & Oshineye)和《The Software Craftsman》(Sandro Mancuso)講得更系統——後者甚至專章反駁「該不該下班練功」這個爭議,是本書最好的對照組。
  • 領域定位:用 [軟體工程領域切分藍圖] 看,這本不在「技術」象限,而在「職人素養/軟實力」這一支——和談時間管理、溝通、職涯的書同列,是工程師從 junior 走向 senior 必經的「非程式碼能力」這條軸線。

錄製建議

  • 建議時長:約 18 到 20 分鐘。配比:專業主義/當責約 8 分(鋪底,講清楚「專業不是技術高,是負責」),說不約 10 分(這集主菜,衝突感強、例子好講)。
  • 討論策略:開場一定用「明知做不到卻說好」的共鳴痛點切入,幾乎每個工程師都中過招。中段把「商業 vs 工程是健康衝突」這個框架立起來,這是讓「說不」站得住腳的關鍵——否則聽起來只像耍脾氣。注意事項那段要誠實處理 toxic 爭議,這也替整季定調:Uncle Bob 的書要帶腦讀,精神可取、個別主張可辯。
  • 這是《The Clean Coder》起手集,花 30 秒交代:這本和前面《Clean Code》不一樣,這次談的不是程式碼、是人;接著預告這季五集的主軸(專業→承諾→測試紀律→時間與壓力→協作),建立系列感。