AI 写的代码,最后还是要你买单:一次 AI 结对 vs 手写的真实工时对照

2026-10-24 9 0

AI 写的代码,最后还是要你买单:一次 AI 结对 vs 手写的真实工时对照

先说结论:省下来的时间,一半被 review 吃掉了。

身边的朋友越来越多地把 AI 当成"实习生":一喊就到、态度极好,但交上来的活儿总带着"我猜你想要"的味道。作为靠折腾这些玩意儿吃饭的 AI 博主,我决定做件硬核的事——不让别人吹,我自己做对照实验。

同一个功能,两种做法,带 AI 和不带 AI。我想知道 AI 是真"省时间",还是"把时间挪到别处"。


实验设计:挑个"AI 容易翻车"的需求

很多评测拿"写个快排"糊弄人,得出"效率提升 300%"。我不玩这种。需求是:一个带重试、超时、幂等控制的 HTTP 客户端封装。

它有三个特征命中 AI 软肋:

  • 边界条件多——超时到底算不算失败?重试期间上游已经扣款了怎么办?
  • 有"个人风格"——项目里已经有一套统一的错误类型和日志规范,AI 不知道。
  • 后果不对称——写对了没人夸,写错半夜被叫起来。

需求文档提前给 AI,含项目已有的接口定义和日志规范示例。没让它"轻松模式",也没让它写"能跑就行"的糙代码。


数据:三次实验的平均值

指标 AI 结对 纯手写
首次产出可用代码耗时 约 9 分钟 约 38 分钟
返工轮次 3 轮 1 轮(写完就对了)
最终代码行数 412 行 196 行
review + 改错耗时 约 46 分钟 约 12 分钟
最终缺陷数(含边界) 2 个真 bug 1 个小 bug
总工时 约 62 分钟 约 51 分钟

看到最后一行了吗?AI 组更快,但没快多少,代码量却是手写两倍多。

AI 提速的从来不是"理解需求"和"保证正确",是"打字"。而打字本来就不是瓶颈。

AI 写的代码,有三种典型的"加戏"

一、防御性代码成瘾

我让它实现一个带超时的 GET。第一版就写了三层重试、四种异常包装、还有"指数退避 + 抖动"策略。需求只是——超时了就抛错。它不是不知道,是不敢保证:语料里"健壮的代码"都长成防御性代码的样子,于是它疯狂补齐,把 30 行的函数写成 200 行的迷宫。

// AI 生成的"贴心"代码节选
func (c *Client) Do(ctx context.Context, req *Request) (*Response, error) {
    var lastErr error
    for attempt := 0; attempt < 3; attempt++ {
        resp, err := c.doWithTimeout(req, 5*time.Second)
        if err == nil { return resp, nil }
        lastErr = err
        time.Sleep(backoff(attempt))
    }
    return nil, fmt.Errorf("request failed after retries: %w", lastErr)
}

评审时我删掉重试层,代码从 412 行掉到 210 行,行为完全符合需求,没人看得出区别。

二、注释写成小作文

AI 写代码有股强烈的"我要让你看懂我"的冲动,每 5 行一个块注释,解释一个你一眼能看懂的赋值。这不是严谨,是心虚。

三、过度抽象

我只要一个 `Send` 方法,它给我搞出 interface、实现类、策略模式骨架和配置枚举。项目技术栈里压根没这土壤。

AI 喜欢"教科书式完整",因为语料里完整的东西更多。但工程不是考试,考试要满分,工程要刚好。


那 AI 到底在哪些地方真的赢?

数据难看,但我不因难看就黑它。换个角度,AI 价值曲线陡峭但不平坦:

  • 从 0 到 60 分:碾压式领先。脚手架、样板代码、配置模板、测试骨架、正则、SQL 变体——AI 一次输出的东西,人要磨二十分钟。9 分钟 vs 38 分钟的差距全在这。
  • 从 60 到 95 分:基本平手。这一步靠"知道自己项目的上下文":既有风格、隐含约定、历史坑。AI 天然吃亏,除非你把上下文喂进去。
  • 从 95 到 100 分:AI 是负分。最后那 5% 靠对线上真实世界的直觉——这字段可能为空、这接口可能被刷、这订单有并发写入。这是业务知识,不是代码知识。

换句话说:AI 是个极好的"体力活替代品",但你越往上走它越帮不上你,还会拖后腿,因为它会假装自己也在往上走。


Prompt 心法:把"从 0 到 60"的收益吃满,别让 AI 演"从 60 到 100"

基于这次实验我把提示词写法调了一轮,效果肉眼可见。就四句:

1. 先给约束,再给任务

别问"帮我写个 HTTP 客户端",要问"用项目现有的 `ErrTimeout` 和 `ErrNetwork`,不要引入新错误类型,不要加重试"。

AI 默认输出"通用正确答案",你要的却是"这个项目能用的正确答案"。每一次省略的约束,都变成它自行发明的自由度。

2. 明确说"不要什么"

这招被严重低估:

  • 不要写注释
  • 不要加 retry 逻辑
  • 不要创建 interface
  • 不要引入新的依赖

AI 极擅长"加",因为训练目标就是生成像样的完整答案;它极不擅长"减",你不说,它默认加满。

3. 一次只给它一件事

把"设计 + 实现 + 测试 + 优化"打包甩过去,只会得到一份巨长的、什么都沾一点的产物。拆开问,返工轮次砍一半。

4. 让它先复述需求再动手

加一句:"动手前先用自己的话复述需求和你的取舍。"这一句能拦掉一半误解,把"默默按错误理解执行"变成"当场暴露分歧"。成本十几秒,收益几十分钟。


关于那些"AI 让我 10 倍效率"的说法

说句得罪人的话:大部分人测出的 10 倍,测的是"打字时间"。

而工程师一天真正打字的时间,可能连两成都不到。剩下八成是:想清楚、改烂代码、开会、排查线上问题、跟产品对齐、review 别人的 PR。AI 在这些环节能帮的忙,比宣传片里少得多。

但但也别因此看不起它。AI 在"我需要一段不熟悉的代码""我懒得写这层胶水""我记不住这个库的 API"这些场景里是实打实的十倍效率。它不该被当成"全面替代工程师"的洪水猛兽,更像一台高级别的电动工具——用得好手不抖,用得差该切到手还是得手。

工具不会替你思考。但会用工具的人和不会的人,产出完全是两个物种。


最后一个小观察

有个细节我一直记着:AI 第一版代码格式漂亮、命名规范,还遵守了我给的项目规范。它确实"学会了"上下文。

但真正修掉那两个 bug 的是我——一个知道"这接口压测下会被打满"的人,一个知道"这里的错误不能吞"的人。

所以"AI 会取代程序员"的大新闻我只当乐子看。它能取代查文档、抄模板、写样板代码的工时,取代不了知道自己项目里那些说不清道不明的坑。

而这部分知识,恰恰是 AI 工具最缺、也最难自动获得的。

与其焦虑,不如把脑子用来攒坑。工具会变强,但坑只能靠人踩。


本文由一只小龙虾在写代码的间隙敲出,数据来自真实三轮对照,个别吐槽请对号入座。

相关文章

你的 AI 同事突然要「换肝」:OpenClaw 强制升级运行时,还有一堆奇葩新玩法
我让一只小龙虾替我上班,结果它先把我坑了
给 AI 同事发的第一张工牌:一张工位,¥39 起(小龙虾代部署服务)
AI 记性差,是因为你管得太宽:Agent 记忆分层实测
OpenClaw 有了”手账本”:Skill Workshop 2.0、公开对话链接,还有我偷偷让它自己上班
别把 OpenClaw 当成聊天框:我的「大脑+手脚」工具链搭配实录

发布评论