
AI写的代码,为什么越来越没人看得懂
有一种新型技术债正在悄悄积累。它不是因为程序员偷懒写出来的,恰恰相反——它是因为大家太勤快地用AI生成代码而产生的。问题不在于代码能不能跑,而在于没有人真正理解它为什么这样跑。
软件工程里有一个古老的笑话:最难维护的代码,是六个月前你自己写的代码。因为那时候的你已经不在了,留下的只有一堆变量名和注释残骸。现在这个笑话有了升级版:最难维护的代码,是昨天AI帮你写的代码。因为那段代码从来就没有一个「你」存在过。
代码能跑,但没有作者
传统意义上,代码是有作者的。作者不只是署名,而是一种隐性的知识载体。当你读到某个函数写法时,你能感受到当时的决策:为什么选这个数据结构,为什么在这里加一层缓存,为什么边界条件这样处理。这些判断背后有上下文,有取舍,有那个写代码的人当时对系统的完整理解。AI生成的代码缺少的正是这个——决策背后的上下文。它给你一个结果,但不给你一个理由。
更隐蔽的问题在于:AI生成的代码通常「看起来很对」。它符合语法,风格整洁,甚至会写注释。这种表面的专业感会让人降低警惕。一段人写的烂代码,你一眼就知道要小心。一段AI写的流畅代码,你很容易直接合并进主干,然后三个月后在生产环境遇到一个奇怪的边界情况,没有人知道该去问谁。
「
能运行的代码不等于被理解的代码,被理解的代码才能被维护。
」
「粘贴驱动开发」的新形态
Stack Overflow时代有一个被调侃的现象叫「复制粘贴驱动开发」——遇到问题,搜索,复制,粘贴,跑通,提交。AI时代这个现象没有消失,只是变得更顺滑、更高频、更难察觉。以前你复制一段代码,多少会因为「这不是我写的」而多看几眼。现在AI直接在你的编辑器里生成,上下文切换成本几乎为零,理解的摩擦力也随之消失了。
70
GitHub调查显示,使用AI编程工具的开发者中,约70%表示会直接采纳建议而不做深入审查
这不是在指责程序员不负责任。这是一个系统性的激励问题。交付压力是真实的,AI确实能快速解决眼前的问题,而「将来某人需要理解这段代码」这件事,成本是分散的、延迟的、由别人承担的。每一次单独的决定都是理性的,累积起来就成了一个没人能完全理解的系统。经济学里叫公地悲剧,软件工程里叫技术债。
三种具体的劣化模式
1过度泛化:AI倾向于写「通用」代码,加很多参数、抽象层和扩展点,但你的场景根本不需要这些,结果简单问题变成复杂架构
2断裂的因果链:AI不了解你系统的历史,它不知道某个奇怪的写法是有原因的,生成的代码可能悄悄绕过了某个重要的约束
3注释的幻觉:AI会生成注释,但注释描述的是「做了什么」而不是「为什么这样做」,后者才是维护时真正需要的信息
问题的根源不是AI,是使用方式
说清楚一件事:这不是AI技术本身的缺陷,而是人机协作方式还没成熟。AI是一个没有业务记忆的极速编码者,它对你的系统一无所知,每次对话都是全新开始。把它当成一个什么都懂的外包团队来用,就会出问题。把它当成一个需要你提供完整上下文、然后帮你快速执行的工具,结果会完全不同。
真正有效的使用方式,是让AI帮你实现你已经想清楚的东西,而不是帮你替代想清楚这个过程本身。写一个函数之前,你应该能用一句话说清楚它的职责、输入、输出和边界。如果你说不清楚,让AI来写只会把模糊放大成代码。如果你已经说清楚了,AI确实可以帮你节省大量重复劳动。
●一个可操作的判断标准:如果你无法向同事解释AI刚生成的这段代码「为什么这样写」,就不应该提交它。
维护性是写给未来的信
代码维护性本质上是一种时间问题。你现在写的代码,是写给三个月后的自己或者队友看的。好的代码是一封清晰的信,说明当时的情况、做了什么决定、为什么这样决定。AI能帮你快速写字,但写信这件事本身——决定说什么、为什么说——仍然是人的责任。理解不能外包,这大概是AI时代软件工程最需要记住的一句话。
✦ 小结
AI辅助编程带来的维护性问题,核心不是代码质量,而是理解的缺失。代码可以被生成,但理解无法被生成。真正的风险不是AI写错了,而是写对了但没有人知道为什么——而这恰恰是最难调试的那种错误。
夜雨聆风