Vibe Coding?不如 Spec Coding
最近尝试了 Google 的 Antigravity、国产的 Trae,还有 Claude Code、OpenCode 等工具。作为一个很多年不写代码的人,最初被“Vibe Coding”这种概念洗脑时,确实觉得很爽:你只需要在大脑里有一个模糊的轮廓,对着 AI 描述两句,代码就稀里哗啦的出来了。
但新鲜劲过去后,我发现自己陷入了一个巨大的坑里。
“Vibe”出来的代码,全是债
当项目稍微复杂一点,超过三个功能模块后,AI 的局限性就开始暴露无遗。
最典型的问题就是缺乏全局意识。AI 就像一个只盯着脚下的修路工,你让它修一段路,它修得飞快。但如果你不看图纸,最后你会发现这段路通向了悬崖,或者和主干道根本对不上。
我在开发一些内部工具(基于 React + TypeScript + Node.js)时,遇到了以下几个“名场面”:
-
面条代码(Spaghetti Code):AI 为了实现你的某个具体需求,会不断地在现有的函数里塞
if-else。它不会主动思考:“我是不是该把这部分逻辑抽离出来做成自定义 Hook?”或者“这个状态是不是该提到父组件?” -
文件体积爆炸:我手头好几个项目,核心逻辑文件竟然被 AI“喂”到了 1000 行以上。由于 AI 倾向于在当前上下文中解决问题,它很难跨文件进行优雅的重构。
-
架构缺失:没有分层,没有解耦。数据库逻辑、业务逻辑、UI 逻辑混成一团。随着技术债的堆积,到了后期,每改一个 Bug,AI 就会反手送来三个新 Bug。
所谓 Spec Coding:把架构权收回来
在被“Vibe Coding”毒打了几次后,我意识到:AI 可以是优秀的执行者,但它现在还当不了首席架构师。
如果你想开发的是一个可持续维护的“产品”,而不是一个一次性的“Demo”,那么你需要从“Vibe Coding”转向“Spec Coding”(基于规范的编程)。亚马逊的 Kiro 把 Spec Coding 做到了极致。
1. 先出“投名状”:AI 辅助的文档先行
我的做法是: 把需求丢给 AI,让它先针对这个功能写一份详细的开发方案保存到 docs/ 目录。
-
反复对齐: 文档里必须包含技术选型(比如坚持用 SQLite 和原子化 CSS)、接口定义、组件拆分逻辑。
-
人工审阅: 我会像 Review 代码一样审阅这份文档,反复修改,直到方案在逻辑上闭环。只有方案通过了,才能让 AI 根据这份文档去“填空”。
2. 强制模块化:死守 500 行红线
AI 倾向于在当前上下文中解决问题,这导致了文件体积爆炸。我会给 AI 下一个死命令:“单个文件超过 500 行必须进行逻辑拆分”。
当 AI 试图在一个大文件里继续拉面条时,我会强行打断它,让它先重构(Refactor)出自定义 Hook 或子组件,然后再实现新功能。
3. Agent 模式下的“规划”前置
利用 Trae 或 Antigravity 的 Planning Mode。不要直接点击执行,先问它:“我要实现方案中的功能 A,请给出你的架构修改路径”。看到它给出的改动点符合我的工程审美(比如没有污染全局状态)后,再允许它动代码。
4. 闭环审计:别让文档变成“尸体”
代码写完并不算完,最重要的一步是后期审计与同步。
自我纠偏: 让 AI 扮演审计员的角色,对照文档扫描代码:“找出未完全实现的逻辑”、“指出写得不够优雅、存在技术债的地方”。通过这一轮修复和完善,才能把那些“Vibe”出来的面条代码,精炼成为更优质的代码。
文档更新: 开发过程中难免有变动,完成后第一时间让 AI 根据最终代码更新 docs/ 下的开发方案,确保文档和代码是一致的。
“Vibe Coding”本质上是一种概率博弈,它牺牲了确定性来换取速度。对于技术创业者或者独立开发者来说,速度固然重要,但可维护性才是长线竞争力的核心。
AI 时代的程序员,核心竞争力正在从“写代码的能力”转化为“定义规范(Spec)的能力”。你越是清晰地定义边界、接口和架构,AI 爆发出的生产力就越纯净,而不是一堆需要你用大量时间重构的垃圾。
与其在那儿对着 IDE 发散你的“情绪”(Vibe),不如静下心来写好你的“规范和文档”(Spec)。
最后聊一下执行这一切的核心——AI 模型。在 Spec Coding 的流程中,模型的能力边界直接决定了文档的质量,而文档的质量又决定了最终代码的上限。
最近在 Antigravity 中深度对比了 Gemini 3.1 Pro 和 Claude 4.6,结论非常明显:
-
Claude 4.6 Sonnet/Opus:它的文档能力明显更胜一筹。Claude 在处理复杂逻辑时的细腻程度、对边缘情况的考虑,以及对系统分层架构的理解,都显得更老辣。它写出的 Spec 往往可以直接拿来作为开发指南。
-
Gemini 3.1 Pro 略显“省事”:Gemini 虽然速度快,但在生成文档时偶尔会显得过于跳跃或简单。它更像是一个急于写代码的“快手员”,它的理解能力很强,但是给出的方案往往过于简化。
而在使用 TRAE 的过程中,国产模型的表现也让我很惊喜。目前比较推荐的顺序是 GLM-5,其次是 Kimi k2.5。GLM-5 在逻辑推演和对中文语境下业务需求的理解上做得非常扎实;而 Kimi 的视觉理解能力,也有着独特的优势。