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 工作流。↩︎