分析 AI 编程工具普及后,程序员应从代码生成能力转向批判性思维和代码评审能力的职业转变。
你好,我是 Shrijith。我正在开发 git-lrc,一个在每次提交时运行的 AI 代码审查工具。它完全免费、功能无限制,并且源代码公开在 Github 上。请给我们点个星标,帮助开发者发现这个项目。也欢迎尝试并分享你的反馈来改进产品。
那个假设遗漏了一个步骤。
编写代码不等同于集成它、维护它或信任它。
我们开始发现验证的扩展性不如生成那样高效。
我的观点是,在这种环境下蓬勃发展的工程师不会是能够 prompt 出最多代码的人。而是能够看待生成的东西,并可靠地判断什么应该保留下来的人。
这篇文章讨论的是为什么「反驳」这个技能即将成为核心,以及它对我们如何构建软件的影响。
我们正处于真正的生成式 AI 爆炸的中期。
代码、图像、视频、文档 —— 这些东西现在都可以以接近零的成本生成,相比于历史上以人力劳动为基线的成本。
在软件工程领域尤其如此,编写大量代码的能力历来与生产力甚至创造力相关联。
这种关联正在崩解。
我们能生成的比以往任何时候都多,速度比以往任何时候都快。
产出量本身已经失去了意义。
要理解什么在改变,有必要退一步,从认识论中借鉴。
认识论是哲学的一个分支,它将知识与非知识区分开来。
仅仅有某样东西的经验并不是知识。
重复所谓权威人士提出的观点并不是知识。
基于经验做出的陈述也不是知识。
陈述只有在内部一致、可公开测试、能够在对抗性审查中存活下来时,才有资格成为候选知识。
一个有用的类比是军事硬件。
一辆战坦克的价值不是在设计室或营销手册中确立的。
它的价值是通过它在实际战斗中如何抵抗攻击来证明的。在它面临压力、抵抗和敌对条件之前,我们无法对其有效性做出严肃的主张。
同样的原理适用于想法、设计和代码。它们的价值在攻击中显露。
卡尔·波普尔明确指出:来源是不值得信任的。
一个主张是来自著名科学家、资深工程师还是大型语言模型都无关紧要。
重要的是这个主张是否能在试图证伪它的尝试中存活下来。
知识通过猜想和反驳增长,而不是通过自信的主张。
波普尔写的是关于科学与非科学的划分,但这个模式的适用范围更广:没有被证明为错误的可能性,我们就无法声称学到了什么。
生成式 AI 的本质是一个猜想引擎。
每一段生成的代码都是关于系统应该如何表现的提议理论。
每一个生成的解释都是一个提议的诠释。
这一切都必须被视为临时的。
AI 生成的所有东西都应被视为提议理论,然后接受严格的测试和批评,看它是否能存活下来。
这在前 AI 时代就已经是真实的了。
这就是为什么我们首先发明了代码审查、linters 和持续集成。我们认识到人会犯错,初稿往往是错误的,结构化的批评能改进结果。
CI/CD 流水线、单元测试和集成测试都是对代码进行对抗性审查的机制。
从这个意义上讲,应用波普尔认识论已经嵌入我们的工作流程多年了。
现在改变的是规模。
2016 年,哈顿教授和他的团队发表了《进化软件的长期增长率》。
他们研究了软件代码库如何随时间增长,这发生在 GenAI 出现之前。
他们的发现非常一致:从历史上看,软件项目的增长率约为 20% 的复合年增长率(CAGR)。
按这个速率,一个代码库大约在四年内翻倍。
需要注意的是,这篇论文描述的是代码库实际上如何增长,而不是理论上的最大值。这是一个历史基线,不是物理定律。
现在考虑如果 AI 显著提升开发者生产力会发生什么。
如果生产力翻倍,CAGR 向 40% 发展,翻倍时间会缩短到大约两年。
如果生产力增加五倍,我们接近 100% 的 CAGR,一个代码库每年翻倍。
在十年内,这种复利效应是爆炸性的。十年内维持的 5 倍生产力提升可能转化为大约 165 倍的代码量增加。
一个中等规模的 100,000 行代码库可能会变成 1 亿行。
作为参考,Linux 内核在三十年演进后达到了约 4000 万行代码。
我们可能正走向「怪物级代码库」。
这个预测立即招致了反对意见。
首先,20% 的 CAGR 来自前 LLM 时代;用它来预测后 LLM 时代逻辑上是自相矛盾的。
历史趋势给了我们一个基线,我们可以用它来衡量中断。
如果趋势保持,什么都不会改变。
如果它破裂,我们需要理解新的环境。
其次,软件增长受复杂性限制,不仅仅受键盘速度限制。
一个 1 亿行代码的代码库可能无法构建或无法维护,不管我们能多快地写代码,因为集成复杂性增长速度比线性增长更快。
如果我们生成代码的速度超过管理其集成复杂性的速度,我们构建的系统会在自身重量下崩溃。
问题是我们的验证系统是否会随之扩展。
历史上,审查流程可以随着代码库增长。
如果代码每年增长 20%,人工审查能力可以大致跟上。
但如果代码量成倍增长,而不是按百分比增长,旧的平衡就会破裂。
我们从增量增长转向代码的大规模生产。
反驳将如何与生成一起增长?
在那一点,注意力成为稀缺资源。
随着生成输出增加,价值从生产转向选择。
关键问题变成:我们如何将有限的人工注意力指向机器生成差异海洋中最重要的风险?
我们如何建立更高层次的表示,将大规模变更压缩成可管理的洞察?
没有现实的前进道路不使用 AI 来验证。
人工审查无法跟上机器规模的生成。
AI 必须帮助吸引注意力到有用的东西、突出潜在的约束违规、检测行为漂移,并减轻审查的负担。
验证必须变得部分自动化,否则它就会崩溃。
这是最明显的异议出现的地方:如果生成代码的 AI 有缺陷并产生幻觉,为什么审查代码的 AI 就不会同样有缺陷呢?
这不会只是复合错误而不是捕获它们吗?这有时被称为无限回归问题 —— 如果我们需要一个 AI 来检查 AI,谁来检查检查者?
答案在于专门化。
审查 AI 不需要是通用智能。
它需要是一个专注的工具,用于检查特定属性:类型正确性、符合项目风格、违反定义的架构边界或通过基于属性的测试捕获的行为漂移。
用于审查的模型可以不同于用于生成的模型 —— 更小、更保守。
审查 AI 不被要求对代码是否「好」有意见。
它被要求向人类表面异常。
它充当一个不知疲倦、快速但最终易出错的初级审查者,其工作是标记任何不寻常的东西,让资深工程师做最终判断。
目标不是消除人的判断,而是集中它。
这也是护栏应该在的地方。
护栏应该主要坐在验证层,而不仅仅是生成层。
试图仅在生成时约束是像试图在绘图板上防止所有坏坦克设计一样。
一个更稳健的方法是对每个设计进行严格的批评和压力测试。
与把审查模型作为主要控制机制相比,我们应该升级我们的验证方法。
这里有讨论的空间:有些伤害发生在生成时刻,而不是执行时,生成层护栏可以解决这些问题。
但对于工程可靠性,验证是杠杆所在的地方。
一种不同的反对意见来自经济学。
也许未来不是怪物级代码库,而是最小化、高杠杆的代码库。
如果代码变得廉价,编写高效、可重用抽象的激励就会增加。
为什么生成 1000 行样板代码,当一个由 AI 支持的十行配置文件能做同样的事情?
但即使是最小化的代码库也需要验证其最小部分,杠杆增加了任何错误的影响范围。
无论代码量是扩展还是收缩,验证负载都会转变而不是消失。
稀缺资源仍然是指向正确地方的人工注意力。
如果 GenAI 扩展了猜想,ReviewAI 就必须扩展反驳。
另一个反对意见是代码量的增长最终会撞上市场饱和。
我们没有无限数量的有意义的问题要解决。在某个点之后,生成更多代码只会造成噪音和技术债。
但这假设问题表面已接近饱和。事实并非如此。
考虑印度这样的国家。大规模基础设施缺口、污染管理、物流低效率、医疗保健获取、教育质量、城市规划、农业优化 —— 这些不是边缘问题。
它们是需要协调、监控、模拟、自动化和大规模优化的系统级挑战。所有这些越来越依赖软件。
即使在发达经济体中,软件向物理系统的渗透仍然不完整:能源网格、水系统、公共运输、制造业、气候建模、机器人技术、生物技术。
随着能力扩展,软件不仅填充现有市场;它使新的干预领域成为可能。
从历史上看,当生产能力增加时,需求往往扩展到以前被认为不可行的领域。
限制因素很少是问题短缺。它一直是成本和协调。
工程作为一门学科需要内化这种转变。
这个领域一直依赖于将有效的与仅仅看起来有效的区分开来。
拥有构建某样东西的经验并不能使它可靠。
让它在对抗性测试中存活下来才能。
如果代码量可能以前所未有的速率复利增长,我们没有奢侈地缓慢演进规范。
我们需要无缝隙、成本效益高的验证工具,直接集成到开发工作流程中。
在我自己的 AI 辅助代码审查工作中,我一直在构建在将差异提交到 git 存储库时自动触发审查的工具。
这个想法很直接:将每一次改变视为一个假设,并对其进行系统性的攻击。
从某种意义上讲,这是嵌入在 CI/CD 中的应用波普尔认识论。目标不是减速生成,而是让批评变得充足。
我不声称这解决了每个问题。
这些工具还很早期,方法都是实验性的,无限回归关注是真实的。
但现在是时候我们更认真地对待我们的 ReviewAI 堆栈了。
GenAI 使猜想变得廉价。
复合错误的风险是真实的。
如果我们不能使反驳同样强大和广泛可用,我们冒溺水在自己输出中的风险。
AI 时代工程的未来将不会由我们能生成多少决定,而是由我们多么严格地决定什么存活决定。
而那个存活什么的决定,最终仍然是一个人的责任。
我一个人希望反驳这个想法在业界得到与生成想法一样严肃的对待。
AI agents 快速写代码。他们也默默地删除逻辑、改变行为、引入 bug —— 不告诉你。你通常在生产环境中发现。
git-lrc 解决了这个问题。它钩入 git commit 并在差异着陆之前审查它。60 秒设置。完全免费。
欢迎任何反馈或贡献者!它是在线的、源代码可用的,并准备好供任何人使用。
在提交时运行的免费、无限 AI 代码审查
| 🇩🇰 Dansk | 🇪🇸 Español | 🇮🇷 Farsi | 🇫🇮 Suomi | 🇯🇵 日本語 | 🇳🇴 Norsk | 🇵🇹 Português | 🇷🇺 Русский | 🇦🇱 Shqip | 🇨🇳 中文 |
在提交时运行的免费、无限 AI 代码审查
AI agents 快速写代码。他们也默默地删除逻辑、改变行为、引入 bug —— 不告诉你。你通常在生产环境中发现。
git-lrc 解决了这个问题。它钩入 git commit 并在差异着陆之前审查它。60 秒设置。完全免费。
查看 git-lrc 捕获泄露凭据、昂贵的云操作和日志语句中的敏感材料等严重安全问题
🤖 AI agents 默默地破坏东西。代码被删除。逻辑改变。边缘情况消失。你直到生产环境才会注意到。
🔍 在它发布之前捕获它。AI 驱动的内联注释向你准确显示改变了什么以及什么看起来有问题。
某些注释可能仅对已登录的访问者可见。登录以查看所有注释。
对于进一步的操作,你可以考虑屏蔽此人和/或举报滥用