领导:有AI还要看懂代码干嘛?我直接沉默
领导这个AI工作流页面怎么写这么久我拆12个阶段每个阶段AI要反复生成调试几十轮代码我每一行都手动核对开了3个Agent并行都提速有限。领导代码你看过转头就忘反正有AI你没必要懂代码啊我……当场沉默。提问大家用AI写代码每段都要手动Review吗我认为是要的但是分复制和简单功能复制功能需要知道数据从哪来、怎么变、到哪去核心心态不要读 AI 代码要怀疑 AI 代码。AI 写的代码在试图说服你它是对的但你不该信你要自己证明它是对的。一、AI 代码和人写代码的本质区别人写的 bug 通常一眼能看出来——拼错变量名、逻辑写反、漏了await。AI 写的 bug 是你读三遍都觉得没问题上线之后才炸。它不报错它静默地给你一个错误结果。所以 review AI 代码不能用通读一遍找问题的方式要用针对性的策略。二、六条实战经验1. 看起来对是最大的陷阱——盯数据流转AI 代码最大的问题不是写错是写得像对的。典型例子constidNumber(element.getAttribute(data-asset-id));看着完全没问题。但如果 DOM 上属性被意外删了getAttribute返回nullNumber(null)结果是0——不是NaN是0。这个id 0会悄悄往下走可能匹配到另一个素材产生极难排查的数据错乱。怎么审不要通读代码。重点盯数据从哪来、怎么变、到哪去。每个外部输入DOM 属性、接口返回、用户输入进来的地方都问一句这个值如果不是我预期的怎么办关注点类型转换Number()、parseInt()、JSON.parse()的输入如果是null/undefined/非法字符串会怎样可选链终点a?.b?.c最终是undefined时下游代码能处理吗数组越界arr[0]前有没有判空find()返回undefined后有没有处理2. 别坐着看代码——像不耐烦的用户一样操作AI 写代码时脑子里的用户是一个乖乖按流程操作的理想人。但真实用户会疯狂连续点击复制粘贴一坨带格式的富文本打了一半中文突然按删除页面还没加载完就开始操作在 iOS Safari 上用很多 DOM API 行为完全不同网络断了还在点提交怎么审打开页面像一个不耐烦的用户那样操作。快速点击、中途切换、粘贴乱七八糟的内容、用手机试。90% 的 AI 代码 bug 都是这样发现的不是看出来的。重点场景连续快速触发同一操作防抖/节流有没有异步操作中途切换页面取消机制有没有输入法组合态下的各种操作中文、日文输入法粘贴非纯文本内容弱网 / 断网环境3. AI 爱用过时 API而且用得特别自信AI 的训练数据里有大量过时代码。它不知道现在不该用了只知道以前很多人这么用。而且它用废弃 API 时非常自然注释还写得头头是道。常见的过时 API废弃 API应该用document.execCommand()Clipboard API / InputEventKeyboardEvent.keyCodeKeyboardEvent.keyEvent.returnValueEvent.preventDefault()XMLHttpRequest直接用fetch或项目的 axios 封装componentWillMount(React)useEffect$on/$off/$once(Vue 2 事件总线)mitt / provide-inject怎么审遇到你没见过的 API、或者总觉得有更好的写法的地方花 30 秒去 MDN 搜一下。看有没有 Deprecated 标记。4. AI 的注释是在表演懂了这是最容易分辨 AI 代码的特征。AI 喜欢给每个函数写一段正确的废话。典型反面/** 获取节点在父节点中的位置用于删除 token 后把光标放回原来的元素节点。 */functiongetNodeIndex(node:Node){if(!node.parentNode)return0;returnArray.prototype.indexOf.call(node.parentNode.childNodes,node)asnumber;}前半句获取节点在父节点中的位置——函数名已经说了。后半句是调用场景不是函数本身需要说明的东西。真正有价值的注释应该回答为什么为什么用Array.prototype.indexOf.call而不是转数组为什么parentNode为空时返回 0 而不是 -1为什么这里不能用某个更简单的替代方案怎么审直接问自己把注释全删了我能看懂代码吗能看懂 → 注释多余删掉或精简看不懂 → 注释应该解释你看不懂的那个部分而不是你已经看懂的部分5. AI 不会质疑你的方向——但你自己要质疑你让 AI 写一个 contentEditable 编辑器它就老老实实给你写。它不会跳出来说“contentEditable 是出了名的坑多跨浏览器行为不一致。你考虑过 Tiptap / Prosemirror 吗”AI 是执行者不是顾问。你说什么它做什么。怎么审review 之前先退一步想这个问题该用这种方式解决吗特别是当 AI 写了一大坨复杂代码的时候——越复杂越要怀疑是不是方向就错了。可能一个成熟的第三方库 50 行就搞定了。警惕信号一个 composable 超过 300 行手动操作 DOM 超过 20 处自己实现了一套状态管理 / 事件系统 / 路由逻辑处理了大量浏览器兼容细节6. 最高效的审法试着删AI 代码 review 最高效的方法就是试着删东西试着删如果没影响说明一个函数没人调用是死代码一个参数是多余的简化掉一段错误处理防御的场景根本不会发生一个拆出去的小函数内联回去更清楚不该拆一段注释代码本身已经够清楚了AI 生成的代码通常有20-30% 可以精简掉而不影响功能。精简后代码更好维护。三、Review 流程实操顺序不要从第一行开始往下读。按这个顺序来第一步先跑起来5 分钟打开页面走一遍正常流程再故意搞几次异常操作。看控制台有没有报错。这一步能发现 60% 的问题。第二步盯入口和出口10 分钟只看函数的参数从哪来用户输入DOM接口返回值/副作用到哪去存到 store发到后端改了 DOM类型转换和边界处理第三步查可疑 API5 分钟搜代码里的innerHTML、v-html→ XSS 风险document.execCommand→ 废弃 APIeval、new Function→ 安全风险any、as any→ 类型逃逸console.log→ 该删没删的调试代码第四步对照项目规范5 分钟文件放对目录了吗命名风格和周围代码一致吗状态管理用的是项目约定的方式吗import 路径用了/别名吗第五步精简10 分钟试着删代码。删不动的就是核心逻辑删得动的就是冗余。四、一句话总结先跑再看盯数据流查过时 API怀疑方向最后做减法。不要被 AI 代码的工整结构和流畅注释迷惑。代码好不好不看写得多整齐看的是上线之后会不会炸。