软件工程圈子里现在有个根深蒂固的假设:

只要 AI 能帮我们写代码写得更快,我们就能造出更多东西,跑得比谁都快。

但是,这个假设漏了关键的一步。

写代码,和把代码集成起来、维护它、信任它,完全是两码事。

我们正在发现一个残酷的事实:验证(Verification)的速度,根本跟不上生成(Generation)的速度。

image

我觉得,在这个环境下能活下来的工程师,绝不是那个能用 AI 啪嗒一下吐出最多代码的人。

而是那个能盯着屏幕上涌出来的代码,冷静地决定“什么能活,什么得死”的人。

当生成变得免费,信任就成了奢侈品

image

我们现在正处在生成式 AI 的大爆炸中心。

代码、图片、视频、文档,所有这些东西的生成成本,跟以前的人力成本相比,正在无限趋近于零。

在软件工程这行,能写很多代码,传统上一直被等同于“高产”,甚至等同于“有创造力”。

但这个等号,现在失效了。

我们能生成的代码比以往任何时候都多,速度比以往任何时候都快。

但这有个毛用?

数量本身已经失去意义了。

image

要搞清楚到底发生了什么,我们得稍微借用一下认识论的概念。

认识论是哲学的一个分支,它专门把“真知识”和“不是知识的东西”区分开来。

光有经验不是知识。
重复权威人士说的话不是知识。
基于经验瞎扯淡也不是知识。

只有当一个陈述内部逻辑自洽、能公开测试、并且能在“敌对审查”下活下来时,它才有资格成为知识的候选人。

举个很硬核的例子:军事硬件。

一辆坦克的价值,不是在设计实验室里确定的,也不是靠宣传册吹出来的。

它的价值,只有在实际战斗中扛住了攻击,才能被证明。

在没面临压力、抵抗和敌对条件之前,谁也没法严肃地宣称它有多有效。

这道理放在想法、设计和代码上,一模一样。只有在被攻击的时候,它们的价值才会暴露出来。

卡尔·波普尔把这事儿说得很绝:源头不可信。

不管一个说法是出自著名科学家、资深工程师,还是一个大语言模型,都不重要。

重要的是,这个说法能不能在“证伪”的尝试中活下来。

知识是通过猜想和反驳增长的,而不是靠自信的断言。

AI 本质上是个“瞎猜”机器

说到底,生成式 AI 就是个“猜想引擎”。

它吐出的每一行代码,都是关于“系统该怎么运行”的一个理论假设。
它给出的每一条解释,都是一种解读。

所有这些东西,都只能算临时的。

AI 生成的一切,都应该被视为一个“待定理论”,然后被扔进严酷的测试和批评里,看看能不能活。

其实在 AI 出现之前,这事儿就是真理。

这也是为什么我们发明了代码审查、Lint 工具和持续集成(CI)。

我们知道人会犯错,初稿通常都是垃圾,只有结构化的批评能救我们。

CI/CD 管道、单元测试、集成测试,本质上都是把代码扔进“敌对审查”的机制。

从这个意义上说,波普尔的认识论早就嵌入在我们的工作流里了。

但现在变的是规模。

2016 年,Hatton 教授和他的团队发表了一篇论文,研究软件代码库的长期增长率。

那时候还没有 GenAI。他们的发现惊人地一致:历史上,软件项目的增长率大约是每年 20% 的复合增长率(CAGR)。

按这个速度,一个代码库大概每 4 年翻一番。

注意,这论文描述的是历史上代码库实际是怎么长的,不是理论最大值。

现在,如果 AI 真的把开发者的生产力提上去了,会发生什么?

如果生产力翻倍,CAGR 冲到 40%,代码库翻倍的时间就缩短到大概 2 年。
如果生产力涨 5 倍,我们接近 100% 的 CAGR,代码库每年翻一番。

这复利效应是很恐怖的。一个 5 倍的生产力提升,如果持续 10 年,可能意味着代码体积增加 165 倍

一个中等规模的 10 万行代码(LOC)项目,可能会变成 1 亿行。

为了让你有概念:Linux 内核进化了三十年,也就才到 4000 万行代码。

我们正在走向“怪兽代码库”的时代。

image

谁来审查审查者?

这预测肯定会有人跳出来反对。

首先,20% 的 CAGR 是 LLM 之前的旧数据,拿来预测 LLM 之后的世界,逻辑上有点硬伤。

但历史趋势就是个基准线。如果趋势没变,那啥事没有;如果趋势断了,我们就得搞懂新环境。

其次,软件的增长是受复杂度限制的,不光是打字速度。

一个 1 亿行的代码库,不管你写得多快,可能根本没法构建或者没法维护,因为集成的复杂度增长比线性快多了。

如果我们生成代码的速度,超过了我们能管理集成复杂度的速度,我们造出来的系统就会在自己的重量下崩塌。

核心问题来了:我们的验证系统能跟上吗?

以前,审查过程是可以跟代码库同步增长的。代码每年长 20%,人类的审查能力勉强能跟上。

但如果代码量是成倍增长,而不是百分比增长,旧的平衡就碎了。

我们从“增量增长”变成了“批量生产代码”。

这时候,注意力成了最稀缺的资源。

当生成的输出爆炸式增长,价值就从“生产”转移到了“筛选”。

关键问题变成了:我们要怎么把有限的人类注意力,引导到机器生成的代码海洋里最重要的风险上?

没有现实可行的路子,除非我们也用 AI 来验证。

光靠人肉审查,根本跟不上机器规模的生成。

AI 得帮我们高亮有用的东西,指出潜在的约束违规,检测行为漂移,减轻审查的负担。

验证必须部分自动化,否则系统直接瘫痪。

这时候有个最明显的反对意见:如果生成代码的 AI 有缺陷、会幻觉,那审查代码的 AI 凭啥就没缺陷?

这不是错上加错吗?这就是所谓的“无限倒退”问题——我们需要 AI 查 AI,那谁来查那个查人的 AI?

答案在于“专业化”。

审查 AI 不需要是个通用智能。

它得是个专注于检查特定属性的工具:类型正确性、项目风格一致性、架构边界违规,或者基于属性的测试抓到的行为漂移。

用来审查的模型,可以跟用来生成的模型不一样——更小、更保守。

审查 AI 不需要对代码“好不好”发表意见。

它的任务是把异常情况扔给人类看。

它就像个不知疲倦、速度极快、但最终会犯错的初级审查员,工作就是标记任何奇怪的东西,然后让高级工程师拍板。

目标不是消灭人类判断,而是聚焦人类判断。

这也是“护栏”该待的地方。

护栏主要应该坐在验证层,而不是生成层。

光想约束生成,就像想在设计图纸上阻止所有烂坦克设计一样天真。

更稳健的做法,是对每个设计进行严酷的批评和压力测试。

与其把审查模型当成主要控制机制,不如升级我们的验证方法。

反驳,才是未来的核心竞争力

还有一种反对声音来自经济学。

也许未来不是怪兽代码库,而是极小的、高杠杆的代码库。

如果代码变得不值钱了,写高效、可复用抽象的动机就变强了。

为什么要生成一千行样板代码,如果十行配置文件加 AI 就能搞定?

这有可能。

但哪怕是极小的代码库,也需要验证它那极小的一部分,而且杠杆越高,任何一个错误的爆炸半径就越大。

不管代码量是膨胀还是收缩,验证的负担只是转移了,不会消失。

稀缺的资源始终是:投对地方的人类注意力。

如果 GenAI 把猜想规模化,ReviewAI 就得把反驳规模化。

还有人会说,代码量的增长最终会遇到市场饱和。

我们没那么多有意义的问题要解决。到了某个点,生成更多代码就是制造噪音和技术债务。

但这假设是“问题表面”快饱和了。并没有。

看看印度这样的国家。大规模的基础设施缺口、污染管理、物流低效、医疗接入、教育质量、城市规划、农业优化——这些都不是边缘问题。

它们是系统级挑战,需要大规模的协调、监控、仿真、自动化和优化。这些都越来越依赖软件。

哪怕在发达国家,软件对物理系统的渗透也还没完:能源网、水务系统、公共交通、制造、气候建模、机器人、生物科技。

历史上,当产能扩张时,需求往往会扩张到以前被认为不可行的领域。

限制因素很少是缺问题,而是缺钱和缺协调。

工程这个领域,得把这个变化内化成基因。

这行一直依赖于把“能用的东西”和“看起来能用的东西”分开。

有造东西的经验不代表它可靠。
能在对抗性测试里活下来,才代表可靠。

面对代码量可能以前所未有的速度复合增长,我们没有慢慢演进化规范的本钱。

我们需要现成的、成本可控的验证工具,直接嵌入开发工作流。

我自己在做 AI 辅助代码审查时,就在构建这样的工具,当 diff 被提交到 git 仓库时自动触发审查。

想法很简单:把每一次变更都当成假设,对它进行系统的攻击。

某种意义上,这就是嵌入在 CI/CD 里的应用波普尔认识论。目标不是减慢生成,而是让批评变得丰富。

我不宣称这解决了所有问题。

工具还很早期,方法都是实验性的,无限倒退的担忧也是真的。

但我们是时候认真对待“ReviewAI”这个技术栈了。

image

GenAI 让猜想变得廉价。
复合错误的真实风险是存在的。

如果我们不把反驳变得同样强大和普及,我们就有可能淹没在自己的输出里。

AI 时代的工程未来,不是由我们能生成多少决定的,而是由我们多严格地决定什么能存活决定的。

而那个“什么能存活”的决定,归根结底,还是人的责任。

我个人很希望,“反驳”这个概念,在行业里能像“生成”一样被认真对待。

参考链接:
https://learningloom.substack.com/p/the-future-belongs-to-those-who-can