4.1 八大误区
在实际推广这三种方法论时,会听到很多错误说法。这一节帮你避开最常见的坑。
误区 1:"Vibe Coding 会取代所有开发方式"
❌ 错误观点
"AI 越来越强,以后所有人都会用 Vibe Coding 写代码,TDD 和 SDD 会被淘汰。"
✅ 正确理解
Vibe Coding 解决的是"快速验证"的问题,不解决"长期质量"的问题。
就像 Word 没有取代 LaTeX,Canva 没有取代 Photoshop。快速工具和精密工具服务于不同的需求。Karpathy 本人在 2026 年也提出了"Agentic Engineering"作为 vibe coding 的进化——更强的工程化,而不是更随意的编程。
就像 Word 没有取代 LaTeX,Canva 没有取代 Photoshop。快速工具和精密工具服务于不同的需求。Karpathy 本人在 2026 年也提出了"Agentic Engineering"作为 vibe coding 的进化——更强的工程化,而不是更随意的编程。
误区 2:"TDD 太慢了,不值得"
❌ 错误观点
"TDD 让开发变慢 30%,项目赶不上进度。"
✅ 正确理解
初始开发确实慢 15-35%,但整个生命周期更快。
Nagappan et al. (ICSE 2008) 的研究表明,使用 TDD 的团队缺陷密度降低 60-90%。减少的调试时间远超增加的测试编写时间。
但 TDD 不适合所有项目——探索性原型、快速变化的需求、一次性脚本,用 TDD 确实是浪费。
Nagappan et al. (ICSE 2008) 的研究表明,使用 TDD 的团队缺陷密度降低 60-90%。减少的调试时间远超增加的测试编写时间。
但 TDD 不适合所有项目——探索性原型、快速变化的需求、一次性脚本,用 TDD 确实是浪费。
误区 3:"SDD 就是写文档,瀑布模型换了个名字"
❌ 错误观点
"先写规格再做开发,这不就是瀑布模型吗?敏捷时代早就淘汰了。"
✅ 正确理解
SDD 和瀑布模型的区别在于"规格是活的"。
瀑布模型的文档写完就冻结,改起来要经过漫长的审批。SDD 的规格是演进的——规格 v1.0 → 实现 v1.0 → 反馈 → 规格 v1.1 → 实现 v1.1,持续迭代。
更重要的是:SDD 的规格是机器可读的(OpenAPI、JSON Schema),能自动生成代码、测试和 Mock。瀑布模型的 Word 文档做不到这些。
瀑布模型的文档写完就冻结,改起来要经过漫长的审批。SDD 的规格是演进的——规格 v1.0 → 实现 v1.0 → 反馈 → 规格 v1.1 → 实现 v1.1,持续迭代。
更重要的是:SDD 的规格是机器可读的(OpenAPI、JSON Schema),能自动生成代码、测试和 Mock。瀑布模型的 Word 文档做不到这些。
误区 4:"用了 TDD 就不需要 SDD 了"
❌ 错误观点
"我测试覆盖率 95%,不需要什么规格文档。"
✅ 正确理解
TDD 回答"代码对不对",不回答"做的东西对不对"。
一个测试覆盖完美的用户登录模块,可能完全没有考虑"密码重置邮件该发到哪里"这个业务问题。测试验证的是实现,规格定义的是意图。
两者互补:SDD 确定"做什么",TDD 验证"做得对不对"。
一个测试覆盖完美的用户登录模块,可能完全没有考虑"密码重置邮件该发到哪里"这个业务问题。测试验证的是实现,规格定义的是意图。
两者互补:SDD 确定"做什么",TDD 验证"做得对不对"。
误区 5:"Vibe Coding 只有不懂编程的人才用"
❌ 错误观点
"Vibe Coding 是给不会写代码的人用的,真正的程序员不需要。"
✅ 正确理解
Karpathy 本人就是顶尖程序员,他也在用 vibe coding。
Vibe Coding 的价值不在于"替代编程能力",而在于加速探索和验证。经验丰富的开发者用 Vibe Coding 做原型验证,用 TDD/SDD 做生产代码。
知道什么时候用 Vibe Coding、什么时候切换到严谨方式——这本身就是一种高级技能。
Vibe Coding 的价值不在于"替代编程能力",而在于加速探索和验证。经验丰富的开发者用 Vibe Coding 做原型验证,用 TDD/SDD 做生产代码。
知道什么时候用 Vibe Coding、什么时候切换到严谨方式——这本身就是一种高级技能。
误区 6:"SDD 只适合 API 开发"
❌ 错误观点
"SDD 就是写 OpenAPI 文档,只有做 REST API 才用得上。"
✅ 正确理解
SDD 是一种思维方式,不局限于 API。
- API 开发:用 OpenAPI
- 分布式系统:用 TLA+ 做形式化验证
- 业务行为:用 Gherkin (BDD)
- 事件驱动:用 AsyncAPI
- 数据模型:用 JSON Schema
核心是"先定义清楚做什么,再做"——无论用什么工具。
- API 开发:用 OpenAPI
- 分布式系统:用 TLA+ 做形式化验证
- 业务行为:用 Gherkin (BDD)
- 事件驱动:用 AsyncAPI
- 数据模型:用 JSON Schema
核心是"先定义清楚做什么,再做"——无论用什么工具。
误区 7:"选了一种就不能用其他了"
❌ 错误观点
"我们团队决定全面采用 TDD,所有代码都用 TDD 写。"
✅ 正确理解
最佳实践是根据功能的风险级别选择方法论。
同一个项目中:
- 核心 API → SDD + TDD
- 辅助脚本 → Vibe Coding
- 探索性原型 → Vibe Coding → 确认后转 SDD
如 RedMonk 分析师 Rachel Stephens 所说:"'Vibe Coding 和 SDD 不是对立阵营...不是非此即彼,而是'是的,而且'。'"
同一个项目中:
- 核心 API → SDD + TDD
- 辅助脚本 → Vibe Coding
- 探索性原型 → Vibe Coding → 确认后转 SDD
如 RedMonk 分析师 Rachel Stephens 所说:"'Vibe Coding 和 SDD 不是对立阵营...不是非此即彼,而是'是的,而且'。'"
误区 8:"AI 让方法论不再重要"
❌ 错误观点
"有了 AI 编程助手,用什么开发方法论都无所谓了。"
✅ 正确理解
恰恰相反——AI 让方法论比以往更重要。
人类写的代码有歧义,代价是几小时的调试。AI 生成的代码有歧义,代价是数千行听起来合理但微妙错误的输出。
在 AI 时代,方法论的核心价值变了:
- TDD:用来验证 AI 生成的代码是否正确
- SDD:给 AI 提供精确的输入约束
- Vibe Coding:利用 AI 的速度快速探索
AI 是引擎,方法论是方向盘。没有方向盘的引擎,只会跑偏。
人类写的代码有歧义,代价是几小时的调试。AI 生成的代码有歧义,代价是数千行听起来合理但微妙错误的输出。
在 AI 时代,方法论的核心价值变了:
- TDD:用来验证 AI 生成的代码是否正确
- SDD:给 AI 提供精确的输入约束
- Vibe Coding:利用 AI 的速度快速探索
AI 是引擎,方法论是方向盘。没有方向盘的引擎,只会跑偏。
误区速查表
| # | 误区 | 真相 |
|---|---|---|
| 1 | Vibe Coding 会取代一切 | 快速验证和长期质量是两个不同需求 |
| 2 | TDD 太慢不值得 | 初始慢 15-35%,但长期更快 |
| 3 | SDD 就是瀑布模型 | SDD 的规格是活的、机器可读的 |
| 4 | TDD 够了不需要 SDD | TDD 验证代码,SDD 验证方向 |
| 5 | Vibe Coding 只给新手用 | 顶尖开发者用它加速探索 |
| 6 | SDD 只适合 API 开发 | SDD 是思维方式,适用于各种场景 |
| 7 | 选了一种不能用其他 | 同一项目中可以按功能灵活选择 |
| 8 | AI 让方法论不重要了 | AI 让方法论比以往更重要 |
📌 本节核心要点
| 误区 | 真相 |
|---|---|
| Vibe Coding 会取代一切 | 快速验证和长期质量是两个不同需求 |
| TDD 太慢不值得 | 初始慢 15-35%,但整个生命周期更快 |
| SDD 就是瀑布模型 | SDD 的规格是活的、机器可读的、持续演进的 |
| TDD 够了不需要 SDD | TDD 验证代码正确性,SDD 验证产品方向 |
| Vibe Coding 只给新手用 | Karpathy 等顶尖开发者用它加速探索 |
| SDD 只适合 API 开发 | SDD 是"先定义清楚再做"的思维方式 |
| 选了一种不能用其他 | 同一项目中可以按功能灵活选择 |
| AI 让方法论不重要了 | AI 让方法论比以往更重要——歧义成本放大了 |
知识检查
问题 1:为什么说"AI 让方法论比以往更重要"而不是"AI 让方法论过时了"?
查看答案
因为 AI 放大了歧义的成本。在人类写的代码中,歧义的代价是几小时的调试。但在 AI 生成的代码中,歧义的代价是数千行听起来合理但微妙错误的代码。
- TDD:用来验证 AI 生成的代码是否正确
- SDD:给 AI 提供精确的输入约束
- Vibe Coding:利用 AI 的速度快速探索
AI 是引擎,方法论是方向盘。没有方向盘的引擎,只会跑偏。
问题 2:有人说"我测试覆盖率 95%,不需要规格文档"。这个观点有什么问题?
查看答案
这是误区 #4。TDD 回答"代码对不对",不回答"做的东西对不对"。
一个测试覆盖完美的用户登录模块,可能完全没有考虑"密码重置邮件该发到哪里"这个业务问题。测试验证的是实现,规格定义的是意图。两者互补:SDD 确定"做什么",TDD 验证"做得对不对"。
问题 3:判断以下说法的对错,并说明理由:
- "SDD 就是瀑布模型换了个名字"
- "Karpathy 提出了 Vibe Coding,说明他自己也这么写代码"
- "同一个项目里不能用两种不同的方法论"
查看答案
- 错。SDD 和瀑布的关键区别:SDD 的规格是活的(随需求演进)、机器可读的(能自动生成代码/测试/Mock),瀑布模型的文档是冻结的 Word 文档。
- 不确切。Karpathy 提出 Vibe Coding 是描述一种现象,不代表他所有项目都用这种方式。他在 2026 年还提出了更系统化的 "Agentic Engineering"。
- 错。最佳实践正是按功能灵活选择:核心 API 用 SDD+TDD,辅助脚本用 Vibe Coding,原型用 Vibe Coding 后转 SDD。
下一节预告
避开误区后,来做几道练习题巩固一下。