《The Pragmatic Programmer 務實的程式設計師》Podcast 準備稿:務實的哲學
書名: 務實的程式設計師 The Pragmatic Programmer(Your Journey to Mastery, 20th Anniversary Edition) 作者: David Thomas & Andrew Hunt 系列: 啃一本大書(恩普拉氏) 公開標題建議: 啃一本大書|The Pragmatic Programmer.破窗、石頭湯與知識投資:一種態度 (1/11) 涵蓋範圍: 第1章 務實的哲學(Topic 1-7:這是你的人生、貓吃了我的原始碼、軟體的熵、石頭湯與煮青蛙、夠好的軟體、知識資產、溝通)
背景速覽
這是「啃一本大書」軟體工程旗艦系列的起手集。《The Pragmatic Programmer》(1999 初版,2019 二十週年版) 是與《Clean Code》《Refactoring》並列的軟體工匠三大必讀之一,作者 Dave Thomas 與 Andy Hunt 也是 2001 年敏捷宣言 17 位共同起草人中的兩位。整本書的副標是「Your Journey to Mastery」——通往精通之路。第一章不講任何技術,而是先立一個「態度與哲學」的地基:務實不是一套規則,而是一種看待自己職涯與軟體的方式。這一集就把整套書的世界觀講清楚。
一句話重點
務實的程式設計師的核心,不是知道更多語法,而是一種主動負責、持續修補、隨時看大局、把知識當投資的職業態度——技術會過時,但這套態度讓你在二十年後依然站得住。
值得討論的重點
1. 破窗理論:腐敗從「第一扇沒人修的破窗」開始
這是本書最有名、最該推薦的隱喻。犯罪學發現城市衰敗的觸發點是「一扇沒人修的破窗」——它釋放出「沒人在乎」的訊號,於是第二扇被打破、垃圾出現、塗鴉蔓延。軟體腐敗(software rot,他們刻意不叫「技術債」,因為技術債暗示總有天會還,但通常不會)也一樣:一段爛 code、一個錯誤的設計決定沒人修,團隊就慢慢相信「反正修不好」。Tip 5「不要容忍破窗」——發現一個就修一個;真的沒時間,至少封住它(註解掉、貼上「未實作」、放假資料),採取某些行動阻止進一步損害。反過來也成立:如果你進到一個乾淨優雅的專案,你會格外小心不當第一個弄髒它的人。
2. 石頭湯與煮青蛙:一個關於「變革」的雙面隱喻
石頭湯的故事——三個士兵煮一鍋只有石頭的水,引誘村民一個個貢獻胡蘿蔔、馬鈴薯、肉,最後全村喝到好湯。寓意 Tip 6「成為變革的催化劑」:當你知道該做什麼、卻會卡在審批與委員會(啟動疲勞)時,就「拿出石頭」——先做出一個能看的東西,展示給大家,再說「如果加上 X 會更好」。人們更願意加入一個正在進行的成功。但同一個故事換到村民角度,就是煮青蛙:村民只盯著石頭,忘了世界其他部分。Tip 7「記住大局」——大多數軟體災難不是一夕崩盤,而是一天一個小妥協慢慢煮熟的。注意:破窗是「看到沒人在乎而放棄」,煮青蛙是「根本沒注意到變化」,兩者不同。
3. 知識資產:把你會的東西當投資組合來經營
Tip 9「定期投資你的知識資產」。把你會的一切當成一個會過期的投資組合,用理財原則經營:定期投資(習慣比金額重要)、多元化(別把技術雞蛋放一個籃子,也別忘非技術技能)、平衡風險(高風險高報酬的新技術配上穩的老技術)、低買高賣(在新技術紅之前學)、定期重新平衡。具體目標很可落地:每年學一種新語言、每月讀一本技術書、也讀非技術書(電腦是給人用的)、參加社群。再配 Tip 10「批判性地分析你所讀所聞」——對堅稱自己是唯一答案的狂熱者保持警覺。
4. 這是你的人生,而且你要為它負責
Tip 1「Care About Your Craft」、Tip 3「You Have Agency」、Tip 4「Provide Options, Don’t Make Lame Excuses」串成一條線。書名第一句就是「這本書是關於你的」。務實的程式設計師為自己的行為負責,不說「貓吃了我的原始碼」這種藉口;出問題時不找代罪羔羊,而是提供選項。這是一種職業尊嚴的宣告——你有主導權(agency),職涯是你自己的。
注意事項
⚠️ 別把「破窗」講成「任何時候看到爛 code 都要立刻大重構」。書的原意是阻止腐敗訊號的擴散,重點是「不留下無人理會的破窗」,最低限度是「封住它」。重構時機在 EP8 會專門講,這裡先別讓聽眾誤以為要隨時停下手邊工作去清理全世界。
⚠️ 「每年學一種新語言、每月讀一本書」這組目標是 1999/2019 年的理想值,別講成硬性 KPI 把聽眾壓垮。精神是「養成定期投資的習慣」,習慣的存在比達標更重要——一年讀三本但持續,勝過一個月衝五本然後停擺。
專家補充
💡 這集很適合替整季定錨一個立場:《Pragmatic Programmer》是三經典裡「最沒爭議」的一本。 《Clean Code》近年常被吵(函式長度、用多型取代 switch),但 Pragmatic 講的是態度與原則,幾乎所有陣營都同意。先把「這本書老但不過時」的理由講清楚——因為它刻意不綁特定技術,講的是 meta-skill。二十週年版還把範例語言換成了 Ruby/Elixir/Clojure,加了並行、屬性測試等新章節,證明作者自己也在實踐「持續投資」。
💡 「破窗理論」原出自 Wilson & Kelling 1982 年的犯罪學論文,後來因紐約市 1990 年代的治安政策而出名(後續在社會學界其實有爭議)。但 Thomas & Hunt 把它借進軟體工程,反而成了這個隱喻最持久的用法——很多工程師是先在這本書讀到它的。可以提這條軟體思想史的「借用與再造」。
💡 「軟體像園藝不像建築」這個隱喻雖然在第七章重構才正式登場,但種子在這章的「熵/腐敗」就埋下了:建築是一次蓋好就定型,軟體是有機的、會長雜草、需要持續修剪。這條線可以先預告,整季會反覆回來。
討論問題
🎙️ 開場鉤子:「你有沒有接手過一個專案,打開來第一個念頭是『這已經爛到不值得認真改了』?那一刻你其實正站在一扇破窗前——而今天要講的,是這扇窗是怎麼來的。」
🎙️ 自問自答:「『技術債』和『軟體腐敗』有什麼差別?」——技術債暗示你借了會還,腐敗則暗示如果放著不管它會自己蔓延。作者刻意選後者,因為他想強調:不主動修,它不會自己變好。
🎙️ 帶走的一題:「這禮拜替自己的『知識投資組合』做一次體檢——你上一次學一個跟現在工作無關的技術,是什麼時候?挑一個小東西,這週開始投資。」
更大範圍關聯
- 軟體工匠三經典:本書 +《Clean Code》(Martin) +《Refactoring》(Fowler)。本季與 Reading Uncle Bob 系列互文——Uncle Bob 的「童子軍規則」(讓營地比你來時更乾淨)與本書的「不要容忍破窗」幾乎是一體兩面,可互相引路(見 [軟體工程領域切分藍圖])。
- 思想源頭與旁系:知識投資組合接 Peter Drucker 的「知識工作者」概念;批判性思考的「問五個為什麼」接豐田生產系統。本書與《Code Complete》(McConnell) 都屬「全方位工程素養」一脈,但 Pragmatic 更短、更格言化。
- 敏捷的根:作者是敏捷宣言起草人,第一章的「主動負責、回應變化」其實就是敏捷精神的個人版,到第八、九章會升級成團隊版。
- 二十週年版的更新:1999 版的時代色彩(CVS、Perl)被換成現代範例,新增並行、屬性測試、actor 模型——這本書自己示範了「定期重新平衡」。
錄製建議
- 建議時長:約 22-25 分鐘。配比:開場介紹整個「啃一本大書」系列與這本書的地位約 3 分、四個重點各 4-5 分。
- 討論策略:用「接手爛專案的無力感」開場最有共鳴,直接帶出破窗。中段石頭湯與煮青蛙是一對好講的故事,用「催化劑 vs 被煮熟」的對照演。知識投資組合放在後段給聽眾一個「明天就能做」的行動。
- 這是系列起手,記得花 30-60 秒介紹「啃一本大書」是什麼、這本書在三經典裡的位置,以及它為何二十年不過時,建立系列感與整季的定調:這是一本講態度的書,技術會變,態度不會。