Claude 不是编译器:Vibe‑Engineering 的崛起

Claude 不是编译器:Vibe‑Engineering 的崛起

LLM 作为垂直集成资源,而非编译器

大型语言模型(LLM),例如 Claude,并不是编译器,因为它们并非仅仅把高级规范翻译成低级实现。相反,它们充当垂直集成的资源,能够横跨整个软件栈——从高层业务策略和产品规划到架构设计乃至机器码,都能发挥作用。

传统编译器消除了工程师在寄存器分配或内联等低层决策上的需求,而 LLM 则让工程师能够在栈的每一层同步快速迭代决策。这一转变把工程师的角色从“写代码”转向“vibe‑engineering”:即通过一系列架构和战略决策,引导代理(agent)最终产出可投入生产的系统的过程。

案例研究:构建分布式 DNS 服务器

为展示垂直集成的威力,Bryan Mikaelian 讲述了为 exe.dev 开发地理分布式、一致性 DNS 服务器的过程。该项目旨在降低俄勒冈州之外用户的延迟,并提升可用性弹性。

开发流程

与手动编写代码不同,整个过程采用了与 LLM 的高频反馈循环:

  1. 调研与规划:使用 LLM 调研标准的分布式 DNS 设计,探讨安全缺陷,并评估替代实现策略(如 AXFR/IXFR)。
  2. 迭代原型:启动多个并发代理循环,让它们构建完整系统,包括测试和对抗性代码审查。
  3. 差分规范分析:通过比较不同代理(例如 Claude 与 Codex)的实现,工程师识别出代理隐式做出的关键决策。此“差分规范分析”揭示了系统行为需要显式编码的地方。
  4. 决策编码:工程师将获得的洞见转化为一份“疤痕文档”——一套简洁的书面指导,统一编码跨层的重要决策,从高层目标到并发缓存的具体数据类型。

技术实现细节:处理数据库回滚

在差分分析过程中出现了一个关键决策:如何处理破坏复制“追加仅”合约的数据库回滚。最终设计为每行数据添加一个 “timeline” 字段。每次同步请求都携带边缘服务器的 timeline 值;若检测到不匹配,系统将触发完整的清理重新同步。

Vibe‑Engineering 与 Vibe‑Coding 的区别

“vibe‑coding” 与 “vibe‑engineering” 之间存在根本区别:

  • Vibe‑Coding:将任务交给代理,让其自行决定如何将想法落地。此方式往往不可靠且缺乏监督。
  • Vibe‑Engineering:利用 LLM 加速在不同层级做决策的能力。工程师仍是主要决策者,使用代理探索设计空间并识别哪些决策真正重要。

在这种模型下,工程师可能只会“极少量阅读实际代码”,但他们仍保持对系统的深刻理解,因为他们主导了架构决策,并能够推理系统行为。

社区观点与反驳

在 Hacker News 上的讨论凸显了对此方法的若干关键担忧:

隐式决策的风险

一些批评者认为将决策外包给 LLM 可能危险。正如 @trjordan 所指出的,代理的“决策排放”(decision exhaust)——即它们在未被询问时自行做出的决定——可能导致隐藏的故障。另一些人,如 @cadamsdotcom,则认为一旦需求被理解,就应当在确定性代码中实现,而不是交给概率系统。

确定性差距

与确定性的编译器不同,LLM 是概率性的。@davidpapermill 与 @armchairhacker 指出,由于相同提示可能产生不同结果,LLM 不能像编译器那样被信任。唯一确保正确性的方式是通过严格的测试套件或穷尽的人为审查,这可能抵消 AI 辅助开发的速度优势。

“不要阅读代码”争议

对几乎不阅读生成代码的做法引发了强烈反弹。@xav_authentique 与 @borzi 表示,将代码直接投入生产而不阅读是一种危险的实践,忽视了软件工程的真实问题,这种思潮类似于过去盲目采用微服务的潮流。

DNS 架构批评

从技术角度看,一些用户质疑重新实现 DNS 服务器的必要性。@nunez 认为现有工具如 dnsmasqunbound 已能解决该问题,而 @torginus 警告说,ISP 与企业 VPN 的中间 DNS 缓存常常使服务器端的传播速度成为一个无论实现如何都难以根本解决的问题。


摘要:Bryan Mikaelian 认为,Claude 等 LLM 并非仅把自然语言编译成代码的编译器,而是垂直集成的资源,使工程师能够在整个软件栈上做出高层战略和架构决策。

标题:Claude 不是编译器:Vibe‑Engineering 的崛起

Sources