Claude 不是编译器

Claude 不是编译器 图片 1

2025年初,我写道Claude 是编译员吗?当时,我的回答是:我不知道。

我现在很确定答案是“不,那是分类错误,比编译器更好。”但这需要一些拆解。

计算机程序以复杂和挑剔著称。程序运行在极其精确的水平上。没有“挥手”指令。而高级目标则严重缺乏明确规定。

在高度风格化的世界观中,软件被层层构建,每一层添加规格并隐藏“不必要的”细节。 愿景变成战略,产品计划变成编码计划,代码变成二元对立。 每个步骤由不同的角色负责:执行、副总裁、项目经理、架构师、工程师、编译员。

关键是,每一步都涉及做出许多决策。这就是提高规格水平的含义。(这就是为什么我招聘工程师时的两个关键指标之一是判断力。另一个是礼貌。)

底层,从源代码到二进制,是编译器的功能。 编译器做了很多决策!内联、寄存器分配、是发出警告还是直接拒绝程序。 这些决策至关重要:它们驱动性能、系统稳定性、可预测性和故障模式。 编译器工程师的工作是安排编译器做出持续且良好的决策。

一个优秀且值得信赖的编译器让软件工程师免于做出这些决策。大多数工程师对编译器的工作原理知之甚少;他们不需要这样做才能有效。

2025年,我们使用的是用大型语言模型生成较小的代码块。 在这种思维模型中,编码代理可能作为软件工程师和传统编译器之间的新层。 它“编译”自然语言成代码,做决策让工程师无需亲自操作。 它的价值与其可靠性和决策规模成正比。

问题是,这种高度风格化的世界观是错误的。 抽象泄漏和层次摩擦.即使他们不做, 我们也会挑出漏洞。

跨层工作极其宝贵;机械同情很重要。

部分原因是帝国大厦建成不到一年时间, 而且预算内(!!),通过系统地跨层工作完成了。 例如,在决定外部镀铬-镍钢包覆时:

无论是建筑师、建筑商还是分包商,都认为没有充分协商就无法处理这一复杂的施工技术问题。 因此,经过充分的初步讨论,召开了一场包容性会议,出席者包括业主代表、建筑师和施工方、 卷材分包商、负责制造和安装的金属工人,以及负责在各个准备阶段测试所有板材的检查员。

说出来听来很明显。

然而,我们在实践中系统性地失败了。我只能想象那些金属工人们的喜悦,他们有机会引导设计,让它不再缓慢难行。

我们失败的部分原因是对什么值得去问的无知。 这是有原因的最优秀的高管对行业有深厚的了解.我也怀疑其中一部分是轻视(“一个线路金属工人能告诉我什么? ”)。但很大一部分也是沟通和组织开销。 层的存在是有原因的——信息隐藏使组织能够扩展。

Claude 比编译器更好,因为它可以跨栈垂直工作。 LLM现在谈论战略、产品、架构、代码和机器码。 它(目前?)无法像有经验、敬业的人那样完成大多数单独任务,但它可以完成所有任务, 无需安排会议或征求许可。

这里有一个具体的例子。exe.dev虚拟机有漂亮的域名:vm-name.exe.xyz.当我们启动一个新虚拟机时, 会添加一两个CNAME条目。很简单,对吧?

但我们的虚拟机启动得很快,快到即使我们在创建虚拟机之前创建了DNS条目,用户仍然得坐在那里等待DNS传播,有时需要几分钟而不是几秒钟。

我们做了显而易见的事:我们自己编写了DNS服务器,这样DNS总是能立即匹配真实来源。生活很美好。

但是延迟很重要, 所以我们添加了区域。就这样,DNS又变成了长杆,因为所有DNS都来自俄勒冈。 此外,部署时还会导致极小的DNS中断。 为了解决这个问题,我们现在只需要一个地理分布但完全一致的DNS服务器。

我们做了理智工程师面对难题时会做的事:作弊。我们为我们量身定制了一个分布式DNS服务器。

目标明确:降低远离俄勒冈州的用户延迟,提升正常运行时间的弹性。 但其他的就不一样了。我们必须弄清楚从具体的行为(尤其是在各种失败条件下), 到它如何融入整体公司计划,再到最能实现这些目标的架构,甚至细节实施。

我们亲自讨论了最高层次的战略和架构决策。我们会做一个相当通用的DNS服务器,并在行为调整上加一层,采用枢纽辐射模型,采用仅附加复制策略,并在边缘实现持久化。

剩下的就是真正建造它。

我让大型语言模型研究分布式DNS系统的标准设计,教我DNS的核心和特点, 指出历史上的安全缺陷,探索替代实施策略(AXFR/IXFR? 谢谢不行),研究开源产品,解决失败模式,并规划测试策略。

一旦我有了初步的设计草图,看起来很有希望,我就促使多个并发代理循环构建整个系统, 包括测试和对抗性代码审查。他们提出了许多问题——从主要结构方法到线条级别的规范问题, 涵盖了各个细节层面。当我回答这些问题(或撤回那些引发后悔的答案)时,我慢慢将所学转化为非常简洁的书面指导, 将重要的决策编码起来。

然后我让新代理对比已完成的实现,寻找有趣的偏差。令人震惊的是,许多重要决定从未被询问,只是做出——而且方式不同。

举个例子。复制采用了相当明显的方法:通过询问自上次已知条目以来的所有内容来追赶进度, 然后进行长轮询以获取新条目。有一个丑陋的转折:数据库回滚。 虽然罕见,但确实会发生,而且它们违反了“仅添加”的合同。

特工们注意到了这一点,并用截然不同的方式解决了这个问题。 我最终确定的设计是给每一行都设定一个“时间线”字段,比如“你生活在哪个时间线? ”这些请求是随机生成的,每个“自第N行以来的条目”同步请求都会包含边缘服务器对第N行的时间线值。 如果时间线不匹配,我们知道历史被篡改,会完全重新同步。

不同代理构建的系统之间也存在明显的风格差异。克劳德和Codex都同意,克劳德创造了一个更优雅的系统,但Codex更为详尽。

我逐一列出主要的分歧点,进行了实验,然后添加了更多的书面指导。

然后我又重复了一遍差分规格分析过程, 做了两次。我知道我的格言.

计划扔掉一个;反正你会的。

—— 弗雷德·布鲁克斯

如果你打算扔掉一个,你也会丢掉两个。

—— 克雷格·泽罗尼

当我准备建造一个守护者时,我积累了一份疤痕组织文件,经验上足以指导特工在每层重要决策中,从高层目标到建筑师......

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论