你感觉快了百分之二十,实际慢了百分之十九
这是同一个人在同一组任务上的两种速度。2026年2月,AI研究机构METR公布了一组让整个行业陷入困惑的数字:十六名经验丰富的开源开发者在使用AI编程工具后,实际完成任务的时间比不用AI慢了百分之十九,置信区间在百分之二到百分之三十九之间。但同一批开发者在动手前预测AI能帮自己快百分之二十四,在完成任务后、甚至在看到自己的用时数据之后,依然认为自己快了百分之二十。
三十九个百分点的感知与现实裂痕。这不是实验误差,这是一场认知层面的集体失灵。
METR 如何测量出这个反直觉的结果
METR在2025年上半年进行了一项随机对照实验。十六位长期活跃于大型开源项目的资深开发者,平均在各自代码仓库上工作了五年,这些仓库平均拥有两万三千星和超过百万行代码。他们完成了二百四十六个真实任务,涵盖缺陷修复到新功能开发,任务被随机分配到允许使用AI和禁止使用AI两组。研究者记录的是实际耗时,不是自我报告。
结果就是那个百分之十九的慢速。而开发者事前预测的是百分之二十四的加速,事后依然报告百分之二十的加速。
METR在2025年8月启动了后续实验,试图验证AI能力提升后是否改变了这一结论。但实验无法按原设计完成。越来越多的开发者拒绝参与——他们不愿意在没有AI的情况下完成哪怕一半的任务。百分之三十到五十的参与者承认,他们会刻意选择不提交那些不想在没有AI条件下完成的任务。样本系统性地偏向那些最不可能展现AI价值的开发者和任务。METR在2026年2月正式宣布更改实验设计。不是方法论失败了,是开发者对AI的依赖已经深到无法建立对照组。
三个认知偏差解释了感知与现实的脱节
自动化偏见是第一个原因。当AI在几秒内生成一段语法正确、风格整洁的代码时,大脑会将其标记为"已完成"。但语法正确不代表逻辑正确。AI代码的失败模式藏在表面之下:误解的需求、看似合理但错误的边界处理、解决了一个相似问题而非实际问题的逻辑。资深工程师在审查AI代码时无法像审查初级工程师代码那样快速定位问题,因为初级工程师的错误会"自我宣告"——别扭的命名、不一致的风格、明显的捷径。AI代码抹掉了这些信号。审查者必须切换到一个更耗能的认知模式:重构意图,追问这段代码本来要解决什么问题,以及它是否真的解决了。这个模式切换本身就是一种隐性成本。
可见活动偏见是第二个原因。开发者看到自己在不停地与AI对话、接收代码、做小幅修改,这些活动在时间线上密集且可见。传统编程中的思考时间——盯着屏幕、画草图、在脑子里推演逻辑——在时间线上是空白。密集的可见活动被大脑解读为高产出,而不可见的思考被忽略。这直接影响了开发者对自己效率的主观评估。
情绪时间膨胀是第三个原因。在AI辅助的工作模式中,开发者频繁经历一种"接近完成"的错觉——AI给出了百分之七十的解决方案,最后百分之三十需要大量调试。每一次"接近完成"都释放一次多巴胺,每一次卡在最后百分之三十都产生一次挫败。这种情绪过山车扭曲了对时间流逝的感知。愉悦和期待让时间感觉变快,而挫败和焦虑让时间感觉变慢。开发者的整体印象是"我一直在快速推进",尽管墙上的时钟记录了相反的事实。
上下文切换成本和百分之七十问题
认知心理学家Gloria Mark的研究发现,知识工作者在被一次仅持续二点八秒的中断打断后,平均需要超过二十三分钟才能完全重新沉浸到原任务中。这个现象被称为认知切换惩罚。每次切换成本二十三分钟。
AI编程工具天然是一个切换引擎。开发者从编写代码切换到审查AI输出,再切换到修改提示词,再切换到调试AI生成的代码,再切换回编写代码。每次切换不是瞬时的,每次都在支付那二十三分钟的恢复成本。如果一天发生五次这样的切换,超过一个半小时的有效工作时间就被消耗在重新进入状态上。Faros AI的遥测数据显示,在高AI采纳团队中,开发者每天接触的PR上下文数量增长了百分之六十七点四。更多的上下文切换意味着更多的恢复成本,而恢复成本是看不见的。
百分之七十问题是另一个隐性消耗源。AI能快速生成一个任务前百分之七十的解决方案——基础的CRUD操作、工具函数、常规算法实现。剩余百分之三十——边界情况处理、安全校验、生产环境集成、异常流程——依然像以前一样困难。AI生成代码的初始正确率大约在百分之六十到七十之间。百分之七十看起来像是一个很高的完成度,但软件工程中最后百分之三十往往消耗百分之八十的时间。更麻烦的是,那百分之七十的正确代码给了开发者一种"任务已经基本完成"的错觉,当最后百分之三十的问题暴露时,开发者已经切换到了下一个任务,再切回来又要支付二十三分钟。
瓶颈从编码转移到了代码审查
Faros AI的《2026 AI工程报告》基于两万两千名开发者、超过四千个团队、为期两年的遥测数据。这份报告描绘了一幅比METR研究更令人不安的图景。
任务吞吐量在两年内上升了百分之三十三点七,每个开发者完成的史诗级任务上升了百分之六十六点二。开发者确实产出了更多代码。但PR审查的中位时间上升了百分之四百四十一点五。PR体积增长了百分之五十一点三,涉及的文件数增长了百分之五十九点七。百分之三十一点三的PR未经任何审查直接合并。每个开发者的缺陷数增长了百分之五十四。
这些数字指向同一个结论:编码不再是瓶颈,代码审查成了新的瓶颈。AI让生成代码的成本趋近于零,但审查代码的成本没有变。当输入速率以百分之三十三的速度增长而处理能力固定时,队列长度非线性增长。PR在审查队列中等待的时间越长,上下文丢失越严重,审查者重新理解代码的成本越高,审查时间进一步拉长——一个自我强化的正反馈循环。
LinearB基于八百一十万个PR的分析提供了另一个视角:AI生成的PR在三十天内的合并率仅为百分之三十二点七,而人工编写的PR合并率为百分之八十四点四。AI代码的接受率不到人工代码的一半。AI生成的PR在审查队列中的等待时间是人工代码的四点六倍。
代码审查成为瓶颈的直接后果是部署频率下降。同一份Faros报告显示,在同样时间窗口内,每周部署次数下降了百分之十一点七,从代码提交到生产的交付周期增长了百分之四百八十点四。更多代码进入管道,更少代码到达生产。输入在涨,输出在跌。
如何正确使用AI编程工具
选择性使用AI工具是第一条原则。不是所有任务都适合AI辅助。前百分之七十的常规代码——样板代码、测试用例生成、文档编写、常规CRUD——是AI的舒适区。架构决策、边界条件处理、安全敏感逻辑、需要深度理解业务语义的代码,应该交给人类。把AI当作一个擅长重复劳动的初级工程师,而不是一个可以替代思考的伙伴。
用客观指标衡量AI的真实效果,而不是依赖主观感受。METR研究已经证明开发者的自我评估不可靠。团队应该追踪PR审查时间、PR合并率、缺陷密度、部署频率这些客观指标,而不是问开发者"你觉得快了吗"。Faros报告显示那些在AI采纳前工程实践本就优秀的组织,同样经历了质量下降。没有团队可以凭感觉绕过这个问题。
扩展审查流程而非压缩它。PR审查时间增长百分之四百四十一不是因为审查者变懒了,是因为他们收到的输入变多了。解决方案不是要求审查者更快,而是减少需要审查的内容量。让AI在提交PR之前运行更严格的验证——不仅仅是单元测试,还包括集成测试、性能测试、安全扫描。把审查者的注意力集中在真正需要人类判断的地方:需求理解是否正确、架构选择是否合理、边界情况是否被考虑到。AI审查AI的工具已经在百分之二十五的PR中被使用,但审查时间依然增长了近百分之二百。工具可以辅助,但不能替代人类的判断。
接受一个事实:AI编程工具目前不会让有经验的开发者更快。它会让他们产出更多代码,然后花更多时间调试和审查那些代码。Faros的数据显示AI生成代码的关键缺陷是人工代码的一点七倍。这些缺陷最终要在审查和调试环节被捕捉和修复。METR研究中那百分之十九的慢速,很大概率就来自这部分额外工作。
开发者感觉快了百分之二十,实际慢了百分之十九。这个悖论不会因为更多人相信它而消失。它会因为更多人用客观数据衡量它而逐渐被理解,然后被管理。
关键数据对比
| 指标 | 数值 | 来源 |
|---|---|---|
| 开发者实际速度变化 | 慢 19% | METR 2026 |
| 开发者自我感知速度 | 快 20% | METR 2026 |
| 感知与现实差距 | 39 个百分点 | METR 2026 |
| 任务吞吐量增长 | 33.7% | Faros 2026 |
| PR 审查时间增长 | 441.5% | Faros 2026 |
| PR 未经审查合并比例 | 31.3% | Faros 2026 |
| 每开发者缺陷数增长 | 54% | Faros 2026 |
| AI 代码 PR 合并率 | 32.7% | LinearB |
| 人工代码 PR 合并率 | 84.4% | LinearB |
用 Python 追踪 AI 编程的真实耗时
如果你想知道 AI 工具到底有没有让自己变快,最直接的方法是记录每项任务的实际耗时。下面这段脚本用 Python 标准库实现了一个轻量的任务计时器,按是否使用 AI 分类统计:
import time
import json
from pathlib import Path
from datetime import datetime
TRACK_FILE = Path.home() / '.ai_task_tracker.json'
def log_task(name, used_ai, seconds):
entry = {
'task': name,
'used_ai': used_ai,
'seconds': seconds,
'timestamp': datetime.now().isoformat()
}
data = []
if TRACK_FILE.exists():
data = json.loads(TRACK_FILE.read_text())
data.append(entry)
TRACK_FILE.write_text(json.dumps(data, ensure_ascii=False, indent=2))
def report():
if not TRACK_FILE.exists():
print('暂无数据')
return
data = json.loads(TRACK_FILE.read_text())
ai_tasks = [d for d in data if d['used_ai']]
no_ai = [d for d in data if not d['used_ai']]
if ai_tasks:
avg_ai = sum(d['seconds'] for d in ai_tasks) / len(ai_tasks)
print(f'使用 AI:{len(ai_tasks)} 个任务,平均 {avg_ai:.0f} 秒')
if no_ai:
avg_no = sum(d['seconds'] for d in no_ai) / len(no_ai)
print(f'未用 AI:{len(no_ai)} 个任务,平均 {avg_no:.0f} 秒')
if ai_tasks and no_ai:
diff = (avg_ai - avg_no) / avg_no * 100
print(f'AI 比手动 {"慢" if diff > 0 else "快"} {abs(diff):.1f}%')
用法很简单:完成一项任务后调用 log_task 记录名称、是否用了 AI、实际耗时。积累足够样本后调用 report 查看对比。用客观数据代替主观感受,这正是 METR 研究给我们的核心启示。