當 Andrej Karpathy 在社群上拋出「Vibe Coding」一詞時,無數人驚嘆於軟體開發的門檻已被徹底夷平:你只要抱持著某種氛圍(Vibe),對著編輯器說幾句自然語言,LLM 就會在幾秒鐘內吐出可運行的全端應用。

然而,在狂歡經過數個月的沉澱後,第一線工程團隊開始撞上一堵殘酷的現實之牆。Hacker News 上近期獲得極高迴響的一則短評,一針見血地道破了這個範式轉移的代價:

「Vibe coding made writing cheap. It made reading expensive.」 (Vibe coding 讓寫代碼變得廉價,卻讓讀代碼變得無比昂貴。)

這不是懷舊工程師對新工具的抵抗。當生成代碼的邊際成本趨近於零時,真正決定軟體生死與團隊產能的,早已不再是手打語法的「技術實現力」,而是人類工程師的品味(Taste)——一種能夠在海量平庸輸出中識別壞味道、收斂邊界,並對 AI 產出堅決行使「否定權」的架構裁決力。

Vibe Coding 時代的品味驗證與架構裁決雙循環模型 左側為生成成本趨近於零的 AI 生成湧流,右側為以品味與裁決權為核心的工程約束防線。品味在架構、測試與產品三個層面建立具體驗收閘門,阻斷軟體垃圾進入生產環境。AI GENERATIVE FLOOD(零邊際成本生成)自然語言意圖(Vibe Prompt)「幫我刻一個可擴充的排程通知模組」LLM 膨脹輸出(High Entropy)• 產生 800 行看似完美的萬能服務類別• 靜默吞下邊界錯誤與競態條件無品味失控(Software Landfill)× 無人理解的深層抽象與幻覺 API× 閱讀與排錯成本呈指數暴增× 被視為正常的「隱形技術債危機」驗證裁決TASTE AS ARCHITECTURAL AUTHORITY(品味即系統裁決權)品味第 1 關:邊界與深模組(Architecture Taste)拒絕上帝類別。強迫 Agent 把內部複雜度封進狹窄介面,切斷幽靈依賴。停止規則:表面積過大或牽涉 3 個以上不相關目錄者,直接打回重構。品味第 2 關:紅燈測試先行(Verification Taste)不看「跑得通」,看「能否以預期方式失敗」。先寫斷言,再交由 AI 補齊。停止規則:缺乏失敗邊界證明與覆蓋缺口說明的代碼,不可進入主分支。品味第 3 關:產品細節的「否定權」(Editorial Taste)品味是敢於拒絕 80% 平庸輸出的勇氣。識別 AI Slop 的模板化設計與偽架構。最終交付:具備高凝聚力、長久生命力且人類與 Agent 皆可精準維護的高信賴系統。否決平庸生成:以品味精確指引 Agent 重新收斂邊界
輸入:AI 生成湧流

零邊際成本的程式碼生成

自然語言降低了語法門檻,但引發極高的熵增:AI 傾向吐出體積肥大、充滿隱形技術債的平庸程式碼(AI Slop)。

警訊:撰寫程式碼變便宜了,但閱讀、驗證與除錯的代價卻呈指數級暴增。
↓ 通過三大品味驗證閘門
01

架構品味:深模組與狹窄介面

拒絕上帝服務類別。強迫 Agent 將複雜實作封裝於簡潔深度的介面之後,杜絕跨目錄的散彈槍式修改。

02

驗證品味:可重現的失敗證據

不問「功能能跑嗎」,只問「在哪些預期條件下會失敗」。以紅燈測試作為驗收防線,不交給 AI 盲目自嗨。

03

編輯品味:行使拒絕平庸的否定權

敢於推翻 AI 產出的前三種方案。品味是將 AI 從「製造垃圾的怪獸」轉化為「高保真執行手」的主權核心。

圖解:Vibe Coding 時代的「品味裁決模型」。當技術實作成本趨近於零,區分卓越架構與軟體垃圾的唯一防線在於工程師的系統品味與驗證否定權。

語法平民化後的代價:軟體垃圾掩埋場(Software Landfill)

過去二十年,傳統工程師的核心技能壁壘建立在「實現複雜度」上:精通語言語法、記住框架的生命週期鉤子、熟練操作資料庫驅動。誰能手刻出無 bug 的底層通訊,誰就是無可替代的資深專家。

但 LLM 把這座壁壘打成了碎石。今天任何一個剛學寫程式兩週的實習生,都能靠著提示詞讓 AI 生成出包含 JWT 認證、Redis 快取與非同步任務隊列的模組。問題在於:AI 具備近乎無限的生成能力,卻對系統的長期連貫性與維護成本毫無感知。

在 Reddit 的 r/webdev 社群中,工程師們正在頻繁討論這場蔓延開來的危機。當有人試圖淡化 AI 生成代碼的架構缺陷時,開發者直言不諱地指出:這絕不是什麼看不見的隱憂,而是一場「顯而易見且完全可預測的技術債危機(an obvious, incredibly-predictible technical debt crisis)」,只是眾人習慣把問題掃到地毯下。

缺少品味牽引的 Vibe Coding,正以驚人的速度製造社群口中的「軟體垃圾掩埋場(Software Landfill)」:

偽解法膨脹(Phantom Architecture)

  • 現象:為了解決一個簡單的狀態同步問題,AI 自動引入了三個全新的依賴庫、一層複雜的 Event Bus 以及八百行難以追蹤的封裝。
  • 後果:當系統在高負載下死鎖或拋出幽靈錯誤時,團隊中沒有任何一個人真正理解內部狀態機的流轉機制。

隱形邊界穿透(Context Bleeding)

  • 現象:AI 為了「讓單元測試綠燈」,隨手在 Controller 層直接呼叫 ORM 甚至外部第三方 API,把原本清晰的領域邊界撕開無數破口。
  • 後果:代碼庫退化成散彈槍式修改(Shotgun Surgery)的噩夢,任何微小改動都會引發無預期的連鎖崩塌。

「品味」不是玄學:工程審美背後的三大硬核裁決

很多人把「品味」誤解為純粹的美學主觀偏好——像是按鈕的圓角、顏色的調校或崇拜某種流行框架。但在高可靠性軟體工程中,品味是高密度的架構直覺與模式識別能力,是資深工程師歷經無數次線上事故與踩坑經驗後,所凝結出的嚴苛篩選漏斗。

具體落到工程實踐中,能夠阻斷 AI Slop 的品味主要由三個維度構成:

1. 架構品味:深模組與狹窄介面(Deep Modules & Narrow Seams)

  • 評判標準:John Ousterhout 在《A Philosophy of Software Design》中強調的「深模組(Deep Module)」原則——介面極度簡單狹窄,內部實作極度深厚有力。
  • 品味落地:面對 AI 吐出的十幾個互相呼叫的抽象工廠與薄類別,具備品味的工程師會立刻判定這是不及格的「淺模組淺層垃圾」,強制要求 Agent 消除中間層,封裝成只有三個公開方法的純淨介面。

2. 邊界品味:不變量與防禦深度(Invariants & Blast Radius)

  • 評判標準:清楚劃分「誰永遠不能取得什麼」,並把最糟情況下的爆炸半徑(Blast Radius)嚴格限制在單一隔離單元內。
  • 品味落地:拒絕接受只靠前端隱藏按鈕的「表面安全」;強制驗收每個端點是否自帶授權防線、跨帳號資源讀取是否回傳 403,以及併發計費是否在資料庫層具備絕對原子性。

3. 簡約品味:敢於對 80% 的生成代碼說「不」(The Courage to Say No)

  • 評判標準:Antoine de Saint-Exupéry 的名言:「完美不是在無法再加入任何東西時達到,而是在無法再減少任何東西時達到。」
  • 品味落地:AI 會本能地提供它最先想到的暴力解法。有品味的工程師不會照單全收,而是毫不留情地連續駁回三次方案,直到 Agent 找到那個代碼行數最少、狀態最單純、零外部依賴的優雅解答。

當資深者掌握品味,初學者迷失在語法幻影

社群在討論 Vibe Coding 時揭示了一個有趣的世代分水嶺。擁有多年分散式系統經驗的資深工程師在 r/webdev 上坦言:他們在工作流程中廣泛運用 AI,但主要把 AI 當成「CRUD 加速器」與「模板打底工具」,並且在生成完成的第一秒就嚴密檢查代碼是否符合預設架構規範。

相反地,缺乏底層訓練的初學者正在遭遇嚴重的成長陷阱。許多工程團隊在盤點新人培訓時赫然發現:因為第一天就全盤依賴 AI Vibe Coding,新進工程師甚至無法描繪出整個系統的核心架構與資料流向。

當提示詞(Prompt)成為唯一的輸入,工程師若缺乏足夠的理論底蘊與踩坑直覺,他就無法分辨 AI 給出的是「業界驗證的最佳實踐」還是「隨機拼湊的垃圾」。這種失去審查能力(Loss of Verification Authority)的狀態,會讓工程師徹底淪為 AI 的文字搬運工,而非系統的主人。

# 團隊應落地的 Vibe Coding 裁決契約範本
architectural_invariants:
  - 介面表面積最小化:任何新增的公開 API 必須具備充分的單元測試與自描述型別
  - 封裝內部化:功能實作不得洩漏 ORM 連線或跨目錄引發幽靈相依
  - 失敗預期優先:提交代碼前,必須提供可重現「邊界失敗」的紅燈測試證據
  - 零盲目依賴:未經架構審查,嚴禁引入未列入信任清單的第三方套件

下一步:如何將品味具象化為工作流約束?

如果你的團隊也正享受著 Vibe Coding 帶來的飛速交付,卻同時隱約感受到代碼品質逐漸失控的焦慮,請不要試圖「禁止使用 AI」,而是把你的工程品味編譯為可被機器執行的硬性約束。

在下一輪任務指派給 Agent 之前,立即在工作流中執行這三個動作:

  1. 建立紅燈測試護城河(Test-First Seam):在讓 Agent 寫任何商業邏輯前,先由人類定義出核心斷言與預期拋出錯誤的邊界測試。沒有失敗案例,就不准開始實作。
  2. 鎖定垂直切片與目錄邊界(Vertical Slice Isolation):要求 Agent 的一切改動必須限制在獨立的功能切片內,嚴禁未經確認跨層竄改公共服務。
  3. 行使兩次駁回權(The Rule of Two Rejections):養成不接受 Agent 第一版輸出的工作習慣。問它:「這個實作有哪三個潛在的架構壞味道?如果把代碼行數砍半,你會如何重新設計?」,逼迫模型從自身生成的平庸模式中躍遷出來。

技術語法會過時,生成工具會迭代,但對架構邊界的感知、對複雜度的敬畏,以及拒絕妥協的品味,永遠是軟體工程師無法被演算法取代的立足之地。