
AI Coding:计算机科学七十年控制实验的汇流点
今天,一个人可以对 Coding Agent 说:
给这个网站增加用户登录。使用现有组件,不要改变首页样式;补上测试,运行通过后再告诉我改了什么。
接下来,AI 会读取代码仓库,寻找现有规范,选择实现路径,修改多个文件,运行测试,根据报错继续调整,最后交付一组可以审查的代码变更。
如果把这段话拿给二十年前的程序员看,他可能不会把它称为“编程”。因为它没有变量,没有函数,没有类型,没有算法,也没有规定计算机每一步应该怎样执行。它更像一份写给人的任务说明。
但这恰恰是 AI Coding 最重要的变化:人类第一次开始大规模地用接近表达意图的方式控制程序,而不必亲自完成从意图到形式化指令的全部翻译。
从这个角度回头看,计算机科学过去七十多年的大部分历史,都可以理解为同一个漫长问题的不同答案:人类怎样才能更低成本、更可靠地控制一台只接受精确指令的机器?
机器码、汇编语言、高级语言、面向对象、函数式编程、领域专用语言、操作系统、数据库、API、开源软件、IDE、版本控制、持续集成……这些发明看起来属于不同领域,实际上都在缩短“人的意图”与“机器的行为”之间的距离。
LLM Coding 不是这段历史之外突然掉下来的答案。它是这些路径在今天的汇流点。
我们一直在用一种低效的方式控制计算机
传统编程有一个很少被重新审视的前提:人必须先把目的翻译成计算机能够执行的过程,机器才开始工作。
假设一个人想做一套订单退款系统。他真正关心的是:什么情况下可以退款,谁有权限批准,钱退到哪里,失败时如何恢复,用户会看到什么。
但为了让这件事发生,他或者他雇用的程序员还要处理大量中间工作:
- 选择语言、框架和数据库;
- 查找库和 API 的用法;
- 把业务规则拆成类、函数和数据结构;
- 处理类型、参数、依赖和配置;
- 编写不同模块之间的胶水代码;
- 根据编译错误、运行错误和测试结果反复修正;
- 让代码符合仓库原有的风格和工程约束。
这些工作当然有价值,但它们中的很大一部分并不是在创造新的业务判断,而是在做翻译:把人已经大致知道的东西,改写成机器可以接受的形式。
这就是传统编程的低效之处。
它不是指程序员工作不努力,也不是说编程语言设计失败了。相反,正是因为计算机极其严格、缺乏常识,人类才必须承担这笔昂贵的“形式化税”。机器不会替你补齐上下文,不知道“差不多”是什么意思,也不会主动猜测某条规则在异常情况下应该怎样处理。
过去,我们把这种限制当成计算本身不可改变的条件。今天才发现,它更多是人机接口的限制。
七十年计算机史,本质上是不断抬高控制层级
最早的程序员直接操作机器指令和内存地址。汇编语言把数字地址变成符号,高级语言让人描述循环、函数和数据,而不是逐条安排寄存器。编译器负责把高层表达翻译成底层指令。
后来,操作系统隐藏硬件差异,数据库隐藏磁盘读写,网络协议隐藏通信细节,库和框架把常见能力封装成可复用组件,云平台进一步把服务器、存储和部署变成可以调用的服务。
每一次抽象,都在让人少控制一些细节,多表达一层意图。
- 汇编语言与高级语言:省掉直接操作机器码和地址;为 AI Coding 留下结构清晰、可学习的代码表示。
- 编译器与类型系统:省掉手工翻译、检查大量底层约束;为 AI Coding 留下确定性的语法检查和反馈信号。
- 操作系统与数据库:省掉管理硬件、文件、进程和存储细节;为 AI Coding 留下稳定、可组合的系统接口。
- 库、框架与 API:省掉重复实现通用能力;为 AI Coding 留下可被模型调用和拼装的能力模块。
- IDE、LSP 与调试器:省掉手工寻找符号、错误和依赖;为 AI Coding 留下可机器读取的代码导航与诊断信息。
- Git、测试与 CI:省掉难以追踪、验证和撤销修改;为 AI Coding 留下可比较、可回滚、可自动验收的反馈闭环。
- 开源协作与互联网:省掉每个团队重复发明解决方案;为 AI Coding 留下海量代码、文档、Issue、Diff 与评审记录。
- 机器学习、Transformer 与强化学习:省掉手工为每种表达方式编写解析规则;为 AI Coding 留下从自然语言意图生成并修正程序的能力。
这些探索在历史上并不是为了 LLM 准备的,也没有一条预先写好的路线图。很多分支失败了,很多技术只解决了局部问题,彼此之间甚至长期相互竞争。
但它们最终共同创造了两个关键条件。
第一,软件世界变得高度结构化。现代代码仓库不只有源代码,还有文档、类型、依赖、测试、日志、提交记录、Issue、代码评审和自动化流水线。程序不再只是一堆文本,而是一套能够被阅读、修改、执行、比较和验证的工程环境。
第二,人类几十年的编程活动被外化成了数据。我们不只留下了“正确答案”,还留下了问题如何被讨论、错误如何被修复、一个版本如何变成下一个版本的痕迹。
AI Coding 不是 AI 偶然学会了写代码,而是软件世界终于积累到足以被模型阅读、模仿、执行和自我校验的程度。
计算机科学既为 AI 准备了教材,也为它准备了实验室。
LLM 补上的是过去所有抽象层都没能补上的一段
高级语言已经比机器码自然得多,但它仍然是形式语言。你必须遵守它的语法,明确数据类型,补全控制流程,并在所有重要分支上给出确定行为。
低代码、可视化编程和领域专用语言继续降低了一部分门槛,但代价通常是缩小表达范围。只要问题超出设计者预先设定的组件,使用者仍然要回到代码。
LLM 带来的不同之处,是它能够处理开放的、模糊的、依赖上下文的人类语言,再把这种语言映射到已有的软件抽象层上。
它不是严格意义上的编译器,因为同一条指令可能产生不同结果,也不能保证语义正确。更准确地说,LLM 像一个概率性的意图编译器:它先猜测人真正想要什么,再调用几十年软件工程留下的语言、库、工具和接口,把猜测变成可执行结果。
仅有代码生成还不够。真正改变编程方式的是 Agent 把模型接入了一个反馈循环:
理解目标 ↓ 读取仓库与环境 ↓ 制定并执行修改 ↓ 编译、测试、运行、观察 ↓ 根据反馈继续修正 ↓ 满足验收条件或交回人类
过去,人负责循环中的绝大多数步骤,计算机只负责执行。现在,AI 可以在循环里连续工作,人开始从每一步的操作者,变成目标、边界和停止条件的制定者。
这意味着编程正在从过程控制转向目标治理。
传统编程问的是:“机器下一步应该做什么?”
AI 编程越来越多地问:“最后要达到什么状态?什么不能发生?用什么证据证明已经完成?发生异常时,谁来决定?”
今天的现实已经开始接近这个判断
这种变化已经不只是代码补全率提高了多少。
2026 年,OpenAI 公布过一项内部实验:一个小团队在五个月里用 Codex 构建了一套约百万行代码的产品,人工没有直接编写任何代码。OpenAI 估计,项目耗时约为传统手写方式的十分之一。但这项实验真正值得注意的,不是“零行人工代码”这个标题,而是团队的工作发生了什么变化:工程师把精力放在设计环境、明确意图、构造反馈循环,以及让架构约束能够被 Agent 读取和执行。1
Anthropic 在 2026 年 6 月的 Economic Index 报告中也观察到,Claude Code 会话比普通聊天或 Cowork 会话表现出更高的自动化程度。换句话说,用户在编程环境中越来越少向 AI 索取一段建议,越来越多地把一段完整工作交给它执行。2
这两类证据都指向同一个方向:AI Coding 的单位不再只是“生成一段代码”,而是“接管一段包含观察、行动和验证的工作循环”。
当工作单位改变,人的角色也随之改变。过去的核心产物是代码;现在,越来越重要的产物是规格、测试、仓库规则、权限边界、工具接口和可观测性。它们共同构成 Agent 能否可靠工作的控制系统。
控制成本没有消失,只是向上移动了
如果因此得出“以后人只要随口说一句话,软件就会自动完成”的结论,就又走得太远了。
自然语言降低了表达门槛,却没有自动消除需求中的冲突。代码生成变得便宜,也没有让安全、可靠性、维护成本和真实世界责任变得便宜。
一个 Agent 可以很快写出登录系统,但它不会天然知道:
- 公司到底允许哪几种身份验证方式;
- 哪些数据属于隐私信息;
- 登录失败多少次应该锁定账户;
- 旧用户如何迁移;
- 哪些风险可以接受;
- 出现误判时由谁承担后果。
这些都不是语法问题,而是组织判断和现实约束。LLM 可以帮助发现遗漏、提出方案,却不能替利益相关者决定什么是值得接受的结果。
而且,AI 并不在所有任务上自动提高效率。METR 在 2025 年初进行的一项随机对照研究中,让 16 名熟悉各自开源项目的开发者完成 246 个真实任务。使用当时 AI 工具的任务平均反而多花了 19% 的时间。研究范围有明确限制——样本是高度熟悉大型代码库的资深贡献者,使用的也是 2025 年初的模型——但它至少证明了一点:能力存在,不等于生产率会自动兑现。任务熟悉度、模型能力、工具延迟、验证成本和工作流设计都会改变结果。3
同样值得警惕的是,生成速度越快,系统熵也可能积累得越快。AI 能在一天内生产过去几周的代码,也能在一天内生产过去几周的重复、耦合、错误假设和安全风险。如果没有测试、架构约束、代码评审和定期清理,更高吞吐量只会让失控来得更快。
所以,AI Coding 不是从“人类控制”变成“计算机自由发挥”,而是从一种控制方式转向另一种控制方式:
逐行指令 ↓ 目标 + 约束 + 环境 + 反馈 + 权限 + 责任
前一种控制细、慢、确定;后一种控制杠杆更大,但要求人更清楚自己要什么,也更懂得怎样验证。
真正值得掌握的是新的控制栈
如果代码越来越多地由 AI 生成,人类需要建立的就不只是 Prompt 技巧,而是一套新的控制栈。
1. 意图层:说清楚为什么做
先定义要改变的现实,而不是直接指定一个功能。谁会使用它,当前问题是什么,成功后什么指标或行为会发生变化?如果目的不清楚,Agent 只会更快地生产偏离目标的实现。
2. 规格层:把“好”变成可检查的条件
列出范围、非目标、约束、边界情况和验收标准。“做一个好用的搜索”无法验证;“输入中文关键词后,一秒内返回有权限查看的前 20 条结果,空结果给出建议”才接近可执行规格。
3. 环境层:让正确路径比错误路径更容易
把必要知识放进仓库,把命令、依赖和工具配置好,用类型、静态检查、权限和架构规则缩小 Agent 的自由空间。强模型进入一个混乱、不可观测的环境,依然会得到不稳定的结果。
4. 反馈层:让错误能够尽快暴露
编译、测试、日志、截图、监控、代码评审、用户反馈和版本回滚,都是控制系统的一部分。Agent 是否聪明很重要,但它犯错后能否被及时发现并纠正,往往更重要。
5. 责任层:明确哪些决定不能外包
涉及资金、隐私、安全、法律责任和不可逆操作时,必须设置人工审批与权限边界。AI 可以执行任务,却不能自动获得替人承担后果的资格。
这五层并不是 AI 时代才出现的新概念。恰恰相反,它们几乎全部来自传统软件工程。变化只在于:过去这些东西围绕人类程序员设计,今天它们也要成为 Agent 能够读取、调用和遵守的基础设施。
计算机科学没有被绕过,而是完成了一次惊人的自我递归
站在今天回头看,最有意思的地方不是“AI 终于会写代码了”,而是这项能力如何出现。
人类为了控制计算机,发明了编程语言;为了管理程序的复杂度,发明了抽象、模块、类型、测试和版本控制;为了共享这些成果,建立了互联网和开源协作;这些代码与协作记录又成为训练大模型的重要材料;大模型学会生成代码之后,再通过编译器、测试、终端和 Git 获得行动与反馈;最终,计算机开始帮助人类完成控制计算机本身的工作。
这像一次跨越七十年的递归:
人类编写程序控制计算机 ↓ 程序积累为语言、工具、仓库和数据 ↓ 这些积累训练出能够编写程序的模型 ↓ 模型反过来帮助人类控制计算机
因此,LLM Coding 既是对传统编程低效的一次突破,也是传统计算机科学最集中、最壮观的一次成果兑现。
它没有证明过去几十年的探索走了弯路。没有编程语言,模型就没有稳定的输出介质;没有开源代码,模型就没有足够的工程样本;没有编译器和测试,Agent 就没有可靠反馈;没有操作系统、API 和云服务,生成的代码也没有可以调用的现实能力。
AI 看似绕过了编程,实际上站在整部编程史之上。
结语:人类终于可以少写过程,多定义结果
过去,人类必须把大量时间花在告诉计算机“每一步怎样做”。这是一种必要却昂贵的控制方式,也把软件创造限制在少数接受过长期专业训练的人手中。
AI Coding 正在放松这个限制。代码不会立刻消失,甚至可能比过去更多;但它会越来越像一种由机器生成、供机器执行、由工具验证的中间产物。人类的稀缺投入将向上游移动:选择问题、定义目标、表达约束、设计反馈、判断结果,并承担责任。
这并不比写代码更轻松,只是更接近创造软件真正有价值的部分。
计算机科学花了七十多年,把人类控制机器的成本一层层压低。今天,LLM 第一次把“理解模糊意图”也接进了这条抽象链。我们还远没有解决可靠性、长期维护和责任归属等问题,但方向已经清楚:
未来编程的核心,不再是人能写出多少机器指令,而是人能否建立一个系统,让机器在正确的边界内,持续把意图变成可信的结果。
OpenAI, Harness engineering: leveraging Codex in an agent-first world, 2026-02-11。文中数据为 OpenAI 团队对内部项目的自述,不能直接外推到所有软件团队。↩︎ Anthropic, Anthropic Economic Index report: Cadences, 2026-06-26。↩︎ METR, Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity, 2025。该结果描述特定样本、任务与当时工具,不代表 2026 年所有 AI Coding 工作流。↩︎