先说好,笑归笑,该学的还得学
前面几篇说了 Claude Code 那么多好话,今天得来点真实的——AI 写代码的翻车现场。
不吹不黑,Claude Code 确实帮了我很多,但有些它写的代码真的让我想摔键盘。下面这几个坑,都是我亲身踩过的,每条都是血泪史。
翻车一:"这个 API 你从哪本书里看的?"
标题党版: 《震惊!AI 调用了一个不存在的 API,Debug 花了两小时》
事情是这样的:我让 Claude Code 帮我写个文件上传功能,它刷刷刷写完了,看起来没啥问题。一跑——报错:TypeError: fs.readFileBlob is not a function。
我愣了三秒。readFileBlob??Node.js 啥时候有这函数了?一查,根本没这玩意儿。AI 自己编了一个 API 出来。
事后复盘: AI 的"幻觉"问题。它可能模糊记得有个类似的函数,但名字记岔了。现在我每次让它调用不熟悉的 API 时,都会加一句"请确认这个函数在 Node.js 18 中确实存在"。效果好了很多。
翻车二:"for 循环里改了 i,你是想上天吗"
标题党版: 《一个 for 循环引发的死循环惨案》
for (let i = 0; i < items.length; i++) {
if (items[i].status === 'done') {
items.splice(i, 1);
i--; // ← AI 在这里改了 i
}
}等等,好像 AI 加了个 i--,看起来是为了 splice 后索引不偏移……但是!如果你在 for 循环里改了迭代变量,在某些奇怪的逻辑组合下,循环直接原地去世。
事后复盘: AI 没考虑到 splice 和 i-- 组合在某些边界条件下会导致死循环。正确的做法是用 filter 或者从后往前遍历。从那以后,我让 AI 处理数组时都会加一句"用 filter 或者 map,别手写循环"。省心。
翻车三:"补丁漏了一行,白屏一小时"
标题党版: 《AI 修了一个 bug,又引入了两个 bug》
前端项目有个白屏 bug,排查了半天定位到是一个条件判断写反了。让 Claude Code 帮忙修,它说"找到问题了,改好了"。我不放心 diff 了一下——确实改了那个条件判断,但同时它把一个 return 语句给删了!
修完一跑,白屏依旧。又查了半天才发现那个被删的 return。
事后复盘: AI 做修改的时候,有时候会"顺手"改掉不该改的东西。现在我对 AI 的改动必做 diff,哪怕它只是改一行,我都要看看它有没有"顺手"改别的。
翻车四:"你改我依赖版本干嘛?!"
标题党版: 《AI 悄悄改了 package.json,项目崩了一地》
让 Claude Code 加一个功能,它说需要装一个新依赖。装就装嘛,很正常。结果它不光装了新依赖,还把 react-scripts 从 5.0.1 改成了 5.0.0,把 typescript 从 5.3 降到了 5.1。
我完全不知道它是觉得"5.0.0 更稳定"还是手滑了。项目直接跑不起来,因为新语法不兼容老版本 TS。
事后复盘: 解决方案就是在 CLAUDE.md 里写死:"不允许修改 package.json 中的依赖版本,除非明确要求。" 从那以后,AI 再也没碰过我的依赖版本。
翻车五:"AI 帮我写的注释,比代码还长"
标题党版: 《这段代码写了 10 行,注释占了 20 行》
// 这段代码的作用是获取用户列表
// 它会调用 API 接口 /api/users
// 然后解析返回的 JSON 数据
// 接着遍历每个用户
// 对每个用户做一些处理
// 最后返回处理后的结果
// 注意:这里可能会有性能问题
// 如果用户数量很多的话
// 建议加上分页
// 或者使用虚拟列表
const getUsers = async () => {
const res = await fetch('/api/users');
const data = await res.json();
return data.map(...);
};看到这个我真的哭笑不得。代码看两眼就明白的事,AI 给我写了满满一屏注释。不是不好,是没必要。
事后复盘: 我现在用 Skill 定义了注释规范——"只在逻辑复杂的地方加注释,不要为每一行写注释。" 你可以写一个 docs Skill,预设好你的注释风格。
写在最后
说了这么多翻车故事,你可能会觉得"AI 写代码不靠谱啊"。其实不是的。
这些问题就像你新带一个实习生——他会犯各种错,但你能教他、引导他、跟他一起成长。Claude Code 也一样。它的"下限"比新手高,但"上限"取决于你怎么用。
这 6 篇文章从入门到进阶,从命令到 Skill,从配置到避坑,希望对你有所帮助。
如果看完你觉得"我得试试",那就是我写这 6 篇最大的意义了。去终端敲个 claude 吧,跟你的新编程搭档打个招呼。
👋 系列完结,感谢阅读!