🎯 什麼情境該想到我

當你「用蠻力硬幹一個問題卻事倍功半」,或不確定「是該繼續調參,還是根本換個方法」的時候。作者花整堂課只講「找對模型」有多重要。

⚙️ 怎麼用(作者的四條結論)

  1. 正確的模型在形式上通常是簡單的:若你的模型像托勒密「40 個圓套在一起」那樣複雜到難以求解,多半是模型錯了,該找更簡單的(如換成一個橢圓)。
  2. 正確的模型一開始可能還不如「精雕細琢的錯誤模型」準:哥白尼日心說初期誤差比地心說還大;但只要認定大方向是對的,就該堅持下去,別因一時不如舊方法就放棄。
  3. 大量準確的資料很重要:開普勒能發現橢圓軌道,靠的是第谷留下的大量精確觀測資料。
  4. 模型遇到雜訊而失準時,別用湊合的修正去打補丁,要找雜訊的根源——這往往通往重大發現(天王星軌道異常,順著找根源就發現了海王星)。

★ 套用到軟體工程:「本輪」的症狀

托勒密的地心說為了貼合觀測,在圓上一層一層加本輪,最後疊到 40 多個圓。軟體裡也有同樣的現象——模型選錯了,就只能不停打補丁。辨認的訊號:

症狀代表
同一個模組的 bug 修了又出現變形版本修的是症狀,模型本身不對
程式碼裡越來越多 if 特殊情況每個特例都是一個本輪
沒人能用一句話說清楚「這個系統怎麼運作」模型已經複雜到無法被理解
修一個 bug 會引發另一個 bug補丁之間互相牽制

★ 三個「換模型」的真實例子

錯的模型補丁長什麼樣對的模型
金額用浮點數到處加 round()、比較時用 abs(a-b) < 0.001、對帳時總差幾分錢用最小單位的整數(分、satoshi)或十進位型別;補丁全部消失
時間存「當地時間字串」夏令時轉換時重複或跳過一小時、跨時區比較出錯、到處加時區換算存 UTC 時間點 + 另存使用者的時區名稱(如 Asia/Taipei,而不是固定的 +08:00);只在顯示時轉換
快取用固定的過期時間過期時間越調越短(資料太舊)又越調越長(資料庫撐不住),一直在兩者之間擺盪改成資料變更時主動失效(事件驅動);過期時間只當保險

共通點:對的模型在形式上更簡單,這正是書中第一條結論。花在調參數(調過期時間、調容差)上的時間,常常是在替錯的模型加本輪。

★ 什麼時候該換模型、什麼時候該繼續調

繼續調參數該換模型
調整讓結果穩定地越來越好調整讓一個問題變好、另一個問題變糟
例外情況越來越少例外情況越來越多
能解釋為什麼某個參數值比較好參數值只是「試出來剛好能用」

書的第二條結論也提醒:新模型一開始可能比精雕細琢的舊模型表現更差。換模型時要預期一段過渡期,用明確的指標(錯誤率、補丁數量、事故數)判斷方向對不對,而不是看第一週的結果。

🧪 我實際套用的紀錄

  • 2026-07-24:(待填)

⚠️ 注意 / 什麼時候不適用

  • 「堅持大方向」的前提是你有理由相信方向對;不是固執己見。判斷方向對錯,看它是否更簡單、更能解釋現有資料、能否舉一反三。

🔗 相關工具