A sufficiently detailed spec is code
摘要:关于代理编码和规范文档的误解
这篇文章探讨了代理编码(agentic coding)的兴起,以及围绕其的一些常见误解,并指出当前实践与最初的期望存在差距。作者认为,尽管代理编码的倡导者声称可以通过规范文档生成代码,但这种说法具有误导性,主要源于两个常见的误解:
1. 规范文档比相应的代码更简单: 代理编码的倡导者将其视为一种外包形式,工程师编写规范文档,然后由代理执行。然而,要编写一个足够精确以可靠生成工作代码的规范文档,实际上需要将文档转化为代码或类似代码的形式。这与 Dijkstra 的观点一致,即精确的界面需要精细的代码设计。
2. 规范工作必须比编码工作更具思考性: 倡导者认为规范文档可以提高质量和工程实践。但作者认为,在当前技术公司追求速度交付的环境下,这并非理所当然。规范工作需要深思熟虑,而优化交付速度可能会导致缺乏连贯性和清晰度的规范文档。
具体案例分析:OpenAI 的 Symphony 项目
作者以 OpenAI 的 Symphony 项目为例,该项目声称是从规范文档生成的。然而,作者指出 Symphony 的 "规范"(SPEC.md)更像是伪代码,包含数据库模式的描述、代码片段,甚至是直接的代码块。这表明规范文档并没有取代代码,反而将其伪装成规范文档。
其他问题:可靠性和“垃圾进,垃圾出”
作者还强调了代理编码的可靠性问题。即使是像 YAML 这样的成熟规范,其实现也经常不完全符合规范。此外,规范文档的质量直接影响生成代码的质量。如果规范文档本身就是“垃圾”,那么生成的代码也必然是“垃圾”。
结论
文章最终认为,规范文档并非为了节省时间而存在。在追求交付速度的环境下,直接编写代码可能更有效。代理编码的成功依赖于高质量的规范文档,而这需要深入的思考和精细的表达。 当前的代理编码实践,往往因为规范文档质量不高,导致“垃圾进,垃圾出”的局面,未能实现其理想化的目标。