1.4 AI 時代:附屬性困難的消亡與本質性困難的永存#
一個震撼的時刻#
2025 年前後,AI 程式設計工具(如 Claude Code、GitHub Copilot、Cursor、OpenCode)開始在開發者中普及。你可能看過這樣的畫面:一個工程師對著 AI 說「幫我寫一個能把 CSV 轉成 JSON 的工具」,幾秒鐘後,函式就寫好了,含錯誤處理、測試用例、甚至文件註解。
如果你第一次看到這個場景,難免會感到震撼——過去要花一小時的工作,現在幾秒就完成了。這讓我們不得不重新審視 1.2 節的「沒有銀彈」論點:AI 是不是那個銀彈?
這正是本章要回答的核心問題。答案分成兩半:AI 是消滅附屬性困難的終極武器,但它沒有、也無法消滅本質性困難。
AI 如何消滅附屬性困難#
回到 1.2 節對附屬性困難的定義——它來自工具與方法,而非問題本身。AI 幾乎精準地命中了每一項:
| 附屬性困難 | 範例 | AI 的消滅方式 |
|---|---|---|
| 繁瑣的語法 | 記不住庫的 API 簽名 | AI 直接生成正確語法 |
| 樣板程式碼 | CRUD、DTO 轉換、基本配置 | AI 秒級生成 |
| 記憶體管理 | 手動管理資源 | 現代語言 + AI 自動處理 |
| 基礎單元測試 | 為每個函式寫覆蓋測試 | AI 根據邏輯自動補全 |
| 文件同步 | 程式碼改了文件沒改 | AI 讀程式碼動態生成/同步文件 |
| 除錯 | 追著 stack trace 逐行查 | AI 讀全局上下文直接定位根因 |
結果是:原本佔據工程師大量時間的「體力活」,被極大地自動化了。 一個受過訓練的工程師,在不降低品質的前提下,程式碼產量可以提升數倍。這正是 AI 帶來的巨大紅利。
AI 無法消滅本質性困難#
然而,AI 越是強大,我們越要清醒地看到它幫不上忙的地方——那正是本質性困難的所在。
需求模糊性:AI 不知道使用者要什麼#
Brooks 說的第一種本質困難是「複雜性」,但更根本的其實是需求的模糊性。「幫我做一個訂位系統」這句話有無窮多種解讀。使用者要的是現場排隊還是線上預約?要整合第三方平台嗎?允許重複訂位嗎?
AI 擅長「在清楚的需求下生成程式碼」,但它不了解使用者的痛點、商業目標與組織政治。它無法替你開會、感受使用者的挫折、決定商業上的取捨。一個結構完美卻解決不了真實問題的程式,是垃圾程式——Garbage in, Garbage out。這是需求工程(第 2 章)無法被 AI 取代的原因。
架構權衡:AI 不能替你承擔權衡#
設計大型系統時,需要在「一致性 vs 可用性」「成本 vs 效能」「簡單 vs 靈活」之間做出權衡。這些權衡依賴對業務的深刻理解與價值判斷,無法由 AI 產生標準答案。AI 可以列出選項、分析利弊,但最終的取捨與責任必須由人承擔。
邏輯嚴密性與邊界:AI 會產生幻覺#
AI 會「幻覺」(Hallucination)——寫出看似合理、實則錯誤或有安全漏洞的程式碼。它可能遺漏邊界條件、忽略錯誤處理、寫出不安全的 SQL 查詢。因此,驗證 AI 產出的邏輯是否正確、是否覆蓋了邊界情況,仍然是無可替代的人類工作(第 5 章)。
本質困難 vs 附屬困難的重新分布#
用一張圖總結 AI 造成的變化:它沒有讓「總困難」消失,而是把困難從「附屬性的、可消滅的」重新分布到「本質性的、不可消滅的」。
flowchart LR
subgraph PAST[過去]
Ac1[附屬性困難<br/>主要工作:寫程式]
Es1[本質性困難<br/>相對被忽略]
end
subgraph NOW[AI 時代]
Ac2[附屬性困難<br/>大量被自動化,大幅縮小]
Es2[本質性困難<br/>相對占比放大,更加關鍵]
end
PAST --AI--> NOW換句話說,AI 沒有降低做軟體的總難度,而是徹底改變了難度的「形狀」。過去 80% 的時間花在「寫程式」這個附屬性工作上;現在,更多時間應該花在「定義問題、設計架構、驗證品質」這些本質性工作上。而這些,恰恰是軟體工程真正要傳授的核心。
「沒有銀彈」在 AI 時代的重新解讀#
Brooks 說「沒有銀彈」,指沒有任何單一技術能十倍提升軟體生產力。AI 的出現是不是推翻了這句話?
辯證地看:
- 如果只算「產出程式碼」的效率,AI 確實逼近了十倍,甚至超過十倍。就這個狹義角度,AI 是最接近銀彈的工具。
- 但如果算「做出正確的軟體」的總效率,AI 並沒有讓需求定義、架構設計、品質驗證這些本質性工作變快——它們仍然是瓶頸。
所以本書的立場是:
AI 是對抗附屬性困難的銀彈,但它不是對抗本質性困難的銀彈。而本質性困難,才決定軟體專案最終的成敗。
這也呼應了 1.5 節即將討論的核心問題:當 AI 消滅了大量附屬性困難後,軟體工程師的價值重心,理應且必須轉移到本質性困難上。
本章小結#
- AI 是消滅附屬性困難的強大武器
- 但它無法消滅本質性困難:需求模糊性、架構權衡、邏輯嚴密性
- AI 改變了難度的形狀,把重心推向本質性困難
- 從產出程式碼的效率看,AI 接近銀彈;從做出正確軟體看,不是
- 本質性困難是軟體工程師真正的價值所在
想一想#
- 試著讓一個 AI 工具生成一個「訂位系統」的程式碼。然後問它一些需求問題(例如「要不要支援爽約補償」),看看它能不能替你做出合理的業務決定。
- 為什麼 AI 越強大,需求定義、架構設計、品質驗證這些工作越顯重要?
- 你認為「浪費時間」的定義,在 AI 時代是否改變了?哪些時間仍然不是浪費?