😭 Vibe Coding 翻车实录:AI 编程为什么必须先写"剧本"

写在前面:今天这节课信息量巨大。前两节还在用 Next.js 搭博客,这一节突然画风一转------Vibe Coding 已经过去了 。取而代之的是一个叫 SDD(Spec-Driven Development,规范驱动开发)的新范式。核心就一句话:先写文档,再写代码。 听起来朴素得像废话,但你真用过 Vibe Coding 就知道,这四个字能救命。课堂还带了一个实战项目 md-wx-chrome-extensions------一个浏览器插件,从需求分析到代码生成,全程 SDD。以下所有内容都来自课堂真实文件,一个字没编。


Vibe Coding 的"首日票房"陷阱

2025 年,一种叫 Vibe Coding(氛围编程)的开发方式横扫技术圈。

操作极其丝滑:打开 Claude Code、Cursor、Trae、Copilot,或者 DeepSeek 的 harness 插件,用自然语言描述需求,AI 嘎嘎一顿输出,代码就出来了。

第一天,你觉得效率提升了 10 倍。

然后,第二周开始了。

你发现 AI 上次生成的认证模块用了 mockjs,但你的项目是 Next.js + Redis。你让它改,它改了,但改的过程中碰坏了另一个模块。你让它修,它修了,但引入了一个新 bug。每一轮失败都在消耗两样东西:时间 (等 AI 生成)和 token(你的钱)。

第一个月,你陷入了自我怀疑。

课堂 readme 的原话:

"每一个声称 10 倍效率的提升,第一天效率提升,第二周开始返工(AI 猜),第一个月陷入自我怀疑。"

这不是 AI 能力不行。是我们给的上下文不够。

readme 里记了一个真实的翻车案例:

"帮我做一个用户认证系统" → vibe 2000 行代码。框架?mockjs,nextjs,python?java?看上去跑得起来,后面一堆麻烦。

没有上下文的 AI,就像一个没有剧本的演员------你让它演,它就靠"猜"来表演。猜对了是运气,猜错了是幻觉。


Stephen Covey 说:凡事经历两次创造

Stephen Covey 在《高效人士的7个习惯》中提了一个原则:以终为始(Begin with the End in Mind)。

他说,任何事物都要经历两次创造:

创造 发生在哪里 产出
第一次创造 大脑中 / 文档中 心智设计
第二次创造 真正动手 物理实现

"优秀老板,一件事情经历两次创造(不是一次)。"

不画蓝图就不盖房,不写商业计划不创业。建造业和商业早就把这个道理刻进 DNA 了。

SDD 做的事情就是------把这个道理搬进 AI 编程时代


Vibe Coding 的病根:跳过了第一次创造

Vibe Coding 为什么翻车?因为它跳过了第一次创造。

聊天窗口的界面天然诱惑你:输入框一闪一闪,你恨不得立刻把任务甩给 AI。但这时候你还没想清楚:

  • 做什么?
  • 为什么做?
  • 怎么做?
  • 怎么一步步做?

没有文档落地,上下文全在你脑子里。一关窗口,可能就没了。 AI 拿不到足够的上下文,只能猜。每一轮失败都在消耗时间和 token,而你还在原地打转。

vibe coding 问题在于跳过了第一次创造(聊天窗口诱惑我们),直接进入第二次创造。SDD 坚持所有事物都经过两次创造。


SDD 的"剧本三件套"

SDD 的核心操作极其简单:先写文档,再写代码。

这里说的"文档"不是 Word 格式的设计稿,而是 AI Coding Agent 能直接读取的规范文件。文档即是代码------不是比喻,是字面意思。

SDD 的"剧本"按需加载,通常包含三份:

1. proposal.md ------ 剧本大纲

心智创造:头脑中这个系统应该是什么样,满足什么需求表达。

回答"做什么"和"为什么做"。这是你在动手前对系统的整体设想。写 proposal.md 的过程,就是在大脑中先把项目设计一遍。

2. design.md ------ 分镜设计

怎么实现,技术架构。

回答"怎么做"。技术选型直接关系到项目成败------一个正确的选择让后续开发事半功倍,反之,陷入泥坦。

3. task.md ------ 拍摄通告单

先干什么,再干什么,什么可以并行干。

回答"怎么一步步做"。把设计拆解成可执行的任务序列,AI Agent 按这个顺序执行。

三份规范完成第一次创造(工作内容),代码是第二次创造(agent)。

不停迭代。新需求来了,修改更新到文档中,保持文档和代码的一致性。Git 可以同时跟踪代码版本和文档版本。


实战:md-wx-chrome-extensions 的 SDD 全流程

课堂带了一个真实项目:md-wx-chrome-extensions------一个浏览器插件。我们跟着 SDD 的步骤走一遍。

项目简介

浏览器插件核心功能:在浏览英文页面时,一键提取文章核心内容,调用 AI 模型翻译,并将翻译的结果以 Markdown 格式呈现出来,一键复制。

目标用户:大网红、公众号作者、md-wx 工具用户。

第一步:需求分析

第一步:清晰的定义我们要做什么。 第二步:分析和调研------skill,或和 claude code 多聊几次。 花时间编写及验证需求。

这一步的关键是不急着写代码。先想清楚:做什么、不做什么、MVP(最小可行性单元)是什么。

readme 里特别强调了一个原则:

只生成文档,其他的不要做。

也就是说,在需求阶段,AI 只帮你写文档,不帮你写代码。把"想清楚"和"写代码"这两件事分开。

readme 还特别标注了"不做什么":

不是新的项目,我们的阅读。

一句话划清边界------这不是从零造轮子,是基于已有的阅读场景做增强。

第二步:技术架构设计

一个正确的选项,能让后续的开发事半功倍,反之,陷入泥潭。

技术难点是什么?网页主要内容提取。 上网搜、利用 LLM 工具和分析能力------AI 的分析能力很强,快速成长。

架构决策:

决策点 选择 理由
AI 模型接口 OpenAI 兼容方式 一套接口,随时切换 deepseek、qwen 等
Markdown 解析 npm marked 通用方案
输出格式 WeChat Markdown 面向公众号用户的核心需求
界面交互 按钮 + layout + 流式 流式输出,边翻译边看

第三步:项目准备

创建项目和 Git 仓库。

这一步不是走形式。AI 生成的代码是"可验收"的------但前提是你有版本控制。readme 原话:

版本控制的重要性:ai 生成的可验收代码,即时版本控制。vibe coding 可追溯,可回退。

第四步:管理 AI 会话

开启新的会话,新的上下文。

这句话看似简单,但道出了 AI 编程的关键实践。

Vibe Coding 翻车的常见原因:一个会话聊了八百轮,前面的上下文早被截断了,但你以为 AI 还记得。正确做法是------每个阶段开新会话,喂入对应的文档作为上下文。 proposal.mddesign.mdtask.md 就是新会话的"开机包"。

第五步:新需求迭代

修改更新到文档中,保持文档和代码生成的一致性。

新需求来了不改代码,先改文档。文档和代码的一致性,是 SDD 的底线。

第六步:打扫

记得移除冗余代码。

AI 生成的代码经常有冗余。迭代完成后,清理一遍。


Git:AI 时代的"安全带"

Vibe Coding 有一个致命问题:AI 会"幻觉"出一堆看起来能跑但逻辑有问题的代码。这时候 Git 就是你的安全带。

课堂 readme 里记了一份清晰的"回退指南",按代码所处的阶段分级处理:

场景一:AI 出幻觉了,还没 git add

代码还在工作区,直接丢弃这次修改:

bash 复制代码
git restore .

场景二:已经 git add 到了暂存区,但还没 commit

先移出暂存区,再丢弃:

bash 复制代码
git restore --staged .
git restore .

场景三:已经 commit 了

回退到上一个版本:

bash 复制代码
git reset --hard HEAD^

三级回退,覆盖了 AI 编程的所有"后悔"场景。版本控制在 AI 时代不降反升------因为 AI 生成代码的速度远超人类审查的速度,没有 Git 兜底,翻车了连退路都没有。


回头看:Next.js 就是 SDD 的"基础设施"

前两节课用 Next.js 搭了一个博客。现在回头一看------Next.js 框架本身就是一个预制的 SDD 基础设施。

它的文件系统路由约定,本质上就是一套"规范":

bash 复制代码
app/
├── layout.tsx        → 共享布局,包裹所有子路由
├── page.tsx          → 页面入口,唯一必须存在的文件
├── loading.tsx       → 加载态 UI,配合 Suspense 流式渲染
├── not-found.tsx    → 404 页面
├── error.tsx         → 错误边界
├── about/
│   └── page.tsx      → /about 路由
└── blog/
    ├── page.tsx      → /blog 博客列表
    └── [slug]/
        └── page.tsx  → /blog/:slug 文章详情

你不需要告诉 AI"页面放哪、组件放哪、请求方法放哪"------框架的约定已经把这些约束写死了。AI 拿到这套"乐高积木说明书",只要遵守约定,生成的代码就是对的。

这些代码不是 Vibe Coding 拍脑袋出来的------它们是遵循框架规范、按照 SDD 方法一步步生成的。框架提供约束,文档提供意图,AI 负责执行。


当代码生成成本趋零

当代码生成成本越来越低,真正稀缺的是清晰、可执行、可验证的意图,由 SDD 设计。

这句话是 SDD 的核心哲学。

AI 写代码的能力会越来越强。未来,"写代码"这件事的成本会趋近于零。但"想清楚要写什么"的成本不会降------因为那需要人的判断、需求理解、业务洞察。

Vibe Coding 把"写代码"这件事加速了 10 倍,却跳过了"想清楚"这一步。SDD 把"想清楚"变成文档,再让 AI 去执行。

代码是第二次创造。文档是第一次创造。

两次创造,缺一不可。


PS: Vibe Coding 已经过去了。别难过,SDD 才是 AI 编程的正片。

相关推荐
LEE1 小时前
原来 Claude Code 最厉害的工具,一行代码都不写
前端·后端
parade岁月1 小时前
为了给表格加虚拟滚动而选了 vxe-table?也可以考虑下这个
前端·vue.js
打呵欠的猫1 小时前
一个 Hook 让 AI 每次写文件前自动检查编码规范,违规代码再也提交不进来
前端·ai编程·代码规范
恋猫de小郭1 小时前
Android 17 + OkHttp 5.5.0 ,全新 ECH 下你的 HTTPS 域名可以请求时被安全隐藏
android·前端·flutter
后除2 小时前
从零到一: 创建一个 TypeScript 7 项目
前端·webpack·typescript
lerhxx2 小时前
我用 R3F 手搓了一个能走进去的 3D 迷宫简历(上):从选型架构到迷宫生成算法
前端·javascript·three.js
还有多久拿退休金2 小时前
不调多模态,纯文本大模型如何给系统操作配上截图
前端·llm·aigc
hunterandroid3 小时前
HarmonyOS WebSocket 实战:断线重连、心跳保活与连接状态机设计
前端
hunterandroid3 小时前
StateFlow 与 SharedFlow 的边界:状态与事件的正确建模
android·前端