回饋循環就是一切
AI 模型自己寫程式這件事本身並不有趣。有趣的是它生成程式碼之後發生的事:模型能以多快的速度知道程式碼是否正確?生成與驗證之間的回饋循環有多緊密?
這個循環決定了一切。它決定了模型能否迭代自己的輸出,決定了人類能否在不手動檢查的情況下信任輸出,也決定了 AI 寫程式究竟在哪些領域行得通。
循環速度並不均勻,它遵循一條光譜。而這條光譜由一個更簡單的事實決定:AI 本質上是文字原生的。
後端程式碼是文字,API 回應是文字,資料庫 schema 是文字。整個領域都表徵為字串,語言模型無需離開其原生媒介就能讀取、生成和驗證。即使後端涉及 CLI 指令,那些指令也是文字。模型不需要觀看,它需要閱讀。
視覺介面則截然不同。UI 不是靜態圖像,而是時間性的——狀態會改變,動畫會過渡,手勢會觸發連鎖反應。模型可以擷取按鈕的截圖,但無法感受按下按鈕的時機;可以讀取 CSS,但無法觀察 easing 曲線隨時間展開的過程。視覺正確性本質上是體驗性的,而體驗在時間中發生。
後端:毫秒級
後端程式碼以確定性方式進行驗證。一個函式有輸入和輸出,型別檢查器在編譯期間驗證 contract,測試套件在毫秒內驗證行為,API endpoint 回傳的回應要麼符合 schema 要麼不符,資料庫遷移要麼乾淨完成要麼回滾。
每一個驗證訊號都是文字的、確定性且快速的。模型可以生成一個函式、執行型別檢查器、看到錯誤,然後在數秒內重新生成。它可以撰寫測試、執行測試、看到失敗,然後修正實作。迭代週期夠緊密,模型可以在受限的後端任務範圍內半自主地運作。
這就是為什麼後端是當今 AI 寫程式最令人感到神奇的領域。該領域是純邏輯,驗證是即時的,模型知道自己錯了——而這正是確定性 guardrails試圖賦予你 codebase 中其餘部分的能力。
網頁端:分鐘級
網頁開發引入了視覺正確性。一個元件可能傳遞了正確的 props 卻有錯誤的 padding,一個佈局可能通過所有型別檢查但看起來仍然壞掉。驗證層面不再純粹是確定性的。
Playwright 有所幫助——你可以渲染元件、截圖並與基準進行比對。但這很慢。後端測試套件在數秒內執行完畢,Playwright 視覺回歸測試套件則需要好幾分鐘。AI 無法以相同的速度迭代自己的輸出,因為驗證步驟慢了一個數量級。
模型可以生成能編譯的 React 程式碼,但若不執行瀏覽器、渲染 DOM 並比較像素,它就無法判斷最終的 UI 是否正確。這個瓶頸是真實存在的。網頁端的 AI 寫程式是行得通的,但回饋循環較為鬆散。
行動端:小時級
行動端加入了物理現實。手勢有時序和物理特性,動畫有讓人感覺對或錯的 easing 曲線,同一個畫面在 iOS 16 和 iOS 18 上渲染出來不同。Bluetooth、相機、GPS 和推播通知等功能的行為會因裝置、OS 版本和廠商自訂介面而異。
沒有快速的方法來驗證這些。單元測試能涵蓋業務邏輯,但無法涵蓋滑動的手感。模擬器上的 UI 測試能捕捉佈局問題,但無法捕捉三年前的 Android 裝置上的掉幀。真正的驗證需要建置、簽署、安裝並在實體硬體上實際操作應用程式。回饋循環是以小時計量,而非秒。
模型可以生成能編譯的 SwiftUI 或 Jetpack Compose 程式碼,但無法告訴你應用程式是否有原生感。這需要真人實際操作真實裝置。迭代週期太慢,模型無法有效地自我修正——這正是為什麼 AI 生成的 React Native app 需要 guardrails 才能 scale。
這條光譜意味著什麼
AI 寫程式並非以模型能力的速度擴展,而是以驗證的速度擴展。
模型今天就能寫出行動端程式碼,但無法知道那些程式碼好不好。要知道好不好,需要行動端目前不具備的驗證基礎設施。後端有,網頁端正在建構,行動端則落後數年。
對於正在選擇 AI 寫程式應用到哪裡的團隊來說,答案顯而易見。從驗證最快的地方開始:後端優先,其次是有投入視覺測試的網頁端,行動端最後,仍由真人進行最終驗證。這種選擇的維護成本會隨著時間累積——這就是為什麼第一版從來都不是問題。
模型並非在後端比較聰明,只是獲得更多資訊而已。