2026/06/18
AI 工具越來越強,從補完程式碼、產生元件,到協助重構、撰寫測試,前端工程師的工作方式已經明顯改變。
但我越使用 AI,越覺得前端工程師真正該守住的,不是「我能不能比 AI 更快寫出程式碼」,而是:
我是否知道這段程式碼該不該存在?
它應該放在哪裡?
它會不會破壞資料流、權限邊界與長期維護性?
AI 可以幫我們寫 code,但它不會替產品承擔後果。
所以在 AI 時代,前端工程師更需要守住幾個基本原則。
前端最容易失控的地方,不是 UI 長得醜,而是資料流開始變得混亂。
例如:
1useEffect(() => {
2 fetchUser();
3 fetchOrders();
4 syncUrlState();
5 setDefaultFormValue();
6}, []);一開始看起來只是「初始化資料」,但久了之後,這個元件會變成一個黑盒子。
你很難回答:
AI 很擅長補上看似合理的程式碼,但如果工程師沒有先定義資料流,AI 只會把混亂寫得更快。
我認為前端工程師要守住的第一件事,就是清楚區分:
| 類型 | 適合放哪裡 |
|---|---|
| Server State | React Query / Server Component / Route Handler |
| 表單狀態 | React Hook Form / useState |
| UI 狀態 | local state |
| 跨頁狀態 | URL / store |
| 權限與敏感資料 | server side boundary |
當資料流清楚,AI 才是加速器。
當資料流混亂,AI 只是幫你更快製造技術債。
AI 很容易產出「可以跑」但不好維護的元件。
例如一個元件同時做:
這種元件短期看起來很方便,但長期會很痛。
因為它不是一個元件,而是一個小型系統。
我自己的原則是:
元件超過一定複雜度時,不只是拆檔案,而是要拆責任。
例如:
1BillingPage
2├── BillingSummary
3├── PaymentMethodList
4├── AddPaymentMethodModal
5├── usePaymentMethods
6├── paymentMethodSchema
7└── paymentMethodMapper這樣拆的目的不是為了「看起來很乾淨」,而是讓每個地方都有明確責任:
| 單位 | 責任 |
|---|---|
| Page | 組合流程 |
| Component | 呈現 UI |
| Hook | 管理互動與資料狀態 |
| Schema | 驗證資料 |
| Mapper | 轉換資料格式 |
| Service / DAL | 封裝資料存取 |
AI 可以幫你寫元件,但工程師要判斷這個元件是不是已經承擔太多責任。
這是 AI 很難替你守住的地方。
在 Next.js App Router 裡,Server Component、Client Component、Server Action、Route Handler 的分工很重要。
但 AI 很常為了讓功能「先跑起來」,把東西塞進 client component。
例如:
1"use client";
2
3const user = await getCurrentUser();或是把不該出現在瀏覽器的邏輯放進前端:
1const secret = process.env.SECRET_KEY;這種錯誤不一定馬上爆炸,但會破壞安全邊界。
我會用這個方式思考:
| 問題 | 應該偏向 |
|---|---|
| 需要讀取 session? | Server |
| 需要存取資料庫? | Server |
| 需要使用 secret key? | Server |
| 需要互動狀態? | Client |
| 需要表單輸入? | Client |
| 需要保護敏感資料? | Server |
前端工程師不只是寫畫面的人。
尤其在 App Router 之後,前端工程師其實更接近「產品邊界設計者」。
哪些資料能進 client、哪些邏輯必須留在 server,這些判斷會直接影響安全性與維護性。
AI 產出的程式碼常常可以 demo,但不一定可靠。
所以我認為 AI 時代更需要測試,不是更不需要測試。
尤其是這幾種流程:
| 流程 | 為什麼需要測試 |
|---|---|
| 登入 / 登出 | 權限錯誤會直接影響使用者 |
| 付款 / 綁卡 | 流程錯誤成本高 |
| 表單驗證 | 很容易漏掉邊界條件 |
| 權限頁面 | 不該看的資料不能被看到 |
| 重要 UI 狀態 | 重構時最容易壞 |
例如付款方式管理,就不應該只測「按鈕可以點」。
更重要的是:
測試不是為了追求覆蓋率好看,而是為了建立工程信心。
AI 可以幫我們寫測試,但工程師要定義什麼行為值得被保護。
AI 讓寫 code 變快,但也讓錯誤進入專案的速度變快。
以前工程師可能是一行一行慢慢寫出技術債。
現在可能是一次 prompt 直接產生一整包技術債。
所以 Code Review 不能只看:
還要看:
| 檢查點 | 問題 |
|---|---|
| 責任邊界 | 這段邏輯放在這裡合理嗎? |
| 資料流 | 狀態來源清楚嗎? |
| 錯誤處理 | 失敗時會發生什麼? |
| 安全性 | 敏感資料有沒有外洩? |
| 可測試性 | 這段邏輯能不能被驗證? |
| 可維護性 | 三個月後別人看得懂嗎? |
AI 時代的 Code Review,不只是 review code。
更像是在 review 決策。
AI 很容易讓人產生一種錯覺:
反正 AI 可以改很快,那就整包重構。
但重構不是把程式碼改得比較新,而是讓系統變得更安全、更清楚、更容易維護。
如果沒有測試、沒有資料流理解、沒有明確目標,重構很可能只是把舊問題換成新問題。
好的重構應該要能回答:
AI 可以加速重構,但不能取代工程判斷。
有些程式碼看起來很高級,但很難維護。
例如過度抽象、過度泛型、過度封裝,短期看起來很漂亮,長期卻讓人不敢改。
我現在更在意的是:
| 我更重視 | 而不是 |
|---|---|
| 清楚的命名 | 炫技式寫法 |
| 穩定的資料流 | 到處 useEffect |
| 明確的責任分工 | 巨大元件 |
| 可驗證的流程 | 手動測一下 |
| 安全的邊界 | 只求功能能跑 |
| 團隊看得懂 | 只有作者懂 |
好的前端工程,不是寫出最聰明的 code。
而是讓下一個人可以安全地理解、修改、擴充它。
我不覺得前端工程師會因為 AI 就不重要。
相反地,當寫 code 變得更便宜,工程判斷會變得更重要。
因為未來真正有價值的能力,可能不是「我能不能寫出這段程式碼」,而是:
AI 時代的前端工程師,不只是使用工具的人。
更應該是守住產品品質、系統邊界與工程判斷的人。