Leo Qin

← 文章

· 约 3 分钟读完

AI 编程助手如何提高开发者效率?

反思 · AI · 开发

最近这一年我用 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 分工

我已经形成了一个简单的分工方式。

  1. 复杂任务,我先想清楚再让 AI 写。 先把要做什么、输入输出是什么、边界情况有哪些、要不要复用什么已有代码,这些自己想明白。然后把要求讲给 AI,让它写第一版。
  2. 重复性强的任务,AI 先写我后改。 比如十个差不多的 CRUD 接口,让 AI 把骨架生成出来,我再统一调整。
  3. 不熟的领域,AI 能加速最开始的一小时。 想学一个不熟的库,让 AI 给个最小例子,比通读整个文档站快。但生产代码我还会去翻官方文档确认一遍。
  4. 关键代码,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 编程助手不是魔法。它是一把好用的斧子,砍柴砍得飞快,但你不能拿它给你设计房子。理解它的边界,和它分好工,才能真正看到生产力提升。

参考文章

评论

更多文章

萤火之森 · CMJ