重點:不熟的領域、不走 TDD、只靠 CLAUDE.md 撐到收斂,學到的不是 React,是 AI 時代真正考驗工程師的四種能力。
我故意在自己最不熟的前端開發技術,用 Claude Code 做了一個完整的 Roguelike 遊戲。
週五晚上開工,週一早上完成。
除了做這個遊戲覺得好玩以外,也是為了驗證一件事:
當 AI 寫出來的東西,你沒辦法靠肌肉記憶發現問題的時候,你還守不守得住品質?
我最近在整理一個想法:AI 時代工程師要補的四塊能力
- 系統理解
- 需求拆解
- Context 管理
- 驗證與判斷
但整理歸整理,我過去的實戰經驗都是 C# 後端,是我打滾二十年的舒適圈。
所以我刻意挑了相對最不熟的領域:前端、Canvas、game loop、React 狀態管理。
而且條件再刻意不專業一點——這個專案不走 TDD(但也許這比較符合業界實際狀況?)。
我想測的是:在沒有足夠的測試保護的情況下,靠 CLAUDE.md 加上人工驗證,能不能把一個完整專案撐到收斂?還是會在某個點整個炸開、收不回來?
先講遊戲本身
BSP 地城生成、回合制戰鬥、15 種怪物各有獨立 AI、4 層 Boss 戰含多階段變身、Web Audio 合成 9 首 BGM。純 TypeScript,零圖片檔,零音效檔,零後端。
腦細胞死了不知多少,在筆電前坐到凌晨兩點,發現女友的眼神已經帶著殺氣,才趕快回房間睡覺。
不過撐過來了。而且撐過來之後,最重要的產物不是遊戲本身——是那份從 400 行長到 900 行的 CLAUDE.md。
從 400 行到 900 行的 CLAUDE.md
開發前我寫了一份架構規格書放 repo 根目錄,讓 Claude Code 讀。遊戲設計、技術架構、sprite 規格都在裡面。為了提高 AI 的判讀準確度,整份文件刻意用英文寫——當然,英文文法也是請 Claude 幫我修的。
- 一開始檔案約 400 行
- 開發結束,900 多行
多出來的 500 行有個標題:CRITICAL ARCHITECTURE NOTES。
18 條。每一條都是一個親手踩過的坑。
卡最多次的問題:戰鬥凍結
戰鬥系統是 event-driven + animation queue。Claude Code 新增了一個 CombatEvent 類型,忘了在 animation mapper 補對應的 case。動畫佇列永遠是空的,finished flag 永遠不會觸發。
戰鬥凍結。畫面就卡在那裡。
我修好了一個。
然後同樣的 bug 在不同的 event 上又出現三次。
另一個經典:React 狀態的 race condition
60fps game loop 用 useRef 存戰鬥狀態,React 用 useReducer 存持久狀態。兩套系統各管各的,開發時一切正常。
直到戰鬥結束的那個瞬間。
Game loop 拿了一個 stale snapshot 寫回 React state,直接把 APPLY_COMBAT_RESULT 已經更新好的數值蓋掉。打完怪回到地圖,HP 跟經驗值像什麼都沒發生過 😂
雖然對 React 的狀態管理不熟,但當下就覺得可能是 race condition,花了一點時間確認後,總算順利修正,也把規則加到 CLAUDE.md 內。
這就是我想驗證的事。
回到「不走 TDD」這個決定
整個過程沒有發生無法收斂的狀況。該修的都修得回來。
但代價是什麼?就是同樣的 bug 會重覆出現。 像 animation mapper 那個,同一種錯犯了三次。如果有測試攔著,第一次修完寫個 test case,後面兩次根本不會發生。
這也是 CLAUDE.md 的侷限——它能讓 AI 下次避開,但它不像測試那樣能自動攔截。它靠的是 AI 讀到、記住、遵守。大多數時候有效,但不是百分之百。
兩者不是替代關係,是不同層級的防護網。
18 條 Note,全來自「你不知道你不知道的」
18 條 Note,沒有一條是語法錯誤或邏輯錯誤。全部都跟架構規範有關——但不是「被違反」,是一開始根本不知道那裡需要一條規範。
我很多年前在一場技術演講裡聊過架構思維的三層金字塔——廣度 vs 深度:
- 你知道的
- 你知道你不知道的
- 你不知道你不知道的
這 18 條 Note 全部來自最底層——「你不知道你不知道的」。
在自己熟的 C# 後端,多年經驗會幫助我把很多「不知道你不知道的」往上搬——你踩過夠多次,直覺就會告訴你哪裡該設防線。但換到不熟的技術棧,那層又變厚了。而 AI 跑得比你快,它會比你更早碰到那些你還沒意識到的邊界。
所以 CLAUDE.md 會從 400 行長到 900 行。不是因為一開始偷懶,是因為有些約束你真的要踩過才知道它該存在。
CLAUDE.md 在開發過程中角色完全變了
開始時是規格書,結束時是防護網。
每次出 bug,我不只修 code,而是回去加一條 Note。附 ✅ 正確寫法、❌ 錯誤寫法、當初怎麼炸的。下次碰到類似情境,Claude Code 讀到這條 Note 就不會再犯。
18 條 Note,18 次把「不知道你不知道的」變成「你知道的」。
總結
在我最不熟的前端技術,一個週末,那四塊能力裡被考驗最兇的果然是驗證與判斷。
但考驗的不是你對語言熟不熟——是你有沒有把踩過的坑系統化記錄下來的紀律。
CLAUDE.md 就是那個紀律的載體。
不熟的地方 AI 會幫你走得快,但架構規範你不寫,沒有人會幫你補。
遊戲本身:「重構地城」🎮
你是一個工程師,走進 Legacy Codebase 地城,用重構技能打 Code Smell 怪物,最終面對 God Class Boss。
每隻怪物的 sprite 就是一段 TypeScript 2D 陣列。