Google DeepMind 研究副总裁 Benoit Schillings 在 AI Engineer 的这场分享里说了一句很狠的话:代码已经结束了,但还有大量事情要做。本文整理这场演讲,并结合我自己的 AI 编程 / Harness 笔记,讨论为什么未来的瓶颈不再是写代码,而是规格、验证、安全、架构和新型软件语言。原视频:https://www.youtube.com/watch?v=1P1hJ36rxM0
“Software engineering is not about writing code”
Benoit Schillings 这场 20 分钟演讲,表面主题是 AI 写代码,真正讲的是软件工程的重心迁移。
他不是传统 ML 出身。一年半前还在 Google X,做过 Waymo、Google Glass 这类“登月项目”。现在在 Google DeepMind 带研究团队,目标很具体:做出 1 个月到 1 年后能让 Gemini 变强的技术。太近的是产品工程,太远没人能预测。这个时间尺度本身就很有意思:前沿 AI 研究已经变成“短未来工程”。
演讲里最重要的一句话是:software engineering is not about writing code。写代码只是软件工程里最容易被看见的部分。真正难的是在几千万行代码里做改动,理解系统约束,管理安全、架构、硬件优化和未来十年的后果。
这句话和 Karpathy 最近反复说的 spec / harness / verification 是同一条线:模型越来越会生成,人的价值正在从“敲出实现”迁到“定义目标、约束环境、验证结果”。
软件开发经历了三段瓶颈迁移
Benoit 用自己的职业史讲了一个很好的时间轴。
他写了 45 年代码,从 Apple II、Commodore 64 的汇编开始。写汇编的人天然怀疑编译器;用 C++ 的人又怀疑垃圾回收;现在他也在用 Python 和 vibe coding。技术代际的阻抗,不是今天才有。
他把软件开发的限制分成三段。
| 阶段 | 核心瓶颈 | 代表方式 |
|---|---|---|
| 机器受限时代 | 榨干硬件性能 | 汇编、手工优化 |
| 云时代 / 模块化时代 | 人脑管理复杂度 | 函数、库、模块、架构 |
| AI frontier | 确保生成物符合真实意图 | 规格、验证、安全、架构判断 |
早期机器很贵,程序员要从机器里挤出最后一点性能。后来算力变便宜,很多问题可以 brute force,瓶颈变成人脑:人只能同时 hold 住有限上下文,所以我们发明模块、函数、库、接口,把复杂系统拆成可管理的块。
现在这个前提正在变。模型上下文会越来越长,生成代码的能力已经超过人类日常手写。写一个函数的细节不再是优势。人的新角色更像架构师:判断这段代码是否真是我们想要的,判断它放进系统后会有什么后果。
代码生成已经超人,但工程还没超人
Benoit 说,他已经很少让 Gemini 写一个函数后再觉得“我能写得更好”。微观代码写作时代基本结束。
但这不等于软件工程结束。真正的工程场景不是写一个函数,而是进入一家公司,面对 3500 万行 PHP,必须做一个不会炸掉系统的小改动。模型正在进步,但这里仍是前沿。
难点包括:
- 怎么把大问题拆成可管理的小问题;
- 怎么理解 10 年后不会后悔的架构取舍;
- 怎么同时考虑硬件优化、安全、组织协作和长期维护;
- 怎么在庞大代码库里发现隐藏耦合。
这也印证了 Jimmy Koppel 关于 AI 时代软件设计的判断:底层实现技能被自动化后,高层设计技能更贵。尤其是隐藏耦合、隐藏前置条件这种“改了不会立刻编译报错,但系统语义会坏”的东西,模型最难稳定处理。
所以“AI 会写代码”这件事反而把软件工程本体暴露出来了。过去很多人把工程能力误认为编码速度。现在编码速度便宜了,剩下的才是真正的工程能力。
训练数据用完后,代码模型会走向 self-play
代码是一个很特殊的领域。Benoit 解释了为什么 Google X 早在 2018 年就启动了 Pitchfork 项目,研究 ML 如何改善代码写作。
代码有两个优势:
- 数据多:GitHub 上有海量训练材料。
- 可验证:代码能运行、能编译、能跑单测,模型输出是否正确比很多领域更容易判断。
这两个条件把代码模型推到了今天。但一个新问题出现了:人类代码训练数据正在见顶。Benoit 提到一个数字:今天 GitHub 新增代码中大约 80% 已经是机器生成。人类持续提供新知识供模型挖掘的阶段快结束了。
DeepMind 的答案是 self-play。AlphaZero 不靠人类棋谱,只靠和自己下棋成为超人棋手。代码模型也可以做类似的事:自己生成挑战,自己求解,自己验证答案,甚至在一定程度上评价架构。
他用了一个很形象的类比:把一个优秀软件工程师关进房间两年,给披萨,让他变得更强。他会做什么?他会给自己设计可验证的挑战,一直练习。模型也可以这样做,只是规模变成几亿小时的 self-play。
这也是为什么 verification 会越来越重要。能不能自我训练,关键不在“能不能生成”,而在“能不能判断生成物好不好”。
代码经济学变了:写代码近乎免费,阅读代码会消失
演讲后半段最刺激的部分,是“代码经济学”的变化。
过去整个软件行业的流程、公司形态、工程文化,都建立在一个假设上:写代码很贵。现在这个假设正在崩掉。写代码接近免费,代码量会爆炸。
这会带来几个硬后果。
第一,设计和适配会变成核心问题。面对一座自动生成的代码山,系统怎样保持可靠?人类需要管的不是每一行,而是代码是否满足设计目标。
第二,代码 review 的意义会变。Benoit 预测一年后,Gemini 或其他模型生成的代码可能没人逐行看。就像今天没人看编译器输出的汇编一样。少数人会看,大多数时候不会看。
第三,软件流程必须重建。如果不再读每行代码,就必须有新的 guardrails:主动安全检查、规格约束、评估系统、架构级审查、自动回归。
这和 Harness Engineering 的“Guides + Sensors”非常一致。Guides 是前馈控制:规格、规则、设计约束、权限边界。Sensors 是反馈控制:测试、lint、静态分析、安全扫描、LLM-as-judge、线上观测。生成越便宜,控制系统越重要。
安全:不要只修漏洞,要让模型一开始写对
Benoit 提到 Mythos 一类模型能在代码中发现大量漏洞。短期看,这是好事:模型帮我们挖出人类没发现的安全问题。
但他马上指出,这会变成无尽循环。模型发现一层漏洞,人类修掉;模型变强,再发现更深一层;继续修。只靠“先生成,再扫描,再补丁”的模式,永远追在后面。
他认为更值得追求的是:训练模型从一开始就写出正确、安全的东西。
难点在于,安全不是通用模板。某段代码是否危险,常常高度依赖上下文。权限模型、数据流、业务语义、部署环境都会影响判断。这也是为什么“让模型写安全代码”比“让模型写能跑的代码”难很多。
这对企业工程有直接含义:AI coding 的安全治理不能只靠事后扫描。安全要求应该前移到规格、语言、框架和 harness 里。把“不能这么写”做成环境约束,而不是写完后再靠人肉提醒。
评估也要变:能跑通不等于工程好
Benoit 对 SWE-bench 这类 benchmark 不太满意。他的批评很直接:验证代码能运行并产出正确输出,只覆盖了软件工程的一小块。
真实工程还要关心:
- 是否安全;
- 是否可维护;
- 是否能迁移到大代码库;
- 是否保留了架构清晰度;
- 是否会让 10 年后的人后悔。
他建议多做开放式问题。比如文本压缩:给模型 10MB 文本,让它写出最好的无损压缩器,loss 同时计算压缩文件大小和源代码大小。这个问题没有一次性标准答案,可以不断优化,逼模型发明新算法。
这类评估更接近“工程能力”,因为它不只是判断模型能不能补一个 bug,而是看它能否在开放空间里探索、权衡、迭代。
从我的角度看,这也是 AI coding benchmark 最大的缺口:我们太会测“任务完成”,太不会测“系统后果”。而软件工程最贵的,恰好是系统后果。
代码不一定还要写给人看
演讲里还有一个大胆判断:既然写代码的痛苦消失了,为什么还要用为人类设计的语言?
Python、JavaScript、C++ 都是为人读写设计的。它们方便、表达力强,但并不天然安全,也不天然可靠。未来如果主要由模型写代码,就可以把“写起来舒服”这个约束拿掉。
Benoit 提到两种方向:
- 使用更强类型、更难写但更安全的语言;
- 借鉴 Lean 这类形式化证明系统,把正确性负担更多压到模型身上。
更激进一点,未来的模型专用语言甚至不需要人类可读。
这听起来反直觉,但历史上并不陌生。多数程序员不读汇编输出,不读中间表示,不读机器码。我们真正关心的是:上层意图是否能被可靠编译成下层行为。AI 生成代码后,代码本身可能也会变成一种中间表示。
这会改变“可维护性”的定义。过去可维护性很大程度是“人能读懂”。未来可能变成“系统能验证、能重构、能证明、能迁移”。人类读不读每一行,反而不再是唯一标准。
多模态推理:软件工程不是 token 链
Benoit 还谈到一个容易被忽视的点:写代码不是纯 token 活动。
人类理解程序时,经常在脑子里画图:模块图、数据流、状态机、时序图、依赖关系。软件设计本来就很视觉化、空间化。只把代码看成一串 token,能走很远,但有上限。
Gemini 从一开始就是多模态模型。Benoit 认为,模型需要学会用空间表示、动态表示来解决问题。这对复杂系统很关键,因为架构不是线性文本,它更像一张会变化的图。
这和大型代码库工具的发展方向也一致。未来的 AI coding 不只是“读文件 → 改文件”,而是建立系统地图:调用图、数据流、权限边界、故障传播路径、测试覆盖洞。模型如果能在这些表示上推理,工程能力会跨一大步。
超出代码:免费实验会冲击科学
最后,Benoit 把话题从代码扩展到科学。
代码是一种通用问题求解语言。一旦写代码和跑实验变得近乎免费,很多领域的探索速度都会变化。特别是化学和生物。
他说,人类对化学的理解其实很窄。分子超过 20 个原子,我们就很难直觉判断它会怎样;如果能组合 10000 个原子,就已经接近生命的复杂度。生物更像“自然做了极好的工程,但文档写得极差”。模型可能帮助我们发现那些人类看不见的关系。
这部分不是软件工程,但和整场演讲的底层逻辑一致:AI 的价值不只是自动化人类已有流程,而是用另一种搜索方式去发现“我们本来就在眼前但看不见”的东西。
我的补充:代码结束,验证没有结束
这场演讲和我之前几条笔记合起来,结论很清楚:代码生成会越来越便宜,软件工程不会因此消失,只会换一层瓶颈。
未来人类工程师最该守住的不是手写代码速度,而是五件事:
- 规格:把隐含意图写成可执行、可验证的 source of truth。
- 架构:把复杂系统拆成未来不会后悔的形状。
- 验证:用测试、评估、安全扫描、观测,把“看起来对”变成“真的对”。
- 约束环境:用 harness、工具、权限和流程,让模型少走坏路。
- 系统后果判断:理解局部代码改动在长期系统里的代价。
“代码结束了”不是说程序员没事做了,而是说旧的身份锚点不稳了。过去你证明自己靠写得快、写得熟、写得多。以后这些会贬值。
真正稀缺的是:你能不能定义什么值得生成,能不能让生成物被验证,能不能看懂系统会怎样被改变。
代码可能不再是人类每天阅读的主体。软件工程仍然在,只是它从手指迁回了判断。
资料来源
- 视频:Benoit Schillings, Software engineering is not about writing code, AI Engineer, 20:26, https://www.youtube.com/watch?v=1P1hJ36rxM0
- 关联笔记:Karpathy spec / harness / verification、Harness Engineering、AI 时代软件设计技能价值









