编译器本来也是要终结编程的

围绕 AI 编程代理是否会“终结编程”的说法,讨论者将其与编译器、COBOL、SQL 和可视化工具曾经承诺让非专家取代软件工程师的历史作比较——这些承诺大多只是重塑了工作,而非消灭程序员。评论者将确定性的编译器与概率性的 LLM 相对照,认为自然语言提示缺乏足够精确的契约,无法完全自动化软件设计、架构和调试,尽管它们确实能大幅加速日常编码。许多人预计编程以及其他白领工作会缩减,并转向编写规格、管理代理和更高层的产品思考;而另一些人则怀疑 LLM 是否能稳定地捕捉现实中混乱的需求,从而真正把人类移出闭环。

历史背景与此前几波“终结编程”的浪潮

  • 评论者回忆,COBOL、SQL、BASIC、4GL、可视化工具以及 RAD/低代码,都是让“普通人”也能编程的早期尝试,但都没有消灭程序员。
  • 说明早期的“自动编码”指的是取代手写机器码,而不是终结编程本身;编译器当年也曾被称为“自动编码器”。
  • 有人认为这些预测部分是对的:编译器消除了整层手工工作,并催生了更多、更高层级的编程。

LLM 能否与编译器相提并论?

  • 一方观点:LLM 辅助编程只是又一层抽象,类似从汇编转向 Fortran;“事实来源”可能会转移到规格/测试上。
  • 反对观点:这类类比不恰当;编译器实现的是精确、确定性的映射,并有明确定义的契约,而 LLM 是随机的、模糊的,而且总会返回某种输出。
  • 围绕确定性的争论:现代编译器很复杂,也依赖启发式方法,但仍必须保持程序语义;LLM 并不提供这种保证。

规格、自然语言与歧义

  • 有人认为,自然语言本质上就有歧义;想消除歧义,最终只会再次回到代码或形式化规格。
  • 也有人反驳说,很多业务流程本来就已经在工具和代理式工作流中使用类似自然语言的规则。

LLM 生成代码的质量与角色

  • 有人表示自己几乎不再“编程”了;LLM 生成了大部分代码,人类主要负责方向和审查。
  • 也有人说 LLM 会过度设计、犯“愚蠢”的错误,并在缺乏严格约束时产出混乱、难以维护的系统。
  • 对于顶级模型是否已经超过大多数开发者,存在分歧;有人认为这种说法过于夸张,或者高度依赖场景。

工作、经济与未来工作流

  • 强烈担忧是,AI 会显著减少对程序员和其他白领的需求;有人将其类比为汽车取代马匹。
  • 反驳意见:软件永远不会“完成”,人类仍然需要定义产品、应对变化的现实,并解决未充分定义的需求。
  • 有人预见到 2030 年代的工作流会是:代理负责大部分编码、测试和运维,人类负责指定行为、裁决边界情况,并管理“办公室政治”。
  • 也有人认为当前热潮只是又一个循环;工具会变化,但关于“软件应当如何构建”的争论会持续存在。