iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0
Claude AI

Claude Code 實戰筆記:AI coding 沒有新問題系列 第 5

# Day 5:沒有規格書的 AI 就是一台隨機打字機

  • 分享至 

  • xImage
  •  

猴子、打字機、莎士比亞

1913 年,法國數學家 Émile Borel 提出一個思想實驗:一隻猴子隨機敲打打字機鍵盤,只要時間夠長,理論上終會打出莎士比亞全集。

數學上這是對的。把所有可能的字母排列窮舉一遍,莎士比亞全集只是其中一個排列,機率不是零,所以無限時間內必定出現。

實務上完全沒用 — 你等不到,也驗不了。每一次產出都是隨機的,偶爾碰巧打出一段有意義的文字,下一秒就被一串亂碼蓋過去。

2026 年,很多人用 AI 寫程式的方式跟這件事的差距,比想像中小。

「幫我做 X」不是規格

打開 AI 對話框,輸入「幫我做一個登入功能」。AI 產出一個版本。跑第二次,換一個版本。兩個都能動,但做的事不一樣。

「幫我做一個登入功能」這句話漏掉了什麼?認證方式是 OAuth、email/password、還是 magic link?登入失敗要顯示什麼?連續幾次失敗要鎖帳號?session 存在 cookie 還是 JWT?有效期多久?

給一個資深工程師同樣模糊的需求,得到的第一個反應不會是「好我開始寫」,而是「等一下,先問幾個問題」。

AI 的預設行為是直接開始寫,不是先釐清需求。它會選一個它覺得最常見的方案動手。而且不同 session 選的可能不一樣 — 同一句 prompt,同樣的 context,這次 JWT、下次 cookie-based session。不是 AI 不穩定,是在沒有明確 spec 的情況下,兩個方案都「對」,只是對不同的需求。

猴子打字打出的 "to be or not to be" 跟莎士比亞寫的那句一模一樣。差別不在產出,在過程有沒有意圖。

Spec-Driven Development

需求先行不是新觀念 — BDD、contract-first development 都是前人走過的路。但 2025-2026 年,這個觀念被重新整理成針對 AI coding agent 的工作流。Microsoft 的 Apoorv Gupta 在 2026 年把它定義成 Spec-Driven Development(SDD)— 先把需求、限制、驗收條件寫清楚,再讓 AI 從這份共享的 context 產出 code 和測試。GitHub 在 2025 年開源了 Spec Kit,讓 coding agent 能按照結構化的 spec 工作。

一份最小的 spec 需要三件事:

觸發條件 — 什麼情境下啟動這個功能?使用者做了什麼動作?資料從哪來?

預期結果 — 完成後使用者看到什麼?系統狀態改了什麼?

驗收條件 — 怎麼判斷「做完了」?列出可以跑測試驗證的條件。

拿登入功能當例子:觸發條件是使用者在 /login 輸入 email 和密碼點擊送出。預期結果是驗證通過導向 /dashboard,失敗停留在 /login 顯示「帳號或密碼錯誤」。驗收條件是正確帳密能登入、錯誤帳密顯示錯誤訊息、連續五次失敗帳號鎖定三十分鐘、session 有效期二十四小時。

有了這份 spec,AI 不需要猜認證方式,不需要猜錯誤處理策略,不需要猜 session 規則。跑兩次,實作細節可能不同,但架構方向一致。更重要的是:產出的 code 可以逐條對照驗收條件 — 不是「看起來好像對」,而是「可以證明對或證明錯」。

Claude Code 的 plan → implement 流程

在 Claude Code 裡,SDD 有具體的工具支援。

在對話中輸入 shift+tab 切換到 plan mode,或是直接在 prompt 裡說「先規劃再實作」— Claude 就會先產出一份實作計劃,而不是直接寫 code。計劃會列出打算建哪些檔案、用什麼函式庫、API 端點怎麼設計、測試怎麼寫。計劃不是 code,review 起來快得多。方向不對的時候,改計劃的成本是改 500 行 code 的零頭。

Claude Code 社群裡還有一個常見做法:在專案裡放一份 IMPLEMENTATION_PLAN.md,把複雜功能拆成三到五個階段,每個階段有明確目標和驗收條件。AI 在每個階段開始前讀計劃,做完更新狀態。不是一口氣丟一個大需求讓它自由發揮,而是拆成小步驟,每一步都有可驗的 spec。

Day 4 講的「先讀再寫」確保 AI 讀懂了既有 code。Spec 做的事更前面一步 — 確保 AI 在讀 code 之前就知道要做什麼、做到什麼程度、怎麼算完成。讀是 how,spec 是 what。

軟體工程最老的教訓

Frederick Brooks 1987 年在 "No Silver Bullet" 裡的大意是:軟體開發最難的部分不是把設計變成 code,而是決定到底要做什麼。

快四十年了。每個工程師都經歷過需求模糊的專案 — PM 丟來一句「做一個 X」,做完被退回來,因為跟 PM 想的不一樣。不是 code 寫得不好,是需求從來沒被寫清楚。

AI 讓這個循環加速了。以前「做出來不是要的」要花兩週,現在三分鐘。但三分鐘做出來的不是要的東西,還是不是要的。快不等於對。

猴子打字打得再快,還是猴子。給它一份 spec,就不用猜了。


延伸閱讀


上一篇
# Day 4:AI 寫 Code 前不讀 Code,跟瞎猜有什麼差別
下一篇
# Day 6:測試是 AI 最聽得懂的驗收標準
系列文
Claude Code 實戰筆記:AI coding 沒有新問題9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言