AI 生成的代码很爽,但谁来修它留下的屎山?

备选标题:

  1. AI 代码生成很爽,但谁来修它生成的屎山?(痛点型)
  2. 1.53 亿行代码分析:AI 正在让你的代码变烂(数字型)
  3. 为什么 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 能帮你写得更快。但能不能写得更好——

这个责任,它不背。