2026年9月3日 星期四

AI-First Coding:如何讓 AI 更有效率地幫你寫 Code

 AI-First Coding:如何讓 AI 更有效率地幫你寫 Code

現在的軟體開發方式正在發生根本性的轉變。

以前我們思考的核心問題是:

「怎麼把程式碼寫得最漂亮、最容易讓人維護?」

但如果現在主要由 AI 協助,甚至直接產生 Code,問題應該改成:

「怎麼讓 AI 下一次修改這份 Code 時,需要理解的 Context 最少?」

這兩件事情並不完全相同。

對 AI Coding 而言,真正昂貴的不是 Code 行數,而是:

  • AI 需要讀多少 Code
  • AI 需要理解多少關聯
  • AI 需要跨多少檔案
  • AI 需要猜多少隱藏規則
  • 修改後需要重新測試多少功能
  • 一次修改產生多少 Diff

因此,AI-first 的程式設計原則應該從「程式碼漂亮」轉向:Low Context、Low Coupling、Small Diff、Small Regression Scope


一、AI Coding 最重要的不是「少寫 Code」,而是「少讀 Code」

人類工程師可以花半小時閱讀一個專案。
AI 則會受到 Context Window、Token 成本以及推理成本的影響。

舉例來說:

需求:修改 Landing Page 的 B12 流程步驟

做法 A(傳統寫法):

text
LandingPageSchema.php
    B02
    B03
    B04
    B06
    B07
    B08
    B09
    B10
    B11
    B12
    B13
    B14
    B15
    B16

AI 必須先理解大量無關的 Block。

更好的架構是讓 AI 可以快速定位:

text
B12 → b12Steps()

然後只理解:

PHP
protected static function b12Steps(): Block
{
    ...
}

這就是 AI-first 的核心:

不是讓 Code 最小,而是讓 AI 每次修改時需要理解的 Context 最小。


二、不要過度拆檔案

傳統工程習慣很容易變成:

text
LandingPage/
├── B02.php
├── B03.php
├── B04.php
├── B06.php
├── B07.php
├── B08.php
├── B09.php
├── B10.php
├── B11.php
├── B12.php
├── B13.php
├── B14.php
├── B15.php
└── B16.php

看起來很乾淨,但 AI 修改 B12 時可能需要:

找到 B12 → 找到 Registry → 找到引用 → 找到 Base Schema → 找到 Helper → 找到相關設定

Context 反而增加。

因此:不要為了「檔案看起來乾淨」而拆檔。

比較適合 AI 的方式通常是:

text
LandingPageSchema.php
├── Registry
├── B02
├── B03
├── B04
├── B06
├── ...
├── B16
└── Helpers

這種「單檔、功能區塊化」有一個很大的優點:
AI 可以透過命名快速定位功能,同時避免跨檔案理解。


三、功能邊界比檔案數量更重要

AI-first 架構不是「全部塞在一個檔案」。

真正的原則是:一個功能應該有清楚的邏輯邊界。

例如:

PHP
protected static function b12Steps(): Block

就是非常好的 AI 定位點。

AI 收到:

B12 的步驟標題限制改成 12 字。

可以直接定位:

text
b12Steps() → 步驟標題 → maxLength()

而不是重新理解整個 CMS Builder。

因此,命名本身就是 AI 的 Navigation System


四、不要讓 AI 猜架構

AI 最容易出錯的情況不是 Code 寫錯,而是它不知道你的專案規則。

例如你的專案可能有:

  • SharedFields
  • BlockRegistry
  • BaseModel
  • HasTranslatable
  • Permission Convention
  • API Transformer
  • Cache Convention

如果沒有規則,AI 很容易自己發明:

NewHelper、NewService、NewTrait、NewRepository、NewBaseClass

最後變成:

原本 1 個檔案 → AI 新增 5 個檔案 → 跨檔案依賴增加 → Token 增加 → 維護成本增加

所以 AI Coding 必須有一個非常重要的規則:

Reuse Before Create

先搜尋現有:

Helper、Service、Trait、SharedField、Component、Repository、Enum、Transformer

確認不存在之後,才允許新增。


五、AI 修改 Code 時,Diff 必須最小化

這是 AI Coding 最重要的規則之一。

不要要求 AI:

「順便幫我重構這個檔案。」

除非你真的要重構。

應該要求:

「只修改造成這個問題所必要的程式碼,不要進行其他重構。」

因為 AI 很容易做:

需求:修改 B12 標題長度

AI 實際行為:

  • 重構 B12
  • 抽出 Helper
  • 修改命名
  • 整理 imports
  • 調整其他 Block
  • 順便最佳化 Registry

最後你得到的不是 +1 行,而是 +80 / -120。

這會直接增加 Review 成本、Token 成本、Bug 風險、Regression Scope。

因此應該建立:Minimal Diff Principle


六、不要為了 AI 未來好維護,現在就做大重構

這是非常重要的原則。

例如目前 B02~B16 已經功能正常、測試完成、Production 穩定。

這時候發現:

「如果拆成多個檔案,AI 以後可能比較好維護。」

不代表現在就應該重構。

因為:重構 → 整體重新測試 → 增加 Regression Risk → 增加開發時間

如果沒有實際需求,收益可能非常低。

更好的方式是:

現在維持現狀 → 下一次修改 B12 時順手改善 B12 → 只測 B12

這叫 Incremental Refactoring,而不是一次性大重構。


七、把「修改範圍」直接告訴 AI

一個好的 AI Prompt 不應該只有:

「幫我修 B12。」

應該明確指定:

text
修改範圍:
- 僅修改 LandingPageSchema::b12Steps()
- 不修改其他 Block
- 不新增檔案
- 不新增 Helper
- 不修改 SharedFields
- 不修改資料庫
- 不修改 API
- 不修改既有資料結構

這會大幅降低 AI 的探索範圍。


八、推薦使用「Think → Locate → Modify → Verify」

不要叫 AI 一開始就寫 Code。

推薦固定使用:

  1. Think
  2. Locate
  3. Modify
  4. Verify

Prompt 範例:

text
在修改 Code 前,先執行以下流程:

1. 分析需求的真正原因,不要立即修改。
2. 找出實際負責此功能的 Entry Point。
3. 找出最小必要修改範圍。
4. 優先使用現有的 Helper、Service、Component 與 Convention。
5. 不要建立新的抽象,除非現有架構無法合理支援。
6. 不要修改需求範圍以外的 Code。
7. 不要順便重構、重新命名或格式化無關程式碼。

修改完成後說明:
- 修改了哪個檔案
- 修改了哪個方法
- 為什麼需要修改
- 是否影響其他功能
- 建議測試範圍

核心原則:Small Context → Small Diff → Small Test Scope


九、讓 AI 優先搜尋,而不是閱讀整個專案

AI 最有效率的流程不是:

讀整個專案 → 理解全部架構 → 開始修改

而是:

需求 → 搜尋關鍵字 → 找到 Entry Point → 讀附近 Code → 追必要 Dependency → 修改

例如修改 B12:

先搜尋 b12Steps,再搜尋 steps,最後只讀 LandingPageSchema 與 SharedFields 真正需要的部分。

因此你的 Prompt 可以要求:

text
請採用「由需求反向定位」的方式處理:

1. 先搜尋與需求直接相關的 Class / Method / Field。
2. 找到 Entry Point 後,只追蹤完成需求所必要的 Dependency。
3. 不要為了理解整個專案而讀取無關檔案。
4. 優先使用現有架構。
5. 找不到必要資訊時再擴大搜尋範圍。

目標不是理解整個專案,而是以最小 Context 完成正確修改。

十、Prompt 最重要的不是「告訴 AI 怎麼寫」,而是「告訴 AI 不要做什麼」

這是一個非常重要的觀念。

一般 Prompt:

幫我修改 B12。

AI 有非常大的自由度。

好的 Prompt:

text
只修改 B12。

禁止:
- 修改其他 Block
- 新增檔案
- 新增 Service
- 新增 Helper
- 修改 DB
- 修改 API
- 重構現有 Code
- 修改命名
- 修改無關格式

這叫 Negative Constraints

在 AI Coding 裡面,限制條件往往比需求描述更重要。


十一、建立「AI Coding Contract」

可以把整個專案的規則濃縮成一份 AI-CODING-RULES.md:

Markdown
# AI Coding Rules

## 1. Core Principle
Think Before Code.  
目標不是產生最多 Code,而是以最小 Context、最小 Diff 完成需求。

## 2. Locate Before Modify
修改前必須先找到:
- Entry Point
- 實際負責功能的 Method
- 必要 Dependency
- 現有可重用元件

禁止未定位就直接修改。

## 3. Reuse Before Create
優先使用:
- Existing Helper
- Existing Service
- Existing Trait
- Existing Component
- Existing Convention

除非現有架構無法合理支援,否則不要新增抽象。

## 4. Minimal Diff
只修改完成需求所必要的 Code。

禁止:
- 順便重構
- 順便重新命名
- 順便格式化
- 修改無關功能
- 修改其他 Module

## 5. Minimal Context
不要閱讀整個專案。  
採用:Search → Locate → Read Relevant Context → Modify  
只有必要時才擴大 Context。

## 6. File Structure
不要為了理論上的 Clean Architecture 過度拆檔。  
優先考慮:Feature Boundary > File Count  
功能相關的 Schema、Helper 可以在同一個檔案內保持集中。

## 7. No Speculative Architecture
禁止因為「未來可能需要」而新增:
Service、Repository、Trait、Interface、Abstract Class、Helper  
除非目前需求已經證明需要。

## 8. Regression Scope
每次修改都應該盡可能縮小測試範圍。  
修改單一 Block → 優先測試該 Block。  
修改 SharedFields → 才需要測試所有使用該 SharedFields 的功能。

## 9. Refactoring Policy
不要因為 Code 不夠漂亮就主動重構。  
只有以下情況才進行重構:
- 已經影響目前需求
- 已經造成重複問題
- 已經造成維護問題
- 使用者明確要求重構

## 10. Final Response
完成修改後,只需要回答:
- 修改檔案
- 修改位置
- 修改原因
- 影響範圍
- 測試建議

不要描述與本次需求無關的架構。

十二、真正有效率的 AI Coding Prompt

最後,可以把日常開發 Prompt 簡化成這個:

text
AI Coding Task

Goal
[描述我要完成什麼]

Scope
只允許修改:
- [檔案 / Class / Method]

Constraints
- 不修改需求範圍以外的 Code
- 不新增檔案,除非確實必要
- 優先使用現有 Helper / Service / Component
- 不進行額外重構
- 不重新命名無關 Code
- 不修改 DB / API / Architecture,除非需求明確要求

Process
1. 先分析 Root Cause。
2. 找出 Entry Point。
3. 找出最小修改範圍。
4. 確認是否存在可重用的既有實作。
5. 執行最小修改。
6. 檢查是否產生不必要 Diff。
7. 說明需要測試的最小範圍。

Output
完成後只回報:
- Root Cause
- Modified Files
- Modified Methods
- What Changed
- Test Scope

核心原則:Do not optimize the architecture. Optimize the change.


十三、AI-first 的真正目標

最後可以把整套方法濃縮成一個公式:

AI 開發效率 = 正確率 × Context 效率 × 修改精準度 × 測試範圍控制

而不是:

AI 開發效率 = Code 寫得多快

所以你真正應該追求的是:

需求 → 最小 Context → 最小理解範圍 → 最小 Diff → 最小 Regression Scope

這也是為什麼有時候:

一個 800 行、但功能邊界清楚的檔案,可能比 15 個 50 行的小檔案更適合 AI 維護。

因為 AI 不需要一直跳來跳去。


結論

如果未來幾乎全部 Code 都由 AI 協助完成,那麼我們其實正在從:

Human-readable Architecture

逐漸轉向:

AI-navigable Architecture

好的 AI Code 不一定是最符合傳統 Clean Architecture 的 Code。

而是:

AI 能快速找到、快速理解、快速修改,而且每次修改只影響最小範圍的 Code。

因此真正值得建立的不是「讓 AI 寫更多 Code 的 Prompt」,而是:

讓 AI 少讀 Code、少猜東西、少改 Code、少產生 Diff、少需要重新測試。

這才是 AI-first Software Development。

2026年9月1日 星期二

AI-Assisted Software Engineering 從 SDD、AI Workflow 到 Architecture Governance

 

AI-Assisted Software Engineering

從 SDD、AI Workflow 到 Architecture Governance

AI 負責速度,工程師負責方向;Spec 負責約束,Architecture 負責品質。


一、背景:AI Coding 解決了什麼,又帶來了什麼問題?

生成式 AI 出現之後,軟體開發效率有了非常明顯的提升。

現在透過 AI,可以快速完成:

  • Controller

  • Service

  • Model

  • Migration

  • API

  • Vue Component

  • Filament Resource

  • Validation

  • Test

  • Refactoring

  • Debugging

以前可能需要幾個小時完成的工作,現在幾十分鐘甚至幾分鐘就能完成。

但當 AI 開始大量參與實際專案開發後,我發現一個很重要的問題:

AI 最大的風險不是寫不出 Code,而是寫太多「看起來合理」的 Code。

例如:

  • 已經存在的 Service,AI 又建立一個新的

  • 原本應該放在 Service 的邏輯被塞進 Controller

  • 為了修一個問題順便重構整個模組

  • 新增一套與既有 API 不一致的 Response Format

  • 修改功能時忽略 Permission

  • 為了符合 AI 自己熟悉的 Pattern,改變原本專案架構

  • 解決 A 問題後,引入 B、C、D 問題

  • 每次修改都合理,但長期造成 Architecture Fragmentation

所以我開始重新思考:

如果 AI 已經可以高速產生 Code,那工程師真正需要控制的是什麼?

我的答案是:

Specification、Workflow、Architecture。

因此,我逐漸建立了一套自己的 AI 輔助軟體工程流程:

                    AI-Assisted
                 Software Engineering
                         │
        ┌────────────────┼────────────────┐
        ↓                ↓                ↓
       SDD          AI Workflow     Architecture
        │                │                │
     定義問題          約束 AI           驗證結果
        │                │                │
        └────────────────┼────────────────┘
                         ↓
                  Controlled AI
                   Development

二、核心理念:我不把 AI 當 Senior Developer

我的 AI 開發方式有一個非常明確的定位:

我把 AI 當成一個速度非常快的 Junior Engineer。

AI 可以負責:

  • 搜尋

  • 分析

  • 撰寫 Code

  • Debug

  • Refactoring

  • Test

  • 文件整理

但不應該自行決定:

  • 核心 Architecture

  • Business Rule

  • Database Model

  • 大型 Refactoring

  • 技術選型

  • 需求邊界

原因很簡單。

AI 很擅長回答:

「這段 Code 怎麼寫?」

但工程師真正需要回答的是:

「這段 Code 應該放在哪裡?」

以及:

「我們真的需要這段 Code 嗎?」

這兩個問題,本質上是不同的。


三、SDD:Spec Before Code

我將第一個核心概念定義為:

Spec Before Code

也就是在讓 AI 修改 Code 之前,先把問題定義清楚。

傳統 AI Coding 通常是:

需求
 ↓
Prompt
 ↓
AI 寫 Code
 ↓
發現問題
 ↓
再叫 AI 修改
 ↓
繼續累積修改

而我的流程是:

需求
 ↓
Specification
 ↓
Existing Architecture Analysis
 ↓
Call Chain
 ↓
Data Flow
 ↓
Constraints
 ↓
Implementation Plan
 ↓
Implementation
 ↓
Verification

四、我的 SDD Template

我會讓 Specification 至少包含以下區塊。

1. Goal

這次需求真正要解決什麼問題?

不是只描述「我要新增一個功能」,而是要說明:

為什麼需要這個功能?


2. Scope

明確定義這次修改的範圍。

例如:

  • Backend

  • API

  • Database

  • Frontend

  • Permission

  • Cache

  • Queue

同時標示哪些模組受到影響。


3. Non-goals

這是我認為非常重要、而且很容易被忽略的一部分。

除了告訴 AI:

「這次要做什麼。」

也必須告訴 AI:

「這次不要做什麼。」

例如:

## Non-goals

本次需求不包含:

- 不重構現有 Service 架構
- 不修改既有 API Response Format
- 不新增 Repository Layer
- 不修改既有 Permission Naming
- 不處理無關的 Technical Debt
- 不進行 Frontend Component 重構
- 不修改其他既有模組

這可以有效降低 AI 的過度設計。

因為 AI 很容易看到一個問題後順手說:

「既然這裡可以改善,我一起重構。」

但在實際專案中:

「可以改善」不代表「現在應該改善」。


五、Existing Architecture:先理解,再修改

AI 最常見的問題之一,是直接假設架構。

例如:

「這個專案應該使用 Repository Pattern。」

然後 AI 開始新增:

Controller
 ↓
Service
 ↓
Repository
 ↓
Model

但實際專案可能根本沒有 Repository Layer。

這時候 AI 雖然寫出來的 Code 沒有錯,但它已經開始改變 Architecture。

所以我要求 AI:

先找現有架構,不要自己假設架構。

例如 Laravel 專案:

Route
 ↓
Controller
 ↓
Service
 ↓
Model
 ↓
Database

如果既有架構就是這樣,就優先延續既有模式。


六、Call Chain:不要猜,直接追

在大型專案中,我非常重視 Call Chain。

例如一個 API:

POST /api/quest/select
        ↓
QuestController
        ↓
checkEligibility()
        ↓
QuestService
        ↓
Business Rule
        ↓
Database

如果直接看到 Controller 就開始修改,很容易判斷錯誤。

因此我會要求 AI:

1. 找 Route
2. 找 Controller
3. 找實際呼叫的方法
4. 追 Service
5. 找 Model
6. 找 Database
7. 找相關 Permission
8. 找 Frontend 呼叫位置
9. 找 Test

先回答:

「這個功能實際上是怎麼運作的?」

再開始 Coding。


七、Data Flow:確認資料怎麼流動

除了 Call Chain,我也會確認 Data Flow。

例如:

Frontend
   ↓
Request
   ↓
Validation
   ↓
Controller
   ↓
Service
   ↓
Model
   ↓
Database
   ↓
Resource / Transformer
   ↓
API Response
   ↓
Frontend

這可以避免只修改 Backend,卻忘記:

  • API Response

  • Frontend Payload

  • Validation

  • Transformer

  • Database

  • Cache

等相關位置。

因此 SDD 不只是「需求文件」,它其實也是:

AI 修改系統前的 Context Boundary。


八、Constraints:告訴 AI 哪些事情不能做

AI 如果沒有約束,很容易產生過度設計。

所以我會明確設定:

Constraints

- 優先使用既有 Service
- 不建立重複功能
- 不進行無關重構
- 不修改既有 API Contract
- 不改變既有 Business Rule
- 保持既有 Permission Naming
- 修改範圍保持最小
- 如果現有架構不足,先提出方案,不直接重構

這裡的核心原則是:

AI 可以提出方案,但不能默認擴大 Scope。


九、AI Workflow:把開發流程標準化

建立 SDD 後,我再將 AI 的工作分成幾個階段。

Phase 1:Understand

AI 只負責理解。

Search
 ↓
Read
 ↓
Trace
 ↓
Understand

這個階段不修改 Code。


Phase 2:Analyze

分析:

Current Architecture
        ↓
Problem
        ↓
Root Cause
        ↓
Impact
        ↓
Possible Solutions

重點是找 Root Cause,而不是只處理表面症狀。


Phase 3:Propose

AI 提出方案。

例如:

Option A

修改既有 Service。

Option B

建立新的 Service。

Option C

重構整個模組。

然後由工程師判斷哪個方案適合目前 Architecture。


Phase 4:Implement

方案確認後,才讓 AI 實作。

此時 AI 就可以發揮最大的效率:

  • Generate Code

  • Generate Test

  • Modify Files

  • Refactor

  • Debug


Phase 5:Verify

完成後再次檢查:

Functional
 ↓
Regression
 ↓
API
 ↓
Database
 ↓
Permission
 ↓
Performance

最後才算完成。


十、最小修改原則

AI 開發中,我非常重視:

Minimal Change

例如今天只是修正一個 Business Rule。

理想情況:

Controller
 ↓
Existing Service
 ↓
修正 Business Rule

而不是:

Controller
 ↓
重構 Service
 ↓
新增 Repository
 ↓
修改 Model
 ↓
修改 API
 ↓
重寫 Frontend

即使後者「架構看起來更漂亮」,也不代表它是正確的工程決策。

因為每增加一個修改點,就增加一個 Regression Risk。

所以我的原則是:

先解決問題,再考慮重構。


十一、Architecture Check:AI 寫完不代表完成

我認為 AI Coding 最大的缺口之一,就是:

AI 可以確認 Code 能跑,但不一定能確認 Architecture 是否健康。

因此我會另外做 Architecture Check。


十二、Level 1:Daily Architecture Checklist

每次 AI Coding 完成後,可以快速檢查:

#Check問題
1Scope是否只修改需求必要範圍?
2Duplication是否新增了既有功能的第二套實作?
3ResponsibilityController / Service / Model 職責是否清楚?
4Call Chain是否確認實際呼叫鏈後才修改?
5Data FlowRequest → API → DB → Response 是否一致?
6Permission新功能是否同步檢查權限?
7Performance是否引入 N+1、重複 Query 或大量資料載入?
8Regression是否確認既有功能沒有受到影響?

這個 Checklist 的目的不是取代 Code Review。

而是建立一個最低限度的:

Architecture Quality Gate


十三、Level 2:Module Architecture Review

當修改的是重要模組,就不只做快速 Check。

會完整追:

API
 ↓
Controller
 ↓
Service
 ↓
Model
 ↓
Database

再確認:

Frontend
Permission
Cache
Queue
Test

例如一個新的 API,不只是確認 Controller 是否正確,而是確認:

Request
 ↓
Validation
 ↓
Business Logic
 ↓
Database
 ↓
Transformer
 ↓
Response
 ↓
Frontend

整條鏈是否一致。


十四、Level 3:Full Architecture Audit

大型專案或累積大量 AI 修改後,可以進行完整架構健檢。

我會將它分成:

                Architecture Audit
                       │
       ┌───────────────┼───────────────┐
       ↓               ↓               ↓
      API              DB              Auth
       │               │               │
       ↓               ↓               ↓
   Frontend       Performance       Permission
       │               │               │
       └───────────────┼───────────────┘
                       ↓
                 Technical Debt

最後不是單純列出「有問題」。

而是進一步分類:

Critical

可能影響資料正確性、安全性或核心功能。

High

可能造成重大維護成本或效能問題。

Medium

可以改善,但短期不一定需要處理。

Low

Code Quality 或未來可優化項目。

這可以避免 Architecture Review 最後變成:

「看到什麼就全部重構。」


十五、實際案例一:AI 建立重複 Service

Problem

需求是新增一個翻譯匯入功能。

AI 分析後提出:

建立新的 TranslationService

程式本身沒有明顯錯誤。

甚至測試也可以通過。

但進行 Architecture Check 後發現:

Existing TranslationService
        +
New TranslationService
        ↓
相同責任開始分散

問題不在 Code 能不能執行。

問題在:

系統開始出現兩個相同責任的入口。


修正

重新追蹤既有架構後,發現原本的 Translation Service 已經負責相關流程。

因此最後改成:

需求
 ↓
尋找 Existing Service
 ↓
確認既有責任
 ↓
擴充 Existing Service
 ↓
維持單一責任入口

這個案例讓我更加確定:

AI 產生的方案不一定是錯的,但不一定適合既有 Architecture。


十六、實際案例二:修問題前先追 Call Chain

另一類常見問題是:

表面看到的錯誤位置,不一定是真正的問題位置。

例如 API:

POST /api/xxx
 ↓
Controller
 ↓
checkEligibility()
 ↓
Service
 ↓
Business Rule

如果直接看到 Controller 就修改,很容易把 Business Logic 放到錯誤的位置。

因此我會先追完整 Call Chain。

最後可能發現:

Controller
    ↓
只負責 Request / Response

Service
    ↓
真正負責 Business Rule

所以正確的修改方式不是:

「Controller 有問題 → 修改 Controller」

而是:

「找到真正的責任邊界 → 在正確的 Layer 修改。」

這也是我在 AI Coding 中非常重視的觀念。


十七、這套流程帶來的改變

建立這套方法後,我認為 AI Coding 的工作模式產生了一個很大的變化。

以前:

工程師
 ↓
寫 Code

現在:

工程師
 ↓
定義問題
 ↓
定義 Architecture
 ↓
制定 Constraints
 ↓
指揮 AI
 ↓
Review
 ↓
Verification

工程師花在「手寫 Code」的比例下降。

但花在:

  • Requirement Analysis

  • Architecture

  • Debugging

  • Code Review

  • System Design

  • Quality Control

的比例反而提高。

我認為這並不是工程師價值下降。

反而是工程師的工作開始往更高層次移動。


十八、我對 AI Engineering 的理解

我認為 AI 時代的工程能力,可以分成三層。

第一層:AI Coding

知道怎麼讓 AI 寫 Code。

Prompt
 ↓
Code

這是最基本的能力。


第二層:AI-Assisted Development

知道怎麼把 AI 放進日常開發流程。

Requirement
 ↓
AI Analysis
 ↓
Implementation
 ↓
Test
 ↓
Review

效率會比單純 Coding 高很多。


第三層:AI Engineering

建立一套可以控制 AI 的工程方法。

Specification
       ↓
AI Workflow
       ↓
Implementation
       ↓
Verification
       ↓
Architecture Governance

這時候 AI 已經不是單純的 Coding Tool。

而是:

Software Engineering 的一部分。


十九、我的三層方法論

最後,我把整套方法濃縮成三個核心。

① SDD — Define

回答:

我們到底要做什麼?

透過:

  • Goal

  • Scope

  • Non-goals

  • Existing Architecture

  • Call Chain

  • Data Flow

  • Constraints

  • Acceptance Criteria

定義問題。


② AI Workflow — Control

回答:

AI 應該怎麼做?

透過:

Understand
 ↓
Analyze
 ↓
Propose
 ↓
Implement
 ↓
Verify

控制 AI 的行為。


③ Architecture Check — Govern

回答:

AI 做完之後,系統還健康嗎?

透過:

Daily Check
 ↓
Module Review
 ↓
Full Architecture Audit

持續控制 Architecture Quality。


二十、結語

我認為 AI Coding 真正帶來的改變,不是:

「工程師不用寫 Code 了。」

而是:

「工程師需要把更多注意力放在 Code 以外的工程問題。」

AI 可以讓 Code 產生速度提高十倍。

但如果沒有 Specification、Workflow 與 Architecture Governance,

那麼 Technical Debt 也可能累積得更快。

所以我現在對 AI 輔助開發的核心理念是:

Think Before Code.

Spec Before AI.

Minimal Change Before Refactoring.

Architecture Before Scale.

AI 負責速度。

SDD 負責方向。

Workflow 負責控制。

Architecture Check 負責品質。

而工程師真正的價值,是把這四件事情串起來,讓 AI 不只是「會寫 Code」,而是能夠在既有軟體工程規範下,持續產生正確、可維護、可演進的系統

2026年8月15日 星期六

AI Review Flow:當 AI 寫 Code 的速度超過人類 Review 的速度

 

AI Review Flow:當 AI 寫 Code 的速度超過人類 Review 的速度

不要讓 AI 只負責寫 Code,而是讓 AI 參與整個 Software Engineering 品質循環。

過去幾年,AI Coding 工具快速改變了軟體開發的方式。

以前,一個工程師可能需要花半天時間完成一個 CRUD 功能:建立 Migration、Model、Controller、Validation、API Resource,再補上 Admin 後台的 Form 與 Table。

現在,這些工作可能只需要幾分鐘。

AI 可以快速產生:

  • Migration
  • Model
  • Service
  • Controller
  • API Resource
  • Validation
  • Filament Resource
  • Form
  • Table
  • Test

甚至可以直接依照既有專案結構,模仿現有程式碼完成一整套功能。

這看起來是一件非常美好的事情。

但當程式碼產生速度提升之後,一個新的問題也開始浮現:

AI 產生程式碼的速度,已經遠遠超過人類逐行閱讀與驗證程式碼的速度。

於是,軟體開發真正的瓶頸開始從「Coding」轉移到另一件事情:

Verification

我們真正需要問的,已經不只是:

AI 能不能幫我寫 Code?

而是:

AI 寫完之後,我怎麼知道它寫對了?

這也是我認為 AI 時代非常重要的一個工程概念:

AI Review Flow


一、AI 最大的問題不是不會寫,而是太容易「寫得像對的」

很多人第一次使用 AI Coding 工具時,最容易被它的「完成度」驚艷。

你只要描述:

幫我新增一個 CMS Block。

AI 很快就可以產生一大堆程式碼。

Migration 有了。

Model 有了。

Enum 有了。

Filament Form 有了。

API Resource 有了。

Controller 也有了。

而且程式碼通常看起來非常合理。

這正是 AI 最危險的地方。

AI 最危險的錯誤,通常不是:

Parse error

這種錯誤很容易被發現。

真正危險的是:

程式碼完全合法,而且看起來非常漂亮,但商業邏輯是錯的。

例如:

if ($block->is_active) {
    return $block;
}

這段程式碼本身完全沒有問題。

但如果真正的商業規則是:

is_active = true
AND page.is_published = true
AND publish_at <= now()
AND expired_at > now()

那麼這段程式碼就是錯的。

問題不是 PHP。

不是 Laravel。

也不是 Coding Style。

而是:

AI 沒有完整理解 Specification。

所以 AI Code Review 最重要的事情,不應該只是檢查:

「這段 Code 寫得好不好?」

而應該檢查:

「這段 Code 是否真的符合規格?」

這兩件事情,看起來很接近,但其實完全不同。


二、AI Coding 時代,真正的瓶頸正在從 Coding 轉移到 Verification

傳統軟體開發流程通常是:

需求
 ↓
分析
 ↓
Coding
 ↓
Code Review
 ↓
Test
 ↓
Deploy

在這個流程裡,Coding 是很大的成本。

因此工程師會想辦法提高 Coding 效率。

例如:

  • IDE
  • Framework
  • Package
  • Code Generator
  • ORM
  • Admin Generator
  • AI Coding

但 AI 出現之後,Coding 的成本開始大幅下降。

原本需要兩個小時的 CRUD,可能變成十五分鐘。

原本需要一天的後台功能,可能幾個小時就完成。

問題是:

Review 沒有同步變快。

人類還是只有兩隻眼睛。

還是需要理解:

  • 這段程式在做什麼?
  • 為什麼這樣做?
  • 是否符合需求?
  • 有沒有漏掉條件?
  • 有沒有破壞既有功能?
  • 有沒有安全問題?
  • 有沒有資料一致性問題?

於是就產生了一個新的矛盾:

Code Generation
      ↑
      │
      │  AI:非常快
      │
      ↓
Verification
      │
      │  Human:有限速度
      ↓

如果我們只是一直提高 AI 的 Coding 能力,最後很可能會發現:

Code 寫得越快,Review 反而成為最大的瓶頸。

所以 AI 時代真正需要升級的,不只是 Coding。

而是整個 Review Flow。


三、完整的 AI Review Flow

一個比較完整的 AI Software Engineering 流程,可以變成:

需求
 ↓
Specification
 ↓
AI Implementation
 ↓
AI Self Review
 ↓
Static Analysis / Test
 ↓
AI Code Review
 ↓
Human Review
 ↓
修正
 ↓
Regression Test
 ↓
Merge

這裡最大的改變是:

AI 不再只是 Developer,而同時成為 Reviewer。

但這裡有一個非常重要的前提。

不要讓同一個 AI 同時當 Developer 和 Reviewer

如果我們叫 AI:

幫我完成這個功能。

AI 寫完之後再說:

幫我 Review 剛才的程式碼。

它很容易出現一個問題:

AI 會用自己剛才建立的假設,去驗證自己剛才建立的實作。

如果第一步理解錯需求,第二步很可能只是把錯誤合理化。

因此更好的做法,是把角色分開。

Developer AI

負責:

  • 理解 Specification
  • 建立實作
  • 修改程式碼
  • 撰寫 Test

Reviewer AI

負責:

  • 重新閱讀 Specification
  • 檢查 Implementation
  • 找出規格與實作的差異
  • 找出遺漏的 Business Rules
  • 找出 Edge Cases
  • 找出 Security 與 Data Integrity 問題

也就是:

Developer AI
     ↓
Implementation
     ↓
Reviewer AI
     ↓
Specification
     ↓
Gap Analysis

Reviewer 的核心不是:

「這份 Code 看起來不錯。」

而是:

「Specification 說了什麼,而 Implementation 做了什麼?」


四、Specification First:AI Review 的第一原則

AI Review Flow 的核心其實不是 Prompt。

而是:

Specification First

如果沒有清楚的 Specification,AI Review 很容易變成:

AI
 ↓
自己理解需求
 ↓
自己寫 Code
 ↓
自己 Review
 ↓
自己說沒問題

最後得到:

LGTM。

但問題是:

誰決定它真的符合需求?

所以在 AI 開始寫 Code 之前,應該先把規格定義清楚。

一份基本 Specification 至少應該包含:

1. 功能目的

這個功能到底要解決什麼問題?

2. Data Model

需要哪些欄位?

哪些可以是 NULL

哪些有 Default?

欄位之間有什麼關係?

3. Business Rules

什麼情況可以建立?

什麼情況可以修改?

什麼情況必須拒絕?

4. Permission

誰可以看到?

誰可以修改?

誰可以刪除?

5. API Behavior

API 應該回傳什麼?

哪些資料不能回傳?

哪些條件下資料才可以出現在 API?

6. Edge Cases

停用怎麼辦?

刪除怎麼辦?

沒有資料怎麼辦?

多語系缺少翻譯怎麼辦?

資料已經存在怎麼辦?


五、Review 不應該從 Coding Style 開始

很多 AI Code Review 最後會變成:

  • Method 太長
  • Variable 命名可以更好
  • 可以抽 Service
  • 可以使用 Collection
  • 可以重構
  • 可以減少重複程式碼

這些不是沒有價值。

但它們應該放在後面。

一個更合理的 Review 優先順序應該是:

1. Correctness

程式邏輯是否正確?

2. Security

是否有:

  • 權限漏洞
  • 資料洩漏
  • SQL Injection
  • Mass Assignment
  • 未授權資料存取

3. Data Integrity

資料是否可能:

  • 被錯誤更新
  • 被錯誤刪除
  • 產生不一致
  • 遺失關聯
  • 產生重複資料

4. Business Rules

Specification 裡面的規則是否全部實現?

5. Regression

是否破壞既有功能?

6. Performance

是否產生:

  • N+1 Query
  • 重複 Query
  • 不必要的資料載入
  • 不必要的 API Request

7. Code Quality

最後才是:

  • Naming
  • Structure
  • Readability
  • Maintainability
  • Refactoring

簡單說:

先確認「對不對」,再討論「漂不漂亮」。


六、不同風險的程式碼,不應該使用相同的 Review 強度

AI 並不是不能處理高風險程式碼。

問題是:

高風險程式碼不能只依賴 AI。

例如一般 CRUD:

建立資料
修改資料
列表
查詢

這些通常屬於相對低風險的工作。

AI 可以大量協助。

但以下功能就完全不同:

權限
金流
訂單狀態
資料隔離
多租戶
交易一致性
刪除邏輯
API 資料暴露

這些都是高風險區域。

AI 可以幫忙:

  • 分析
  • 找漏洞
  • 寫 Test
  • 做 Review
  • 提出風險

但是:

人類必須是最後決策者。

因此我認為 AI 時代非常重要的一個原則就是:

AI 負責加速,人類負責定義邊界。


七、用 Laravel CMS 看 AI Review 最容易發現什麼

假設今天我們要新增一個 CMS Block:

GroupCompany
 └── Blocks
      ├── Text Image
      ├── Card Grid
      └── Contact

AI 很快就可以建立:

Migration
Model
Enum
Filament Resource
Form
Table
API Resource
Controller

看起來非常完整。

但真正需要 Review 的問題可能是:

Block 停用之後會發生什麼?

假設資料結構是:

Page
 └── Blocks
      ├── Block A
      ├── Block B
      └── Block C

現在:

Block B
is_active = false

我們真正想要的行為是:

Block B
 ↓
保留資料
 ↓
後台仍然存在
 ↓
前台不顯示

而不是:

Block B
 ↓
被刪除

這兩個行為在技術上都完全可以被寫出來。

甚至兩段 Code 都可能沒有任何 Syntax Error。

所以:

單純檢查 Code 是抓不到這個問題的。

必須回到 Specification:

「停用」和「刪除」是不是兩種不同的操作?

如果答案是 Yes,那麼 Reviewer AI 就應該把它列為重要檢查項目。

這就是 AI Review 真正有價值的地方。


八、真正有價值的 Review 是 Gap Analysis

因此,我現在會比較不建議只對 AI 說:

Review this code.

因為這句話太模糊。

AI 很容易把任務理解成:

Code
 ↓
Style
 ↓
Best Practice
 ↓
Refactoring

更好的指令應該是:

Compare the implementation against the specification and identify any behavioral gaps.

也就是:

Specification
      ↓
      ↓
Implementation
      ↓
      ↓
Gap Analysis

Review 的重點變成:

  • Specification 有要求什麼?
  • Implementation 實際做了什麼?
  • 哪些規則沒有實作?
  • 哪些 Edge Case 沒處理?
  • 哪些行為和規格不同?
  • 哪些地方存在額外的、不被允許的行為?

這才是真正有價值的 Code Review。


九、AI Review 應該形成一個閉環

一個成熟的 AI Workflow 不應該是:

AI 寫完
 ↓
AI 說 OK
 ↓
結束

而應該是一個循環:

Specification
      ↓
AI Developer
      ↓
AI Self Review
      ↓
Test / Lint / QA
      ↓
AI Reviewer
      ↓
   PASS / FAIL
      ↓
   ┌──┴──┐
   │     │
 PASS   FAIL
   │     │
   │     ↓
   │   Fix
   │     │
   │     ↓
   │   Review
   │     │
   └─────┘
      ↓
Human Approval
      ↓
Merge

這裡最重要的是:

Review 不是一次性的動作,而是一個循環。


十、Fail Fast,Recover Faster

AI 時代有一句話反而更加重要:

Fail Fast, Recover Faster.

不要追求 AI 第一次就產生 100% 正確的 Code。

因為這不現實。

真正應該追求的是:

讓錯誤越早被發現。

因為錯誤被發現的時間越晚,修正成本通常越高。

可以把它分成五個 Level:

Level發現位置修正成本
Level 1Specification 發現需求矛盾最低
Level 2AI Review 發現邏輯問題
Level 3Automated Test 發現錯誤
Level 4Human Code Review 發現問題
Level 5Production 才發現最高

例如:

如果 Specification 就發現:

停用到底是隱藏還是刪除?

這時候修改成本幾乎是零。

但如果系統已經上線,管理員停用資料後發現資料真的被刪掉:

這時候就可能涉及:

  • 資料恢復
  • 使用者影響
  • API 錯誤
  • Production Incident
  • 客戶問題
  • 信任成本

所以:

好的 AI Workflow,不是讓 AI 永遠不犯錯,而是讓錯誤盡可能早被發現。


十一、AI Review 不是要取代 Human Review

AI Review 最容易被誤解成:

既然 AI 可以 Review,那是不是以後不需要工程師 Code Review?

我認為答案是否定的。

真正合理的架構應該是:

AI
 ↓
大量自動檢查
 ↓
篩掉明顯問題
 ↓
Human
 ↓
專注高價值決策

AI 很適合處理:

  • Naming
  • Formatting
  • CRUD Completeness
  • Nullable
  • Basic Query
  • 重複程式碼
  • 明顯的 Edge Case
  • 基本 Security Check
  • Test Coverage

而人類應該把時間留給:

  • Architecture
  • Business Logic
  • Security Boundary
  • Data Integrity
  • Trade-off
  • Product Decision
  • 系統長期維護成本

換句話說:

AI 不應該取代 Code Review,而應該提高 Code Review 的品質。


十二、真正重要的不是 Prompt Engineering,而是 Workflow Engineering

現在很多人還在研究:

哪一種 Prompt 可以讓 AI 寫出更好的 Code?

這當然有價值。

但如果只關注 Prompt,容易忽略更重要的問題:

AI 到底應該被放在整個 Software Engineering 流程的哪裡?

成熟的 AI 開發流程不應該是:

Human
 ↓
Prompt
 ↓
AI
 ↓
Code

而應該是:

Human
 ↓
Specification
 ↓
AI Implementation
 ↓
AI Review
 ↓
Automated Verification
 ↓
Human Review
 ↓
Merge

這兩種流程最大的差別是:

第一種把 AI 當成:

Code Generator

第二種把 AI 當成:

Software Engineering Team 的一個角色。

這是一個非常重要的轉變。


十三、AI Engineering 的核心其實是「角色分工」

當 AI 越來越強,我們不一定需要一個「全能 AI」。

反而可以把工作拆成不同角色:

Product / Human
      ↓
Specification
      ↓
┌─────────────────┐
│ Developer AI    │
│ 負責實作         │
└────────┬────────┘
         ↓
┌─────────────────┐
│ Reviewer AI     │
│ 負責找問題       │
└────────┬────────┘
         ↓
┌─────────────────┐
│ Testing / QA    │
│ 負責驗證         │
└────────┬────────┘
         ↓
┌─────────────────┐
│ Human Engineer  │
│ 最終決策         │
└─────────────────┘

這種架構最大的優點是:

把「產生」和「判斷」分離。

AI 非常擅長產生大量候選方案。

但工程品質真正需要的是:

判斷哪一個方案符合需求、符合架構、符合安全邊界。

而這正是 Review Flow 存在的價值。


十四、AI 時代,工程師的價值正在改變

如果 AI 可以幫我們快速寫出 CRUD,那麼:

「我會不會寫 CRUD」

這件事情本身的價值就會下降。

但另外幾種能力反而會變得更加重要:

Requirement Analysis

能不能把模糊需求變成明確規格?

System Design

能不能決定資料模型與架構?

Business Logic

能不能理解真正的商業規則?

Risk Assessment

能不能知道哪些地方不能交給 AI 自動決策?

Verification

能不能設計有效的測試與驗證流程?

AI Orchestration

能不能讓多個 AI 工作角色協同完成任務?

因此 AI 並沒有讓 Software Engineer 變得不重要。

它只是讓「工程師真正重要的能力」重新排序。


十五、我認為 AI 時代最重要的工程原則

如果要把整個 AI Review Flow 濃縮成幾個原則,我會留下這五個:

1. Specification First

沒有規格,就沒有可靠的 Review。

2. AI Developer ≠ AI Reviewer

產生與驗證應該盡可能分離。

3. Review Specification,而不只是 Review Code

真正要檢查的是:

Requirement
     ↓
Specification
     ↓
Implementation

三者是否一致。

4. 高風險邏輯必須保留 Human Decision

權限、金流、資料一致性、資料隔離等核心邏輯,不應該完全自動化。

5. Fail Fast, Recover Faster

不要追求「AI 永遠不犯錯」。

應該追求:

錯誤越早被發現,修正成本越低。


十六、最後:AI Coding 的下一個戰場不是「寫得更快」

AI Coding 的第一階段,比的是:

誰的 AI 寫 Code 比較快?

第二階段可能會變成:

誰的 AI 寫 Code 比較完整?

但我認為真正成熟之後,競爭會變成:

誰能建立更可靠的 AI Software Engineering Workflow?

因為當 Code 產生速度提升 5 倍、10 倍甚至更高之後,最大的瓶頸就不再是 Coding。

而是:

Verification

你可以讓 AI 在幾分鐘內產生數千行程式碼。

但如果沒有可靠的驗證流程,那些 Code 只是:

高速產生的風險。

反過來,如果我們建立完整的 AI Review Flow:

Specification
      ↓
Implementation
      ↓
AI Review
      ↓
Automated Verification
      ↓
Human Review
      ↓
Decision

AI 就不只是幫我們:

寫更多 Code。

而是幫我們:

更快發現錯誤。

更早修正錯誤。

把人類從低價值的重複檢查中解放出來。

讓工程師把時間放在真正重要的架構、商業邏輯與決策上。

這才是我認為 AI 真正進入 Software Engineering 之後,最值得建立的開發模式。


AI Review Flow 簡易 Specification Template

如果要把這套方法真正放進日常開發,可以從一份非常簡單的 Specification 開始:

## 功能名稱
[功能名稱]

## 1. 功能目的
- 

## 2. Data Model
- 欄位:
- Nullable:
- Default:

## 3. Business Rules
- 建立條件:
- 修改條件:
- 拒絕條件:

## 4. Permission
- 可見:
- 可修改:
- 可刪除:

## 5. API Behavior
- 回傳內容:
- 不可回傳:

## 6. Edge Cases
- 停用:
- 刪除:
- 無資料:
- 多語系:
- 其他:

接著讓 Reviewer AI 執行:

請根據以下 Specification,
對目前的實作程式碼進行 Gap Analysis。

重點檢查:

1. 是否完整實現所有 Business Rules
2. Edge Cases 是否正確處理
3. 權限與資料暴露是否符合規格
4. 是否存在資料一致性問題
5. 是否存在安全性問題
6. 是否可能破壞既有功能
7. 是否存在不必要的行為

請明確列出:

- Specification 有要求,但 Implementation 缺失的項目
- Implementation 與 Specification 不一致的項目
- 潛在的 Security / Data Integrity 問題
- 建議修改方式

不要只評論 Coding Style,
優先檢查「行為是否正確」。

當這個流程開始固定下來之後,AI 就不再只是 IDE 裡面的一個「自動補全工具」。

它會逐漸成為整個 Software Engineering Workflow 裡的一個正式角色。

而這可能才是 AI Coding 真正成熟之後,工程團隊最大的改變。

不是 AI 取代工程師。

而是:

工程師開始設計一套能夠駕馭 AI 的工程系統。

2026年8月8日 星期六

Python 這麼熱門,為什麼我還是選 Laravel + Filament?

 

—— 從快速開發、Admin、權限管理到企業 CMS 的技術選型比較

近幾年 Python 的熱度非常高。

尤其 AI、Machine Learning、Data Science、LLM 與自動化工具快速發展之後,Python 幾乎成為許多工程師的第一選擇。

因此很自然會出現一個問題:

既然大家都在使用 Python,那麼 Web 後台、CMS、企業管理系統,是不是也應該全面改用 Python?

我的答案是:

不一定。

這不是因為 Python 不夠強。

恰恰相反,Python 在 AI、資料科學與 API Service 領域非常強。

真正需要比較的是:

Django / FastAPI 生態,與 Laravel + Filament,在特定類型的 Web 系統上,誰能用更低的成本完成需求並長期維護?

因此,這篇文章不討論「哪個語言比較好」,而是討論一個更實際的問題:

不同類型的專案,應該選擇什麼樣的 Web 技術棧?


一、先釐清:Python 並不是只有 Django

談 Python Web,最常見的兩條路線大概是:

Python
│
├── Django
│   └── Full-stack + ORM + Admin
│
└── FastAPI
    └── API-first + Type Hint + OpenAPI

兩者其實解決的是不同問題。

Django

Django 是完整的 Web Framework。

它包含:

  • ORM

  • Authentication

  • Authorization

  • Admin

  • Form

  • Routing

  • Middleware

  • Template

  • Migration

  • Cache

  • Session

其中 Django Admin 是它非常重要的一部分。

Django 官方本身就將 Admin 定位為可以快速建立模型管理介面的工具,而不是單純的「資料庫 CRUD 頁面」。(Django Admin)


FastAPI

FastAPI 的核心則更加偏向:

API
+
Type Hint
+
Validation
+
OpenAPI
+
Async

它非常適合:

  • REST API

  • Microservice

  • AI Service

  • Backend Service

  • API-first Architecture

FastAPI 的 Security / OAuth2 Scope 也可以與 OpenAPI 文件整合,這對 API-first 系統非常方便。(FastAPI Security)

因此,不能簡單把:

Django
FastAPI
Laravel

當成三個完全相同定位的 Framework。


二、Django Admin 其實比很多人想像的強

這點值得特別強調。

如果有人說:

「Django Admin 只能做簡單 CRUD。」

這個說法其實已經過時。

Django Admin 本身就支援:

  • List Display

  • Search

  • Filter

  • Ordering

  • Inline

  • Custom Action

  • Permission

  • Custom Form

  • Custom View

  • Custom Template

而且 Django 本身有 User / Group / Permission 的完整授權機制。

基本 Permission 可以對應:

add
change
delete
view

再搭配 Group:

Content Editor
Content Manager
Administrator

就能建立基本的 RBAC。

更重要的是,Django 生態還有大量成熟套件可以進一步補足企業需求。

例如:

django-admin-interface
django-import-export
django-guardian
django-simple-history

可以分別補足:

Admin UI
Import / Export
Object-level Permission
History / Audit

因此比較正確的說法應該是:

Django Admin 是一個非常成熟的 Admin Framework,而且可以透過生態系擴充成相當完整的企業後台。

而不是:

Django 只能做基本 CRUD。


三、那為什麼還要談 Laravel + Filament?

因為問題不在於:

「Django 能不能做到?」

Django 當然能做到。

真正的問題是:

需要多少組裝?

這是 Laravel + Filament 與 Django 的核心差異之一。


四、Filament 的核心優勢:高度整合

Laravel 本身提供:

Routing
ORM
Migration
Validation
Authentication
Authorization
Queue
Event
Notification
Mail
Storage
Cache
Scheduler
API

再加上 Filament:

Admin
Resource
Form
Table
Action
Widget
Dashboard
Relation Manager
Import
Export
File Upload
Rich Editor

因此可以形成:

Laravel
   ↓
Filament
   ↓
企業 Admin / CMS

這種架構的最大優勢不是「功能比較多」。

而是:

這些功能本來就是設計成一起工作的。


五、快速開發真正比較的是「需要自己組多少東西」

假設今天要建立:

Product

包含:

name
price
category
status
image
published_at

在 Laravel + Filament 中,可以透過 Resource 建立:

Product
├── List
├── Create
├── Edit
├── View
├── Form
├── Table
├── Filter
└── Action

Filament 4 也提供 Resource / Schema 等抽象,讓 Form、Table 與 Action 可以使用宣告式方式組合。(Filament Resources)


六、Django 其實也可以非常快

如果使用 Django:

Model
   ↓
ModelAdmin
   ↓
Admin

同樣可以快速得到:

List
Search
Filter
Create
Edit
Delete

而且 Django Admin 已經非常成熟。

因此,如果比較:

「誰能快速做 CRUD?」

不能說 Laravel + Filament 一定勝出。

Django 完全有資格競爭。


七、真正的差異開始出現在複雜後台

當需求從:

CRUD

開始變成:

CMS
+
Permission
+
Workflow
+
Form Builder
+
Rich Editor
+
File Upload
+
Relation
+
Import / Export
+
Dashboard
+
Custom Action
+
Page Builder

比較就開始變得有趣。

因為此時工程師需要思考:

誰負責 Form?
誰負責 Table?
誰負責 Permission?
誰負責 Role?
誰負責 File?
誰負責 Audit?
誰負責 Import?
誰負責 Export?
誰負責 UI?

Django 可以透過套件解決。

FastAPI 也可以透過套件解決。

Laravel 也可以透過套件解決。

真正不同的是:

框架本身與這些元件的整合程度。


八、FastAPI 的優勢其實非常明顯

這裡也不能忽略 FastAPI。

FastAPI 生態近年也逐漸補足 Admin 的需求。

例如:

FastAPI
+
SQLAlchemy
+
SQLAdmin

可以建立相當完整的 Admin。

另外也有:

fastapi-admin
SQLModel
其他 Admin Framework

等方案。

因此:

「FastAPI 沒有 Admin。」

這個說法也是不準確的。

更正確的說法是:

FastAPI 本身不是以 Admin 為核心,而它的生態提供了多種 Admin 解決方案。


九、而 FastAPI + Vue / React 其實是一條非常乾淨的路

如果團隊本來就採用:

Frontend
Vue / React
      ↓
FastAPI
      ↓
Database

那麼這種架構其實非常合理。

尤其是:

Mobile App
SPA
Microservice
AI Service
External API

都需要同一套 API 的情況。

這時候:

FastAPI
+
Vue / React

反而可能比:

Laravel
+
Filament
+
另外一套前端

更符合團隊需求。

所以不能說:

FastAPI 做 Admin 不好。

而應該說:

FastAPI 更適合 API-first 的架構,而 Filament 更適合快速建立 Business Application / Admin / CMS。


十、權限管理才是真正值得比較的地方

企業系統最容易低估的就是 Permission。

簡單系統可能只有:

Admin
User

但大型 CMS 往往會變成:

User
 ↓
Role
 ↓
Permission
 ↓
Resource
 ↓
Action
 ↓
Record

例如:

Project
├── View
├── Create
├── Update
├── Delete
└── Publish

甚至:

Project
├── Manage Content
├── Manage Structure
└── Manage Publish

再進一步可能還要判斷:

使用者可以修改這個 Project 嗎?

而不是只有:

使用者可以修改 Project 嗎?

這就是 Model-level 與 Record-level Authorization 的差別。


十一、Django 在權限這方面其實很完整

Django 原生提供:

User
Group
Permission

並且 Admin 會使用這些 Permission。

另外還可以使用:

django-guardian

處理 Object-level Permission。

因此可以做到:

User A
→ 可以修改 Project 1

User B
→ 可以修改 Project 2

這代表 Django 完全有能力處理企業級權限。

所以這裡不應該寫成:

Django 權限不如 Laravel。

比較精確的說法是:

Django 的權限能力很完整,但 Laravel 的 Policy + Gate + Filament Authorization 整合,在 Laravel + Filament 的企業 Admin 場景中非常自然。


十二、Laravel + Policy + Filament 的優勢

Laravel 原生提供:

Gate
Policy
Authorization

其中 Policy 特別適合 Model / Resource 授權。

例如:

public function update(
    User $user,
    Project $project
): bool {
    return $user->id === $project->owner_id;
}

接著 Filament Resource / Action 可以使用同一套 Authorization 邏輯。

因此形成:

Laravel Policy
      ↓
Filament Resource
      ↓
Action Authorization
      ↓
UI Button

也就是:

後端授權規則可以直接影響 Admin UI。

這種整合對 CMS 非常重要。


十三、Filament 也不是沒有缺點

如果文章只說 Filament 很快,卻不談它的限制,就會變成推銷文。

Filament 非常適合:

Admin
CMS
CRUD
Dashboard
Form
Table
Internal Tool

但不是所有 UI 都應該使用 Filament。


1. 極端複雜的表格互動

例如:

大量即時計算
跨欄位即時更新
拖曳排序
大量資料同步操作
跨 Resource 狀態互動

這種需求如果已經超過 Filament 的抽象範圍,就可能需要:

Custom Livewire
Custom JavaScript
Vue
React

甚至直接建立獨立前端。


2. 即時協作

例如:

多人同時編輯
即時 Presence
WebSocket
Live Collaboration
即時游標
即時狀態同步

Livewire 當然可以整合即時功能。

但如果產品本身就是:

「像 Google Docs 一樣多人即時協作。」

那麼專業的前端架構通常會更適合。


3. 超大型資料量

例如:

10 萬筆
100 萬筆
500 萬筆

這時候問題就不只是 Filament。

而是:

Database Index
Query
Pagination
Search
Caching
Virtualization
Data Loading

甚至可能需要:

Elasticsearch
OpenSearch
專用 Search Service

Filament 可以處理大型資料,但不能期待:

「把幾百萬筆資料丟進 Table,Framework 自動解決所有效能問題。」

這在任何 Framework 都不成立。


十四、因此「快速開發」不等於「什麼都不用自己做」

這是非常重要的觀念。

Filament 可以大幅降低:

CRUD UI
Form
Table
Validation
Admin

的開發成本。

但當需求超出 Framework 抽象範圍:

Complex UI
Real-time
Huge Dataset
Custom Interaction
Special Workflow

依然需要工程師介入。

所以真正好的使用方式是:

Standard Requirement
        ↓
Filament

Complex Requirement
        ↓
Custom Component / Livewire / Vue / React

而不是:

Everything
   ↓
Filament

十五、人才成本其實也是技術選型的一部分

這是很多技術比較文章忽略的地方。

假設公司已經有:

20 位 Python Engineer

其中:

10 位 Data Engineer
5 位 AI Engineer
5 位 Backend Engineer

這時候如果突然決定:

「我們要全面改 Laravel。」

技術上可能完全可行。

但是:

Training Cost
Hiring Cost
Migration Cost
Productivity Loss
Knowledge Transfer
Maintenance

都是真實成本。

反過來也一樣。

如果團隊已經有:

Laravel
PHP
Vue
Filament

的成熟經驗,那麼為了「大家都在用 Python」而改成 Django / FastAPI,也可能是一個非常昂貴的決策。

所以:

技術選型不能只看 Framework 能力,也要看團隊已經擁有什麼能力。


十六、三年維護成本比第一天開發速度更重要

一個專案第一天可以做到:

Python
Laravel
Node
Go

其實都不難。

真正困難的是三年後。

你需要面對:

新功能
Bug
Security
Dependency Upgrade
Database Migration
Performance
新人加入
技術債
權限需求
商業規則變更

因此真正值得問的是:

三年後誰來維護?


十七、Python 生態的優勢也可能成為成本

Python 的優點是生態非常龐大。

但另一面是:

很多套件
很多選擇
很多組合

例如:

FastAPI
+
SQLAlchemy
+
Pydantic
+
SQLAdmin
+
Auth Library
+
Permission Library
+
Frontend
+
Storage
+
Background Worker

每一個元件都可能非常優秀。

但工程師也必須自己決定:

Architecture
Integration
Version Compatibility
Error Handling
Authorization Boundary

因此:

自由度越高,架構責任通常也越高。


十八、Laravel 的優勢就是 Convention

Laravel 的哲學相對比較接近:

提供一套有意見的完整解決方案。

例如:

Routing
ORM
Migration
Validation
Authentication
Authorization
Queue
Event
Notification
Mail
Storage
Cache
Scheduler

再搭配:

Filament
Livewire
Spatie

可以快速形成企業應用。

這種模式最大的優勢不是:

「Laravel 比 Python 強。」

而是:

很多常見問題已經有明確的解法。


十九、所以兩邊其實是不同的工程哲學

可以簡化成:

FastAPI

給我自由度
讓我自己組架構

Django

給我完整 Web Framework
讓我快速建立網站與 Admin

Laravel + Filament

給我完整 Web Framework
再給我高度整合的 Business Admin UI
讓我快速建立企業系統

沒有哪個一定比較好。

只是適合的問題不同。


二十、真正合理的架構甚至不是二選一

如果公司同時需要:

CMS
Admin
AI
Recommendation
Image Processing
LLM
Data Analysis

最合理的答案可能根本不是:

Laravel OR Python

而是:

                    Frontend
                       │
                       ▼
                Laravel API
                       │
              ┌────────┴────────┐
              │                 │
          Filament          Python Service
              │                 │
          CMS / Admin        AI / ML
              │                 │
              └────────┬────────┘
                       │
                    Database

例如:

Laravel

負責:

User
CMS
Permission
Admin
Business Logic
Order
Workflow
API

Python

負責:

AI
LLM
Recommendation
Image Processing
Data Analysis
Machine Learning

這種架構完全合理。


二十一、那到底該怎麼選?

可以用下面這張表快速判斷:

需求建議
AI / MLPython
Data SciencePython
LLM / AI ServicePython
API-firstFastAPI
MicroserviceFastAPI / 依需求選型
傳統 Full-stack WebDjango / Laravel
Django 原生 AdminDjango
企業 CMSLaravel + Filament / Django
大量 CRUDLaravel + Filament / Django
Admin + Form + TableLaravel + Filament
CMS + Page BuilderLaravel + Filament
細粒度 CMS 權限Laravel + Filament / Django
高度客製前台Vue / React / Astro 等
AI + CMSLaravel + Python

二十二、最後不要問「Python 還是 Laravel」

我認為真正成熟的技術選型問題應該是:

這個專案的核心問題是什麼?

誰會開發?

誰會維護?

團隊已經會什麼?

三年後系統會變成什麼?

哪個架構可以降低長期總成本?

而不是:

現在大家都用什麼?

結論

Python 非常強。

尤其:

AI
Machine Learning
Data Science
LLM
Automation
API Service

這些領域,Python 有非常明顯的優勢。

Django 也不是只能做簡單 CRUD。

透過 Django Admin 加上成熟套件生態,它完全可以建立相當完整的企業後台。

FastAPI 也不是沒有 Admin。

透過 SQLAdmin、fastapi-admin 或前後端分離架構,同樣可以建立企業級系統。

所以這篇文章真正想說的並不是:

Laravel 比 Python 好。

而是:

不要因為 Python 現在很熱門,就認為所有 Web 專案都應該使用 Python。

如果:

核心是 AI

→ Python 優先。

如果:

核心是 API / Microservice

→ FastAPI 非常值得考慮。

如果:

核心是 Web + Admin

→ Django 是成熟選擇。

如果:

核心是企業 CMS
+
大量 CRUD
+
Admin
+
Permission
+
Workflow
+
Form
+
Table
+
Page Builder

Laravel + Filament 依然是目前非常有競爭力的選擇之一。

而如果同時存在:

CMS
+
AI

那麼最合理的答案甚至可能是:

Laravel + Filament
        +
Python

而不是強迫整個系統只使用一種語言。


最後,我認為真正值得記住的一句話

好的工程師不是選現在最紅的技術,而是選最適合問題、團隊與未來三年維護成本的技術。

技術選型的目標從來不是證明:

「我的語言比較強。」

而是:

用最合理的成本,把系統長期做好。

2026年7月26日 星期日

當工程師的價值不再只是寫 Code,公司還看得見你的貢獻嗎?

 最近跟 AI、軟體開發流程轉變相關的討論越來越多。

很多人關注的是:

  • AI 會不會取代工程師?
  • 未來還需不需要寫 Code?
  • 工程師應該學什麼新技能?

但有一個更現實的問題,可能很多工程師每天都正在面對:

當你的工作價值不再只是「寫多少 Code」,公司是否還有能力看見你的貢獻?


傳統工程價值:時間與產出

很多公司的管理方式,仍然建立在一個簡單模型:

投入時間
    ↓
完成需求
    ↓
交付功能

因此工程師的價值容易被衡量為:

  • 花多少工時
  • 完成多少 Ticket
  • 寫多少功能
  • 解多少 Bug

這種方式對明確需求非常有效。

例如:

  • 新增一個 API
  • 修改一個頁面
  • 增加一個欄位

這些工作確實可以透過時間估算。

但問題在於:

軟體工程真正困難的地方,往往不是把功能做出來。


高價值工程工作,很多時候看不到立即產出

一個工程師花三天整理:

  • 共用 Service
  • 權限架構
  • 多語系處理
  • API 規範
  • 資料驗證流程

表面上看:

三天沒有新增功能。

甚至可能有人會問:

為什麼這個需求花了三天,畫面還沒有完成?

但實際上,這三天可能避免未來十個、二十個功能重複踩坑。

這類工作創造的是:

  • 降低未來維護成本
  • 減少重複開發
  • 降低錯誤風險
  • 提升團隊整體開發速度

只是這些價值通常不會立即出現在畫面上。


越有效率,有時反而越難被看見

這也是很多資深工程師會遇到的矛盾。

假設:

工程師 A:

花 10 天完成一個功能

工程師 B:

花 3 天建立共用架構,並完成同樣功能

短期看:

B 好像「少花時間」。

但長期看:

B 建立的能力可能讓後續 20 個功能都變快。

問題是,如果公司只看:

需求 → 工時 → 完成

那 B 創造的價值很容易被忽略。


工程師與管理者看到的是不同尺度

工程師思考的是:

現在的設計
        ↓
半年後、一年後的維護成本

管理者通常關注的是:

目前專案
        ↓
交付時間與成本

兩邊其實沒有誰對誰錯。

只是看的時間尺度不同。

真正困難的是:

如何把長期價值轉換成短期可以理解的資訊。


AI 會讓這個落差更加明顯

以前工程師的效率差異,可能來自:

  • 熟悉 Framework
  • Coding 速度
  • 累積經驗

但 AI 出現後:

很多工程師都能快速產生 Code。

未來差距會逐漸變成:

  • 誰能定義正確問題
  • 誰能設計合理架構
  • 誰能判斷 AI 產出的品質
  • 誰能控制系統風險

也就是:

未來工程師的價值,不只是「產生程式碼」。

而是:

確保產出的系統正確、可靠、可維護。


但公司不一定會自動改變衡量方式

這是很多工程師真正困擾的地方。

你可能開始投入:

  • 架構改善
  • 技術債整理
  • 共用元件建立
  • 開發流程優化

但績效評估仍然是:

  • 完成幾個需求
  • 花多少時間
  • 解多少工單

於是產生一個矛盾:

越有經驗,越能提前避免問題,但越難被工時計算。


工程師需要學會「呈現價值」

不要只說:

我完成了多語系架構。

改成:

建立共用多語系架構,讓後續新增功能可以沿用標準流程,降低重複開發與維護成本。

不要只說:

我整理了權限系統。

改成:

統一權限管理流程,降低新增角色時的設定錯誤風險。

不要只說:

我新增 Audit Log。

改成:

建立操作追蹤能力,讓資料異動可以被追溯,降低問題排查成本。

同一件事情,用不同語言描述,價值感完全不同。


未來工程師需要增加的一項能力:技術溝通

很多工程師很重視:

  • 程式品質
  • 架構設計
  • 效能最佳化

但忽略另一件事情:

讓非工程背景的人理解你的價值。

企業不是只購買 Code。

企業真正需要的是:

  • 降低風險
  • 提升效率
  • 建立可持續發展的系統

而 Code,只是實現這些目標的工具。


結語:工程師不只是寫 Code 的人

很多工程師擔心:

AI 讓寫 Code 變便宜,那工程師還有價值嗎?

但真正的問題可能不是:

誰寫 Code 比較快?

而是:

誰能讓系統長期穩定運作?

當 AI 越來越強,單純產出程式碼的價值可能下降。

但:

  • 系統設計能力
  • 問題分析能力
  • 風險控制能力
  • 技術決策能力

反而會更加重要。

工程師真正需要提升的,不只是寫更多 Code。

而是成為那個:

能判斷該寫什麼、不該寫什麼,並且讓 AI 安全產生價值的人。

同時,也要開始練習用對方聽得懂的語言,把長期價值說清楚。

因為在組織裡:

沒有被理解的價值,很容易等同於不存在。


為什麼公司一直用工時衡量工程師?

先承認一件事:

公司用工時衡量工程師,不一定是因為管理者不懂技術。

而是因為工時有三個很實際的優點:

  • 容易估算成本
  • 容易安排資源
  • 容易追蹤專案進度

如果今天客戶問:「這個功能多久完成?」 老闆不可能回答:「等我們把架構整理好。」

所以工時本身沒有錯。 錯的是,當工時變成唯一的價值指標。

AI 時代,工時開始失去代表性

以前,工程師花八小時完成一個功能,大家會認為:八小時,就是這個功能的成本。

現在,AI 可以讓同一個功能兩小時完成。

那問題來了:

如果公司還是認為「花越多時間,代表價值越高」,是不是代表效率越高的人,反而越吃虧?

這就是 AI 時代開始出現的矛盾。

真正有價值的工作,很多是在「避免事情發生」

我們很少稱讚一個系統:「今天沒有當機。」 很少稱讚一位工程師:「今天沒有發生權限漏洞。」 很少有人注意:「今年沒有因為資料結構設計錯誤而重寫系統。」

因為避免問題,本來就不容易被看見。

但是成熟的工程師,很多時間都花在:

  • 避免 Bug
  • 避免資安漏洞
  • 避免技術債
  • 避免未來重工
  • 避免部署失敗

這些事情成功的結果就是:什麼事都沒有發生。

而「沒有發生」,最難證明價值。

AI 不會讓這個問題消失,只會放大它

AI 可以更快寫出程式,但 AI 沒辦法保證:

  • 這個架構五年後還能維護
  • 這個 Migration 不會影響舊資料
  • 這個權限模型沒有安全漏洞
  • 這個設計不會讓團隊之後一直付出維護成本

所以未來真正值錢的,不一定是寫了多少 Code,而是避免了多少錯誤決策。

可惜的是,這種價值很難寫進工時表。

我想讓管理者思考一個問題

如果有兩位工程師:

A 工程師 每個功能都花 5 天完成。 三年後系統充滿技術債。

B 工程師 花 7 天建立共用架構。 後續每個功能都只需要 2 天。

如果只看第一個功能,A 的績效可能比較好。 如果看三年,答案可能完全相反。

那麼,我們到底是在衡量「投入多少時間」,還是在衡量「創造多少價值」?

結語

AI 正在改變工程師的工作方式,但如果企業衡量工程價值的方法沒有一起改變,那真正被低估的,不是工程師,而是那些原本可以被創造出來的長期價值。

我如何用 AI 開發 Laravel 專案:從 Prompt Driven Development 到 Spec Driven Development

最近 OpenAI 一連串產品與模型方向的調整,透露出一個很明顯的趨勢:

ChatGPT 正從「回答問題的 AI」逐漸走向「能理解目標、操作工具、協助完成工作的 AI Agent」。

這代表工程師與 AI 的合作方式,也正在改變。

過去我們使用 AI 大多是:

text
需求
 ↓
撰寫 Prompt
 ↓
AI 產生 Code
 ↓
人工 Review

但未來更接近:

text
需求
 ↓
AI 分析專案上下文
 ↓
提出修改計畫
 ↓
建立 Patch
 ↓
執行測試
 ↓
人類確認與決策

差異不只是「AI 會不會寫 Code」。 真正的改變是:工程師的價值,正在從「產生程式碼」轉向「設計系統、管理複雜度、驗證結果」。

一、未來更重要的工程能力,不是打字速度

AI 可以快速產生大量程式碼,但以下能力仍然需要工程師判斷。

1. 問題定義與範圍控制

很多軟體問題,真正困難的地方不是實作,而是:

  • 需求到底要解決什麼?
  • 哪些事情不應該做?
  • 哪些舊邏輯不能破壞?
  • 什麼才算完成?

如果需求本身模糊,AI 只會更快產生錯誤答案。 所以未來工程師最重要的能力之一,是把模糊需求轉換成清楚規格。

2. 系統設計與技術取捨

AI 可以提出很多方案,但「哪個方案適合現在的系統?」仍然需要工程判斷。

例如:

  • 要不要抽 Service Layer?
  • 要不要增加 Repository?
  • JSON 欄位是否需要正規化?
  • 權限是否應該拆分?
  • 這次需求是否值得增加抽象層?

這些不是 Code Generator 可以單純決定的事情。

3. 驗證 AI,而不是相信 AI

最大的風險不是 AI 不會寫,而是 AI 寫出看起來合理,但實際有問題的 Code。

常見例子:

  • Migration 可以執行,但破壞資料相容性
  • Policy 通過測試,但權限邊界錯誤
  • API 回傳正常,但多語系 fallback 有漏洞
  • Refactor 後功能正常,但未來維護成本增加

因此,Code Review、Testing、Audit Log、Rollback 機制的重要性只會提高。

二、工程師應該建立新的 AI 協作習慣

1. Think Before Code

不要收到需求後直接說「幫我寫這個 Feature」。

更好的流程是先要求 AI:

  • 分析現有架構
  • 找出影響範圍
  • 提出修改方案
  • 列出風險

確認方向後,再開始 Coding。

2. 從 Prompt Engineering 走向 Spec Engineering

很多人研究「怎麼寫更好的 Prompt」,但未來更重要的是「怎麼寫更好的 Spec」。

好的 Spec 應該包含:

  • 背景與目的
  • 功能範圍
  • 非目標項目
  • 資料結構
  • API 定義
  • 權限規則
  • 測試條件
  • 已知限制

AI 的能力越強,規格品質的重要性越高。

3. 把 AI 當 Junior Engineer

AI 很像一位能力很強,但不了解公司文化與歷史的新進工程師。

你不能只說「幫我完成這個功能」,然後期待完美結果。

更好的方式是:

text
先分析
↓
提出計畫
↓
等待確認
↓
修改
↓
測試
↓
回報結果

這也是為什麼未來 Permission Control、Change Log、Audit Trail、Approval Flow 會越來越重要。

三、Laravel / 後端工程師可以怎麼準備?

如果你的工作主要是 Laravel、Filament、CMS、API 系統,可以開始練習:

不要: 幫我建立一個 User Resource

改成: 請先分析目前 User、Role、Permission 架構,確認影響範圍,提出 Filament Resource 修改計畫,列出 Migration、Model、Policy、Test 需要調整的地方。

不要: 幫我重構這段 Code

改成: 請先分析這段程式是否符合 SRP、KISS、DRY、Clean Architecture,再提出最小修改方案。

這樣 AI 才會從「Code Generator」變成「工程協作者」。

四、未來工程師競爭力會重新排序

以前:

text
Coding 速度
+ 熟悉 Framework
+ 累積 Code 量

可能代表較高效率。

但未來:

text
需求分析能力
+ 系統設計能力
+ AI 協作能力
+ 驗證與風險控制能力

會越來越重要。

因為當所有工程師都能使用 AI 產生 Code 時,差距就不會存在於「誰寫得快」,而是在:

  • 誰知道該寫什麼
  • 誰知道哪些不能寫
  • 誰能判斷 AI 的結果是否可靠

結語

AI Agent 時代真正改變的,不是工程師不用寫 Code,而是工程師不應該只停留在寫 Code。

未來更有價值的工程師,會是那些:

  • 能把需求變成規格的人
  • 能設計系統邊界的人
  • 能管理 AI 工作流程的人
  • 能承擔最後品質責任的人

AI 不會取代工程師。 但使用 AI 的工程師,會逐漸取代不會使用 AI 的工程師。

而最重要的起點就是:

AI 是 Junior Engineer,不是神諭機。

AI-First Coding:如何讓 AI 更有效率地幫你寫 Code

  AI-First Coding:如何讓 AI 更有效率地幫你寫 Code 現在的軟體開發方式正在發生根本性的轉變。 以前我們思考的核心問題是: 「怎麼把程式碼寫得最漂亮、最容易讓人維護?」 但如果現在主要由 AI 協助,甚至直接產生 Code,問題應該改成: 「怎麼...