开发者实战总结:AI 代码生成快,但调试耗时远超,需重视代码审查和理解。
AI在30秒内写出了代码。
三行。一个简单的函数。我提示生成的。我复制了它。看起来不错。干净的语法。好的变量名。没有明显的错误。
接下来我花了5小时调试它。
错误不在逻辑里。AI做了一个默认假设——列表永远不会是空的。它99%的时间都有效。那1%在生产中崩溃了。一个真实的用户。一个真实的故障。我人生中真实的5小时。
30秒生成。5小时调试。
这不是效率。这是没人在谈论的权衡。
这不是反AI的文章。我每天都用AI。它确实改变了我的工作方式。但我已经停止假装"写时的速度"是唯一重要的指标。
这是我多次付出代价后学到的——关于AI生成代码隐藏成本的经验教训。
我们被兜售了一个故事:AI让你更快。提示、复制、发布。重复。
写作确实快了。快得惊人。曾经需要一小时的东西现在只需几分钟。这部分是真的。
但故事总是在这里停止。它没有提到之后会发生什么。
AI在几秒内写出代码。你发布它。你继续。几周后一个bug浮出来——细微的、难以复现的、埋在你没写也不完全拥有的代码深处。
现在你不是在调试你理解的逻辑。你在逆向工程来自一个系统的代码,而这个系统无法解释自己的假设。你像读陌生人笔迹一样读它,试图弄清对方的意思。
快速代码不是免费的。这是借来的时间。
债务迟早会显现——而那时你已经完全忘记了AI当初的假设是什么。
AI假设列表永远不会是空的。没有检查。没有添加守卫条件。为什么要加呢?它只知道我问的——不知道真实用户实际怎么做。
Bug在我发布两周后出现在生产环境。一个没有任何数据的用户触发了这个流程。整个东西直接崩溃。
修复?一行。简单的 if not list 检查。
调试?5小时的困惑、越来越沮丧的我追踪日志、添加打印语句、质疑我的理智,才找到那个缺失的假设。
AI代码通过了我的所有测试。在本地运行得完美无缺。我很有信心。我发布了。
在生产环境里?完全是另一回事。
AI为我的测试环境做了优化——干净的输入我一直在测试、我测试数据里整洁的数据形状、我写的happy path。它没有考虑真实数据。它没有考虑真实用户创造的各种奇怪边界情况。
我花了整整一天追踪一个只在野生环境里存在的bug。
AI给一个变量命名为 data。
太通用。太模糊。技术上可以接受。对AI来说完全合理——它不知道什么重要。
三个月后我完全不知道 data 里装的是什么。是原始用户输入吗?转换后的输出?从数据库缓存的结果?我过滤后的东西?
我花了3小时追踪代码,而这本来只需要10分钟就能理解——因为AI选了便利而不是清晰,我又没抓住。
除了小时数,还有看不见的成本。
认知负荷。你没写这段代码,所以你没有心智模型。每次你接触它,都得从零开始重建理解。就像回到一个你从未见过的代码库,除了你"应该"写过它。
信心侵蚀。经过足够多次的"在我的机器上工作"后,你停止相信自己的测试。你开始带着低层次的焦虑发布。你加日志"以防万一"。你写额外的测试不是因为代码需要它们,而是因为你不信任没写过的代码。
"以防万一"的螺旋。额外的检查。额外的验证。额外的错误处理——不是因为需求,而是因为你在补偿对自己无法完全担保的代码的不确定性。这在小块中默默蚕食时间。
机会成本。你花在调试AI生成代码上的每一小时,都是你没有花在真正需要你的判断、你的背景、你的经验的工作上的一小时。
这些成本是看不见的。没有ticket追踪它们。没有仪表板测量它们。没有事后回顾浮出它们。
但它们是真实的。它们慢慢地、无声地堆积,直到有一天你意识到"调试"已经悄悄成了你真正的工作。
我没有放弃AI。那艘船早就启航了,我也不想它回来。
但我做了一些小改变,这些改变无声地改变了比率:
如果我无法走一遍逻辑——不是略读,真正地逐行走一遍——我就不发布。即使它在测试中有效。这能在生产环境发现问题之前就抓住隐形假设。
AI写结构。我重写重要的部分——边界情况、错误处理、变量名、那些凌晨2点出问题时某个人需要读的东西。慢一些。但这是我真正拥有的代码。
AI总是为happy path优化。所以我养成了习惯,立即问:如果输入是空的怎么办?Null?格式错误?意外值?我每次都自己加这些检查。
每个AI生成的函数在我的时间估计里额外加30分钟,用于审查和加固。这不是悲观——是从经验中得出的模式。这笔税在它防止的第一次事故里就回本了。
这些都没有消除问题。但它们有意义地降低了我个人的10倍比率。有些周现在更接近3倍。
AI代码写得更快。调试得更慢。比率各不相同。有时2倍。有时20倍。有时那次是60倍,我质疑了人生选择。
问题从来不是"AI是好还是坏"?这是个没意思的辩论。
真正的问题是:你的工作上、你的代码库上、你的团队上的比率是多少?
一次性脚本?尽管用AI,别回头。
核心逻辑,某人在六个月后凌晨2点要调试的代码?那就谨慎点。深思熟虑。真正参与其中。
权衡是真实的。它不会消失。假装它不存在也改变不了现实——只是意味着你会在生产环境才发现它,而不是提前。
你有最惨的"AI快速写、我缓慢调试"的故事吗?
花了多长时间找到bug?你错过的假设是什么?
我先说——空列表崩溃。5小时。一个缺失的if语句。