周三下午,开发群里突然安静了下来。有人甩出一段 AI 生成的代码,跑得贼稳,但没人敢说完全看懂了它的逻辑。沉默片刻后,群友 A 幽幽地冒出一句:“现在的程序员连自己写的代码都解释不清了。”这话杀伤力不小,转眼引出几十条附和——从“再这样下去工程精神就完了”一路喷到“AI 是在批量生产代码搬运工”。

听起来像 2026 年的新焦虑,但如果你稍微翻翻软件史就会发现:这种争论,可能是整个计算行业最古老的保留节目。每次一个更上层的抽象出现,底下总会有人喊一嗓子:“他们真的懂底下在发生什么吗?”这一次的被告是 AI 编程,而原告的台词几乎和上一次、上上次一模一样。

打开网易新闻 查看精彩图片

在进一步展开之前,我想先把敬意献给一类工程师——那种无论怎么抽象都保持着底层直觉的家伙。他们瞄一眼编译器输出就知道哪条优化没打上,读汇编比你读 JavaScript 还顺,清楚调用约定、缓存行、虚拟内存、分支预测、链接器行为和处理器微架构,却依然能写出优雅的软件,而不是把每个项目都变成一篇博士论文。这类人很少,却一直默默地扛着整个行业往前走。

我们今天享用的绝大部分抽象,底层都站着几个这样的人。他们花数年时间在机器的至深层次里死磕,然后把复杂性封装成一个新界面,让其他人可以站在更高的一层去构建。这篇文章不是在反对精通,而是在感谢那些让抽象成为可能的人。

如果把编程的抽象层次画成一座金字塔,你会发现它的每一块砖头,在刚刚砌上去时几乎都被指责过是“作弊”。让我们从底部开始数起。

第一层:机器码到汇编。最原始的程序员直接拨动开关输入二进制指令。当汇编语言出现后,老一辈摇着头说:“用助记符写程序的人根本不是真正的程序员,他们连电信号都不熟悉了。”

第二层:汇编到高级语言。FORTRAN、COBOL 等早期高级语言把计算逻辑进一步从硬件中剥离。于是,“汇编时代的遗老”开始质疑:“这些写高级语言的家伙,根本不知道处理器每条指令是怎么执行的,他们能写出高效率的程序吗?”

第三层:编译器优化与内存管理。随着编译器越来越智能,程序员不再手动分配寄存器,也不用操心函数调用的栈帧布局。批评声随之而来:“依赖编译器自动优化的代码,等于放弃对机器的控制权,每次编译结果你都不敢打包票。”

第四层:虚拟机与动态语言。Java 虚拟机、Python 解释器等让“一次编写,到处运行”成了现实,内存也由垃圾回收器托管。于是又有人说:“连内存都要系统来管的人,还配叫工程师?一旦出现内存抖动或者停顿,他们连从哪下手都不知道。”

第五层:框架与云原生。Spring、Rails、React 等框架让开发者写更少的样板代码就能搭起一个业务系统。云平台把服务器、网络、存储统统抽象成服务。批评依旧准时:“现在的开发就只会拼积木,底层网络怎么走的、磁盘 IO 怎么调度的一概不知,出了事故只能重启。”

第六层:容器与编排。Docker 和 Kubernetes 把部署和运维进一步抽象。质疑也没有迟到:“这些 yaml 工程师离开了平台还能干点啥?连 ssh 上去手动排错的能力都没有。”

现在,塔尖上站着的是 AI 编程助手和智能代理——自动补全、生成片段、甚至端到端地写功能。按历史剧本,新一轮“不懂底层”的质疑自然如期上演。但有意思的点在于:AI 这一层与以往任何一层都不太一样,因为它改变的并不是程序员还需不需要工程能力,而是举证责任发生了位移。

我们得先承认一个不怎么好听的事实:绝大多数软件,从过去到现在,都不是由完全理解所有底层的人写出来的。你问一个应用开发者,操作系统详细怎么调度线程?编译器为什么给他那条代码生成的是一条 lea 而不是 add?页面表的每次翻译具体经过了几个缓存层?绝大多数人答不全。但这并不妨碍他们写出跑得顺畅、满足需求的系统。换句话说,“完整程序员”从来就是一个神话,产业能走到今天,恰恰是靠着一代又一代“只知道部分层次的人”高效协作。

既然如此,为什么独独到了 AI 这层,担忧声被抬得这么高?因为旧的抽象层虽然藏起了复杂性,但边界是清晰的。你调一个 API,知道输入和输出,也知道出错时文档该告诉你啥。可 AI 生成的代码,边界模糊得多——它可能引入你没有察觉的假设,可能在某个边界条件下歇斯底里地犯错,可能让你在 code review 时陷入“好像没问题,但又看不穿”的不适感。当程序员从亲自动手变成“审查生成结果”,原先那种“我每行都懂”的控制感被削弱了。于是,人们把这种不适翻译成了道德指责:“你在交付你解释不了的东西。”

这正是举证责任迁移的地方。以前,写代码的人默认需要对代码的正确性负全部解释成本——如果代码出 bug,别人会问你为什么那么写。现在,举证责任从“创造者证明自己是对的”悄然分叉为“审查者必须有能力发现错在哪里”。你的身份不再是唯一构建者,而更接近一个系统集成与验证者。你依然需要工程技能——边界条件、性能模型、安全后果——只不过这些技能从“从零构造”转向了“不断检测与归因”。这并不比以前的工程简单,甚至在某些场景中更需要深刻的判断力。你要判断生成的复杂度是否合理,要发现隐藏在正确输出下的逻辑谬误,要为一段看似完美的代码补上它没写的测试场景。这能说工程死了吗?显然不是。

历史上,每次抽象跃升都伴随过一轮“手艺失传”的哀嚎。汇编出现时,人们担心没人再懂机器码;高级语言普及时,人们担心没人再关心寄存器;云服务兴起时,人们担心运维精神会失传。结果呢?每一代都活下来了,而且还在原来技能集合的边上,长出了新的能力分支。今天的资深后端工程师可能不写汇编,但他们对分布式一致性、流控算法、高可用架构的理解,是上一个时代难以企及的。AI 编程不会终结工程,它只是让工程的精要在新的上下文里重新被锤炼一次。那些能快速审查、验证、修正并集成 AI 产出的人,将成为新一代“扛着产业往上走”的群体;正如当年有人用汇编为别人搭出了编译器,又有人用编译器为别人造出了框架。

所以当下次有人在群里甩出那句“现在的程序员连自己代码都解释不清”时,或许可以心平气和地回一句:我们从来没完全解释清过每一层,但每一层都有人负责让上面的人不用解释得更深。现在,轮到 AI 这一层了。