AI 生成代码的隐性债务问题
分析使用 AI 编程的权衡:快速生成代码背后隐藏的维护成本和技术债会逐步累积,需要谨慎评估长期代价。
分析使用 AI 编程的权衡:快速生成代码背后隐藏的维护成本和技术债会逐步累积,需要谨慎评估长期代价。
AI 生成代码的代价,在于缺失的心智模型。
上个月,我的个人项目里出现了一个 bug。并不是什么严重问题——只是有个值没有按照预期更新。
我打开文件,从头读到尾,却完全不知道自己在看什么。
不是因为代码写得不好。代码很干净,组织得也很合理,而且确实完成了我要求它做的事情。
问题在于,我从未真正建立起一个心智模型,去理解它为什么会以这种方式运行。我让 AI 生成代码,粗略扫上一眼,然后继续做下一件事——如此重复了几十次,却从未真正花时间坐下来,把它理解透彻。
我无法修复自己项目里的 bug,因为我从未真正拥有过自己正在修复的代码。
正是在那一刻,我开始换一种方式看待 AI 生成的代码:它不是礼物,而是一笔贷款。
那只是一个个人业余项目——没什么复杂的,只是我为自己做的一个小东西。晚上放松下来写代码时,人很容易让 AI 掌控远超合理范围的工作。我描述自己想要什么,它生成函数;我快速扫一遍,确认能运行,然后继续下一项。连续几周,这种感觉都像拥有了超能力。我的开发速度前所未有地快。
那个 bug,就是第一张到期的账单。
这是我希望自己能更早建立起来的心智模型。
每当 AI 为你生成代码时,它并不是在免费送你什么,而是在让你赊账。代码今天可以正常运行,但理解代码——那种让你能够调试它、扩展它、向别人解释它的能力——就是利息。不管你有没有为此预留预算,这笔利息终究都要支付。
债务不会立刻显现,这正是它危险的地方。它会在以后找上门来——可能是一个你无法诊断的 bug,一条你回答不了的 PR 评论,也可能是一个你不敢碰的功能,因为你不确定还有什么依赖着它。
我在毫无察觉的情况下,连续几周都在借这笔贷款。那个 bug,不过是第一张到期的账单。
事后我查了一些资料,当时多少以为自己只是在疑神疑鬼。事实并非如此。
近期针对 AI 辅助提交的研究发现,与人类编写的代码相比,AI 辅助代码出现正确性和安全性问题的比例明显更高。这类问题通常不会立即暴露,往往要等到有人真正执行那条代码路径时才会出现——而提交代码的人其实从未完全理解过那条路径。
越来越多的开发者调查数据还指向了一个没那么技术化、却更切身的问题:对 AI 编程工具的依赖越重,开发者报告倦怠的比例也越高。这和我那天晚上的实际感受完全吻合。生产力带来的兴奋感消退之后,留下来的不是轻松,而是一种挥之不去的轻度焦虑——因为我已经无法完整说清这个代码库到底是怎么回事。
这些都不意味着 AI 辅助编程是坏事。它们意味着这笔债务确实存在,即使你看不见它。假装它不存在,并不会让它自行消失。
我想在这里说实话,因为人很容易把这件事讲成一个比实际情况更宏大的故事。我没有删掉所有代码重新开始,也没有发誓再也不用 AI 工具。那只会是另一种矫枉过正。
我真正做的事情慢得多,写出来也没那么令人满足:我逐段检查那个文件,强迫自己真正理解它。不是粗略浏览,而是切实追踪每一部分在做什么、为什么这样做,就像这段代码是某位已经离职的同事留下来的一样。
这比修复自己亲手编写的代码所需的时间更长。而这恰恰说明了问题所在。生成代码时“节省”下来的时间并没有消失,只是被推迟到了一个由我选择的时刻。只不过,我根本没有机会选择这个时刻——那个 bug 替我做了选择。
等我真正理解代码之后,只花了大约十分钟就完成了修复。
从那以后,真正留在我习惯里的并不是什么激进的规则,而是一个微小、乏味的习惯:
每当准备放下 AI 生成的内容、继续下一项任务之前,我都会诚实地问自己一个问题:如果现在不再看一遍,我能向别人解释清楚它吗?
如果答案是否定的,我就不会认为这项任务已经完成。我会再读一遍,追踪其中的逻辑。有时,我还会亲手重写其中的一小部分,迫使自己真正理解它,而不是任由它从脑海中被动流过。
我的规则:每当准备放下 AI 生成的内容、继续下一项任务之前,我都会问自己:如果现在不再看一遍,我能向别人解释清楚它吗?
如果答案是否定的,这项任务就还没有完成。
这样做在当下确实更慢,但这是唯一真正阻止债务悄悄重新累积的方法。
我依然一直在使用 AI。我无意假装事实并非如此,也不认为答案是减少使用 AI。对我来说,真正的答案是:不再把“它能运行”当作终点,而是把“我理解它”当作真正的终点。
我不打算在结尾抛出什么戏剧性的论断,预测五年之后谁还会有工作、谁会失业。我不知道答案。
但从一个个人项目里的一个 bug 中,我确实明白了一件事:AI 为你编写的代码,并不会因为不是你亲手敲出来的,就变成免费的。迟早会有某件事要求你为它负责——可能是一个 bug,一个问题,也可能是某个你需要修改它、却突然发现自己根本不确定会改动什么的时刻。
你可以提前偿还这笔债务,通过真正理解自己交付的内容,一次支付一点;也可以等到晚上 11 点,盯着自己项目里的 bug,疑惑事情怎么会走到这一步,然后一次性还清全部债务。
我建议选择前一种。我是用缓慢而艰难的方式才学会这个道理的。
你是否也经历过这样的时刻——已经交付的 AI 生成代码,最终变成了一笔你根本不知道自己借下的债务?我真心想听听你是怎么发现它的,以及发现之后又做了什么。👇
部分评论可能只有已登录的访客才能看到。请登录以查看全部评论。
如果需要采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。