最近这一年我用 AI 编程助手用得越来越多,包括 GitHub Copilot、Cursor、Claude Code,还有其他几个。效率是有提升的,但远没有营销文里吹的那么神。这篇聊聊我自己用下来的真实感受,AI 在哪些事上能帮上忙、哪些地方不要指望它,以及现在怎么和它分工。
AI 真正擅长什么
如果让我用一句话总结,AI 编程助手最值钱的是“快速翻找”。这件事人类干起来又慢又烦,AI 干起来快到让人觉得这事几乎不花成本。
具体来说:
- 你脑子里大概有个 API,但记不清确切名字,让 AI 帮你查一下比翻文档快。
- 一段陌生的代码看不懂,让它解释一下能省下你半小时。
- 写样板代码(CRUD 接口、表单校验、简单的单元测试这种),让它先生成一版你再改。
- 你有一条让人困惑的错误信息。把错误信息和代码丢给 AI,它经常能直接指出问题。
IT Revolution 那篇研究提到 AI 编程助手带来了 26% 的生产力提升。简单任务上,我自己感觉 AI 能给我 50% 以上的提速。但只要任务一复杂,提速就会降到接近 0,甚至变成负数。
AI 真的不擅长的事
简单来说,需要真正判断力的任务它会很吃力。
- 业务逻辑设计。 AI 不懂你产品的来龙去脉,它能写出语法漂亮的代码,但写出来可能不符合你实际的业务规则。
- 跨文件的一致性。 AI 只能看到它当前的上下文窗口。它可能会漏掉已有的 utility 函数,重新造一个重复的轮子。
- 架构决策。 要不要拆服务、要不要上 Redis、要不要换框架,这些问题不能放心地交给一个泛泛而谈的答案。
- 边界条件。 AI 写出来的代码经常缺少 null 检查、空数组处理、并发调用,以及权限边界情况。
我现在怎么和 AI 分工
我已经形成了一个简单的分工方式。
- 复杂任务,我先想清楚再让 AI 写。 先把要做什么、输入输出是什么、边界情况有哪些、要不要复用什么已有代码,这些自己想明白。然后把要求讲给 AI,让它写第一版。
- 重复性强的任务,AI 先写我后改。 比如十个差不多的 CRUD 接口,让 AI 把骨架生成出来,我再统一调整。
- 不熟的领域,AI 能加速最开始的一小时。 想学一个不熟的库,让 AI 给个最小例子,比通读整个文档站快。但生产代码我还会去翻官方文档确认一遍。
- 关键代码,AI 不写最终版本。 涉及钱、权限、数据迁移和安全敏感的逻辑的代码,由我负责。AI 可以帮忙检查,但我不会让它负责。
一个真实的反例
最近我让 AI 给一个 React 组件加防抖,它写了这么一段:
function SearchBox({ fetchResults }) {
const [query, setQuery] = useState('')
const debouncedSearch = useMemo(
() => debounce((q) => fetchResults(q), 300),
[]
)
return <input onChange={(e) => debouncedSearch(e.target.value)} />
}
看着挺像那么回事。但有两个 bug。第一,useMemo 的依赖是空数组,组件卸载之后 debouncedSearch 不会清理,定时器会泄漏。第二,fetchResults 从 props 里来,会被锁死成第一次的版本,之后传新的进来不生效。
正确的写法应该用 useEffect 配合 cleanup 清理 debounce,或者使用经过测试的 useDebounce Hook。但 AI 给的这一版扫一眼很难看出问题,这就是为什么我说“AI 不擅长复杂逻辑”,因为它看着对的代码可能藏着你三天后才会发现的 bug。
写在最后
AI 编程助手不是魔法。它是一把好用的斧子,砍柴砍得飞快,但你不能拿它给你设计房子。理解它的边界,和它分好工,才能真正看到生产力提升。