AI 生成的代码很爽,但谁来修它留下的屎山?
备选标题:
- AI 代码生成很爽,但谁来修它生成的屎山?(痛点型)
- 1.53 亿行代码分析:AI 正在让你的代码变烂(数字型)
- 为什么 AI 写的代码,三个月后没人敢动(反直觉型)
摘要: GitClear 分析了 1.53 亿行代码,发现 AI 生成的代码改动率翻倍、重复代码激增。代码质量正在悄悄下滑。
标签: AI编程、代码质量、技术债务、Copilot、软件工程
我昨天让 Claude 写了个接口。
三分钟。跑通了。
很爽。
但我今天打开那个文件看了看——变量名是 data1、data2、data3,异常处理是 catch (Exception e) {},注释写着”TODO: implement error handling”。
这代码能用。但三个月后呢?说实话,我心里挺没底的。
你有没有那种感觉——代码跑通了,但你不敢碰它?
GitClear 的报告,让我后背发凉
上个月 GitClear 出了份报告,分析了 1.53 亿行代码。
结论很扎心:AI 正在让全球代码质量面临下行趋势。
说人话就是:AI 写的代码,正在变成一个个隐形的坑。
2020 年到 2023 年,”代码改动率”(改过又被改的代码比例)从 3.3% 飙到 7.1%。什么意思?就是 AI 生成的代码,被反复修改的概率翻了一倍多。
还有”重复代码”——从 2020 年的 4.2% 涨到 2023 年的 8.5%。
AI 不写重复代码?它写的重复代码比你想象的多。
我身边用 Copilot 的朋友,十个有八个说”确实省时间”。但问他们”生成的代码你 review 过吗”——
沉默。
尴尬。
屎山是怎么炼成的
AI 生成的代码有三个致命问题——每个都能让你在凌晨三点爬起来修 bug。
第一,没有上下文。
你让它写个用户登录接口,它给你写一个。但你项目里已经有三个登录相关的方法了——loginByPhone、loginByEmail、loginByWechat——它不知道。
于是你的代码库里出现了第四个:userLogin。
逻辑重复,命名不一致,未来维护的人会骂娘——这个锅,你背还是 AI 背?
说实话,这事儿挺恶心的。
第二,命名全靠猜。
data、result、temp、value——AI 的命名风格跟刚学编程的大学生没什么区别。
你以为改个名很简单?当这个变量被传递了五层、出现在八个文件里的时候,你试试。
第三,可扩展性为零。
AI 写的是”能跑的代码”,不是”能演化的架构”——这话说得有点学术,但确实如此。
新需求来了?再让 AI 写一段。之前的逻辑要改?AI 再生成一遍。三个月后,你发现这个模块已经变成了一坨——
怎么说呢,就像租了个房子,住着住着发现下水道堵了、墙皮掉了、电线老化了,而房东早就跑路了。
没法拆,没法测,改一个 bug 出三个新 bug。
这不是技术债是什么?
三个策略,别让 AI 把你埋了
别误会,我每天都在用 AI 写代码。
但我有几个原则。
原则一:AI 只写骨架,你来填肉。
让 AI 生成接口定义、数据结构、函数签名——这些是骨架。核心逻辑、边界条件、异常处理——这些你来写。
为什么?因为骨架错了好改,肉烂了要重写。
原则二:每段 AI 代码,至少看三遍。
第一遍看逻辑对不对。第二遍看命名合不合理。第三遍看——如果半年后有人来改这段代码,他能看懂吗?
三遍看完,通常你已经重构了 30%。
原则三:AI 生成的代码必须过 lint 和测试。
不是”建议过”,是”必须过”。
没有测试的 AI 代码,就是定时炸弹。你不知道它什么时候会炸,但你确定它会炸。
更糟的是——它炸的时候,你根本不知道是哪行代码的问题。
别等屎山堆到你脖子
Claude 的 CTO 说,他们 80-90% 的代码由 AI 完成。
这句话的另一面是:10-20% 的代码,决定了整个系统的生死。
那 10-20% 是什么?架构决策、边界处理、异常兜底、性能优化——AI 擅长生成代码,但不擅长做判断。
判断是你的事。
AI 能帮你写得更快。但能不能写得更好——
这个责任,它不背。