编程并未被解决

“LLM 已经解决编程”的说法遭到工程师们强烈反驳,他们指出,写片段或移植代码与设计、验证和维护复杂系统是完全不同的事情。评论者把 AI 描述为对样板代码、重构和查错极其强大的加速器,但也表示代理式编码往往会产生脆弱、臃肿或难以理解的代码库,仍然需要有经验的人来负责架构、测试策略和责任归属。逐渐形成的共识是,AI 已经彻底改变了代码的生产方式,尤其是在常规任务上,但并没有消除软件工程中的难点,也没有消除对人类判断的需求。

“编程”被解决了吗?分歧立场

  • 一派声称“今天编程已经被解决”:前沿 LLM 能以通常人类水平或更高水平编写、阅读、移植和优化大多数语言的代码,尤其是在 CRUD、算法和重构方面。
  • 另一些人认为这种说法被夸大了:LLM 生成的代码仍然不如优秀的人类代码,尤其是在架构、长期可维护性和非功能性需求(NFRs)方面。
  • 还有人将“微观层面的编码”(函数、端点、移植)视为基本已解决,而“软件工程”(需求、设计、权衡、生命周期)则远未解决。

当前模型的能力与局限

  • 成功案例:大型移植(例如,数十万行 LOC 的 TypeScript→Rust)、重度 Agentic 工作流、桌游实现、显著的生产力提升(据称 10 倍以上)。
  • 批评者指出,这些往往是受约束的问题,且有强有力的判定标准(现有行为、测试套件),并不能证明从零开始的端到端系统设计已经被解决。
  • 长期规划、整体架构,以及面向未来的 API/类型设计,反复被提及为薄弱环节。

质量、垃圾代码与大规模代码审查

  • 许多人表示,AI 让弱开发者能产出大量他们并不真正理解的代码,压垮人工审查(每周数万到数十万行 LOC)。
  • AI 代码审查器经常只挑风格问题,却忽略深层设计缺陷;在没有强有人类监督的情况下,“AI 审 AI”被认为很危险。
  • 一些组织已经把 AI 生成的 PR 基本视为未经审查,这导致回归、可观测性丢失,以及隐蔽的正确性/性能问题。

测试、确定性与“理解”

  • 支持 AI 的一方:如果你有强规格和海量自动化测试,那么是谁/什么写的代码就不那么重要;测试和 fuzzers 也可以由 AI 生成。
  • 怀疑的一方:你仍然需要人类来定义该测试什么、解释需求,并注意那些未被明确说明的行为;否则代理只会优化测试里写明的内容,让其他一切逐渐偏离。
  • 关于“非确定性”的争论:有人说 LLM 的随机性并不比人类错误更糟;另一些人强调,黑箱、不可重复的生成并不等同于编译器或经过证明的库。

责任、风险与领域

  • 普遍共识是,责任仍然属于人类/组织;AI 不能被惩罚,也不能承担法律责任。
  • 有人认为大多数企业软件风险较低,AI 产生的垃圾代码“够用了”;也有人指出,即使是普通系统(支付、物流、医疗行政)在失败时也会造成现实世界的伤害。

对角色与技能的影响

  • 新的“技能”:编排代理、编写 AGENTS.md 和架构文档、设计规格与测试,以及把关合并,而不是手写代码。
  • 对“AI 过量使用”和技能退化的担忧:初级开发者可能永远发展不出深层问题解决能力;资深开发者则觉得自己数十年的编码经验被贬值了。
  • 许多人预见“代码苦力”式岗位会减少,但仍会需要能够推理系统、需求和权衡的人。