Lobsters 97 points ⭐⭐⭐⭐⭐ 5星

A Sufficiently Detailed Spec is Code

By Gabriella439 | Haskellforall | March 2026

核心观点

两个常见误解:
  • 误解1:规范文档比代码简单 → 实际上,要让规范足够精确以可靠生成代码,规范必然会变成代码
  • 误解2:规范工作比编码更需思考 → 实际上,当优化交付速度时,规范文档会变成"AI生成的slop"

关键亮点

1. 详细规范 = 代码

作者以 OpenAI 的 Symphony 项目为例,这个项目的 SPEC.md 文件实际上包含:

  • 数据库模式的详细 prose dumps
  • 类似代码的并发控制算法
  • 显式"babysat the model"的配置摘要
  • 甚至是伪代码
"当你想让规范文档足够精确以可靠生成可工作的实现时,你必然会把这个文档'扭曲'成代码或强烈类似代码的东西。"

2. Dijkstra 的解释

作者引用了 Dijkstra 关于"narrow interfaces"的观点:

  • 跨越接口的通信工作必须被添加
  • 接口的改变很容易增加双方的工作量
  • 所以现在偏好"窄接口"

3. 不稳定性问题

即使有详细规范,从规范生成代码也不能可靠工作:

  • 作者尝试用 Claude Code 按照 SPEC.md 实现 Symphony → 失败
  • 即使"成功"(无错误),代码也只是默默空转而不完成任务
  • YAML 规范极其详细,但大多数实现仍不完全符合规范

4. Slop 问题

当优化交付速度时,规范文档质量会下降:

  • Symphony 规范读起来像"AI生成的slop"
  • 缺乏连贯性、目的性或对全局的理解
  • 规范文档变成"规格化的句子袋子"

结论

规范从来不是节省时间的工具。如果你优化交付速度,最好直接编写代码而不是通过中间规范文档。

核心原则: "garbage in, garbage out" —— 你无法输入一个缺乏清晰度和细节的文档,然后期望编码代理可靠地填补这些空白。

相关链接