我用 Claude Code 開發一年多,最深的體感不是「AI 好強」,而是我犯的錯換了一種長相。
以前的失敗很好認:卡住、做不出來、估的時程爆掉、demo 前一晚在救火。這種失敗至少誠實——它會痛,痛到你不得不停下來重想。
現在的失敗長這樣:三天做完、每個 commit 都乾淨、測試綠燈、demo 順利過關——然後三週後才發現,整件事解的是錯的題。
這篇想談的就是這個分岔:解題能力(給定一道題,把它做對)與思考能力(決定該做哪一道題,以及怎麼知道自己做對了)。前者現在可以充值購買,後者不行。
這篇算是 Research 不是 Search 的工程實務續集。那篇談的是職涯層級的護城河;這篇往下收,談日常寫程式時,思考能力具體卡在哪四個位置。
一、失敗的形狀變了:43 個「假完成」
先講一個我自己的案例,因為它是這個現象最乾淨的標本。
那是一次 Laravel 嵌入式架構的移植。某一輪作業把 78 個模組的 migration flag 標成 true——意思是「已完成移植,走新架構」。事後盤點才發現,其中 43 個實際上只是 scaffold:檔案在、路由通、頁面打得開,但業務邏輯根本沒搬過去。最後只能一次回滾那 43 個 flag,再逐個真正移植、確認後才翻回 true。(完整過程寫在 Migration Flag 止血策略)
我想強調的是:這個過程裡沒有任何一步「做不出來」。
每個模組都有產出、都有 commit、都能跑。AI 的解題能力完全在線上——它照著我給的定義,把「移植一個模組」這件事做了 78 次,又快又整齊。
錯的是那個定義本身。「完成」這個詞,在整個流程裡從來沒有被寫成一個可以檢查的東西。而當解題成本趨近於零,一個沒被定義清楚的詞,會以 78 倍的速度被複製出去。
這就是解題能力過剩、思考能力缺席時,系統會長出來的樣子。
二、兩個詞,攤開來對照
| 面向 | 解題能力 | 思考能力 |
|---|---|---|
| 題目從哪來 | 別人給的、已經定義好的 | 自己從一團症狀裡切出來的 |
| 核心動作 | 找到方法、把它做對 | 決定做哪一題、決定什麼叫做對 |
| 什麼算完成 | 需求跑通、測試綠燈 | 由你事先定義的判準說了算 |
| 卡住的時候 | 換方法、查資料、再試一次 | 退回上一層,懷疑題目本身 |
| 失敗代表 | 這條路不通 | 我對問題的理解錯了(更值錢的資訊) |
| AI 的位置 | 幾乎全包,而且越來越好 | 只能當陪練,代替不了你下判斷 |
| 能不能複製 | 能,而且成本趨近於零 | 不能,過程無法被旁觀者複製 |
一句話收攏:
解題能力回答「怎麼做」;思考能力回答「做什麼」與「怎麼知道做對了」。
過去這兩件事是綁在一起的——因為「怎麼做」很貴,你被迫在動手前先想清楚,光是估工時就強迫你思考一輪。現在「怎麼做」變便宜了,那道強制思考的關卡跟著消失了。你不再被逼著想,於是你可以整整三週都不想,而且過程一路順風。
三、先誠實承認:AI 的解題能力真的很強
這篇不是要唱衰 AI,正好相反。
在「題目定義清楚」的前提下,它比我快、比我廣、比我不會累。我寫過一篇 Claude Code 抓 PHP 隱形 Bug,裡面五個案例全是人眼掃十遍也看不出來的——number_format 把 -30,000 顯示成 -30、欄位名稱害框架誤判表名這種。那些 bug 在 codebase 裡躺了好幾年,沒有任何一個人類 code review 抓得到。
所以結論不是「AI 不可靠所以少用」,而是——
正因為解題這一端被補滿了,人剩下的價值會全部擠到另外四個位置。
下面這四個位置,是我一年多下來覺得 AI 真的頂不掉的部分。每一個都配一個我自己踩過的案例。
四、AI 幫不了你的四個位置
位置 1:出題——把症狀翻譯成問題
使用者的抱怨永遠是症狀,不是問題。從症狀走到問題,中間那段翻譯,是你的工作。
我寫過一篇 罕用字地獄:某個個案的姓名有罕用字,導致整份 Excel 報表錯位。追下去是三層:
症狀 匯出的 .xls 打不開/欄位錯位
↓
第一層 資料庫存不下 4-byte 字元(編碼)
↓
第二層 還原機制靠硬編碼白名單(設計)
↓
第三層 PHPExcel 的 BIFF8 長度欄位算錯,檔案結構壞掉(函式庫)
關鍵在於:停在第一層也「解掉了」使用者當下的抱怨。 把那個名字改掉、或加進白名單,畫面就正常了,工單可以關了。AI 會非常樂意幫你做這件事——你問它第一層,它就答第一層,答得又快又對。
它不會拒絕一道錯的題。 這是我認為最該記住的一句話。模型沒有「等一下,你確定要問這個嗎」的本能,你問什麼它答什麼,而且答得很有說服力。
我自己的土法煉鋼判準:連問三次「那為什麼?」,直到答案落在其中一種——
- 落在一層我改得動、而且改了以後同類問題不會再來的地方 → 這才是題目
- 落在「這是當年的設計選擇」→ 那要處理的是取捨,不是 bug
位置 2:劃界——哪些交給程式,哪些交給模型
這是我覺得 agent 工程裡最關鍵、也最少人談的一個決定。
做 bug 調查時,第一步通常是「這個欄位到底被誰用到」。你可以叫 AI 去 grep 一輪、讀幾個檔案、然後推理出一條呼叫鏈——它會給你一個看起來很合理的答案。
問題是「看起來很合理」跟「正確」在這裡差很多,而且這個錯誤會污染後面的每一步:呼叫鏈錯了,根因分析就錯,修法就錯,測試也測在錯的地方。
所以我在 vibe-research skill 裡的做法是反過來的:寫一支腳本,讓它回傳結構化的呼叫鏈,模型只負責判讀。
我後來把這件事收斂成一條規則:
會影響後續所有推理的事實,必須由確定性程式產生;模型只負責判讀與取捨。
這條界線畫在哪裡,沒有任何工具能幫你決定。因為它取決於一個只有你知道的問題:這件事如果錯了,後面會不會全錯?
位置 3:驗收——定義什麼叫「過關」
回到開頭那 43 個假完成。它們之所以能存在,是因為驗收標準是「頁面打得開」。
驗收標準是思考能力最密集的地方,我三個案例都在講這件事:
- Guardrail Test:把「架構回退」這種抽象的壞事,變成一支 PHPUnit 測試看得懂的規則。定義完成之後,機器就能每天幫你守——但「什麼叫回退」得你先想出來。
- CI 第一階段的目標是零誤報:十年 Legacy 全庫掃描一定滿江紅。這時候真正的題目不是「怎麼抓更多問題」,而是「怎麼讓 CI 不被無視」。成功的定義換了,整個技術方案就換了——只檢查 diff、baseline 先後順序、刻意不做覆蓋率門檻。
- 跨模型交叉審查:寫程式的和審程式的是同一個模型,它誤解需求的地方,審查時會用同樣的誤解去驗收。看出「我的驗收機制有結構性盲點」是思考;換一個模型來審是解題。 前者難得多。
反過來說,最常見的驗收失效只有一句話:用「它跑起來了」當作過關。那不是驗收,那是把驗收外包給運氣。
位置 4:消化——把一次失敗變成一條規則
解題是「修好這一次」。思考是問:這一類為什麼會發生?我的哪一條規則該改?
我為此做了 RUNLOG:每次 skill 跑歪就記一筆失敗軌跡,累積到一定量之後分群歸納,再改回 SKILL.md。跑了一陣子之後我發現,真正難的不是「記錄失敗」,而是忍住不要每次失敗都加一條規則——所以那套機制裡有五條防止規則膨脹的鐵則。
「規則不是越多越好」這件事本身,就是一道很典型的思考題:加規則是解題(我修掉了這次的失誤),但規則之間會互相打架、會稀釋注意力,這個代價只有你會算。
五、思考能力會退化,而且退化的過程非常舒服
這是我最想寫下來的一段。
肌肉退化你會有感覺,思考能力退化不會——因為退化的每一步都伴隨著「今天效率好高」的爽感。三個我自己拿來自檢的徵兆:
徵兆一:你接受了一段自己解釋不出來的 diff。 不是「我大概知道它在做什麼」,是「如果現在有人問我這三行為什麼要這樣寫,我答不出來」。接受它,等於在系統裡放進一塊你無法維護的東西。
徵兆二:你的驗收標準退化成「它跑起來了」。 你已經不再事先寫下判準,而是事後看結果決定滿不滿意。這種驗收永遠會過。
徵兆三:你卡住時的第一個動作是開 prompt。 不是先形成假設再讓 AI 挑戰它,而是直接讓 AI 給你假設。這兩件事看起來只差幾秒,但差別是誰在思考。
第三點我有一個很土的解法,效果卻意外地好:卡住時先寫三行,寫完才准開 prompt。
現象:
我猜的原因:
我打算怎麼證明我猜錯了:
成本大概 90 秒。但這 90 秒決定了接下來兩小時是「我在用 AI 驗證假設」還是「AI 在餵我假設、我負責點頭」。而且第三行特別重要——先想好怎麼推翻自己,是你在把自己放回主導位置。
順帶一提,我跑過一次 59 小時的單一 session。事後回想,長 session 最大的風險從來不是模型忘東西(那個有辦法補救),而是人在第 30 小時之後放棄追蹤了——你開始只看結果不看過程,因為前面 29 小時它都是對的。信任是這樣一點一點交出去的。
六、我現在的日常清單
不談心法,講可以照做的:
- 開工前寫一句「完成判準」,而且要可檢查。不是「功能可用」,是「這 12 個模組的 X 欄位,跑 Y 腳本的輸出要跟舊版一致」。
- 每次覺得「AI 給的答案好順」時,強制問一句:如果這是錯的,會先在哪裡爆?答不出來就代表我沒讀懂。
- 任何要進到後續推理的事實,用腳本產生,不要用模型記憶。
- 每週看一次自己的失敗軌跡,挑一條升級成規則——只挑一條。
- 定期做一次無 AI 練習:找一個小 bug,自己從頭追到底。不是為了證明什麼,是為了知道自己的手感掉到哪了。
寫在最後
濃縮成一句:
AI 讓「做出來」變便宜,於是「做對的東西」變成唯一昂貴的事。
解題能力現在可以用訂閱制買到,而且明年只會更便宜。思考能力沒有這種捷徑——它只能被練,而且只有在你願意慢下來的那 90 秒裡練得到。
矛盾的地方就在這裡:工具越快,你越需要刻意慢那一下。願不願意付這 90 秒,大概就是 AI 時代工程師之間真正的差距。
📎 延伸閱讀
- Research 不是 Search:AI 時代工程師的稀缺能力——本文的上一篇,談職涯層級的護城河
- Migration Flag 止血策略:43 個假完成模組的回滾與再前進——「完成」沒定義好的代價
- RUNLOG:讓 Skill 自己進化的失敗軌跡消化機制——把失敗轉成規則的閉環
- 跨模型交叉審查——當自審有共同盲點時該怎麼辦