上周调一个线上 bug。一个 gRPC 服务在高负载下偶发 deadline exceeded,但 CPU 和内存都没打满。我盯着 Grafana 看了二十分钟,突然注意到 GC 停顿和 P99 延迟的相关性------然后脑子里自动跳出来一个画面:GC STW 刚好卡在 RPC 的关键路径上,上游 300ms 超时被吃掉了大半。
从"看到 GC 停顿曲线"到"形成因果假设",大约 3 秒。我没有"思考",是直觉。
当然,公平地说:我的直觉也经常是错的。上上周类似的场景,我"直觉"认为是 GC 问题,花了两小时后才发现是下游网络抖动。System 1 的模式匹配是一把双刃剑------快速命中和快速犯错往往来自同一个机制。但即便如此,这个过程仍然值得分析。
这个直觉是怎么来的?AI 能不能复制它?
要回答这两个问题,需要先搞清楚一个前置问题:程序员的大脑在做什么认知操作?认知心理学对此有一些有用的模型。搞清楚这些模型的解释力和局限,才能更诚实地分析 AI 在替代什么、不在替代什么。
真正要说的是,这篇文章的核心与其说是"人类有 System 2 所以能保住饭碗",不如说是:"程序员经验的本质是把低层操作压缩成高层概念(chunk),而 AI 正在以极快的速度吞噬底层 chunk 的模式匹配工作"。
一、两种认知系统(一个有用但不完美的模型)
Daniel Kahneman 的 System 1 / System 2 理论:
System 1(快,自动,无意识):模式匹配。你看到一段代码,0.3 秒内知道"这是一个观察者模式"或"这里有一个 off-by-one"。不需要思考,直觉级反应。
System 2(慢,费力,有意识):符号推理。你在推导一个并发算法的正确性证明,或者在白板上画一个复杂的状态机转换图。需要工作记忆,很累,一天做不了太多。
这个二分法是一个简化模型------Melnikoff & Bargh (2018) 论证过其逻辑不一致性,Kruglanski & Gigerenzer (2011) 认为认知更像连续光谱。实际编程中直觉和推理交替进行、互相校正。但作为区分"自动化认知"和"费力认知"的粗粒度框架,它仍然够用。下面的分析建立在这个框架上。
编程同时使用两个系统。而且随着经验增长,比例会变化。
二、专家和新手的认知差异
de Groot (1946) 的国际象棋实验是认知心理学的经典:给棋手看一个真实的棋局 5 秒,然后让他们复盘。大师能复盘 90%+ 的棋子位置,新手只能复盘 25%。
但如果棋子是随机摆放的(不是真实棋局),大师和新手的表现一样差。
结论:大师不是记忆力好------他们是把棋局"分块"(chunking) 了。一个棋型不是 20 个独立的棋子,而是 5-6 个有意义的"块":一个西西里防御开局、一个王翼攻击阵型、一个中心兵链。
后来的研究者把类似的实验搬到了编程领域。Adelson (1981) 发现同样的规律:专家程序员在看真实代码时能记住更多行,但看随机打乱的代码行时和新手一样。Soloway & Ehrlich (1984) 进一步证实:专家的优势来自识别"编程计划"(programming plans)------循环累加、哨兵检查、边界处理------这些固定搭配被压缩成了单个认知单元。
这些实验测量的是短期记忆复盘,不是完整工程能力------从"记住更多代码行"到"设计好系统"之间有巨大跳跃。但 chunking 作为认知机制仍然有解释力,它至少说明了一点:
编程专家的一种重要能力是 chunking:把代码模式压缩成高层概念,从而释放工作记忆用于更高层思考。
一个新手看到:
c
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (arr[j] < arr[i]) swap(&arr[i], &arr[j]);
他看到两个嵌套循环、一个比较、一个交换。四个操作。
一个专家看到:选择排序。一个概念。
这个压缩不是偷懒------它释放了工作记忆。人的短期工作记忆容量极其有限(Miller 曾提出著名的 <math xmlns="http://www.w3.org/1998/Math/MathML"> 7 ± 2 7 \pm 2 </math>7±2,后续研究如 Cowan 则修正为大约 4 个组块)。新手的认知空间被循环和比较占满了,没有余力思考"这个排序在这里是否合适"。专家用一个 chunk 就搞定了模式识别,从而释放出认知资源去思考更高层的问题。
三、AI 在替代什么?
用 System 1/2 的框架来看,ChatGPT 和 Copilot 最擅长的,是 System 1 类型的任务------模式匹配和模板生成。
| 任务 | 主要依赖的认知 | AI 当前表现 | 当前限制 |
|---|---|---|---|
| 识别设计模式 / 生成样板代码 | System 1 (模式匹配) | 极强,取代手动编写 | 只能输出见过的高频模式 |
| 解释单段代码 / 查 API | System 1 (模式匹配) | 强,极大超越传统搜索 | 缺乏跨代码库的隐性上下文 |
| 证明并发算法正确性 | 混合 (推理链) | 正在突破 (如 AlphaProof) | 极易在开放域工程问题中漏掉前置假设 |
| 设计系统架构 | System 2 (权衡与约束) | 能给出标准模板架构 | 无法根据业务非功能约束做妥协 |
| 调试偶发竞态条件 | System 2 (跨层因果推导) | 较弱,倾向胡乱猜测 | 无法跨越多模块组件建立因果网络 |
| 评估"这个优化值不值得" | System 2 (工程常识) | 极弱 | 缺乏商业逻辑和团队运维能力的上下文 |
但"AI 只有 System 1 没有 System 2"这个说法需要大幅修正。它在 2023 年初或许还勉强成立,但 AI 的推理能力正在快速提升:AlphaProof (2024) 在 IMO 数学竞赛级别的定理证明中达到了银牌水平------这是纯粹的多步符号推理;现代 LLM 的 chain-of-thought 推理链已经能处理相当复杂的逻辑;AI 辅助的形式化验证工具(如 Lean 4 + LLM)已经可以在一定程度上维护全局不变量。
更准确的说法可能是:AI 的推理能力是真实存在但脆弱的------它在结构化良好的问题上表现越来越强,但在开放性的、需要大量隐性上下文的工程判断上仍然薄弱。这个边界在快速移动,今天画的线明天可能就过时了。
四、Chunking 的层次
编程专家的 chunking 不是一层的。下面是一个粗略的启发式分层------不是严格的科学分类法,各层边界模糊,不同人可能画出不同数量的层:
php
Level 0: 语法 (if, for, function)
Level 1: 惯用模式 (iterator, guard clause, RAII)
Level 2: 数据结构 (hash map, B-tree, ring buffer)
Level 3: 架构模式 (event loop, actor model, MVCC)
Level 4: 系统设计 (CAP 权衡, 一致性模型, 故障域)
Level 5: 工程判断 (这个系统应该做什么, 不应该做什么)
截至 2025 年初的观察(这会过时):AI 在 Level 0-2 非常强。Level 3 越来越可靠但仍需人类校验。Level 4-5 是 AI 最薄弱的环节------但"最薄弱"不等于"永远不行"。
这个分层的价值不在于精确,而在于提供一个思考框架:你的日常工作主要在哪个层级?
如果主要在 Level 0-2(写 CRUD、实现已知算法、搬运 API 调用),AI 对你的替代压力是真实的。
如果主要在 Level 3-5(设计系统、做工程权衡、调试复杂 bug),AI 目前更像是加速器。但不要把"目前"当成"永远"------AI 在每个层级上的能力都在上移,速度可能比你预期的快。
五、被忽视的三个认知陷阱
上面讲的是"AI 替代了什么"。下面讲三个更隐蔽的问题------AI 辅助编程对你大脑的副作用。
心流改变。 Csikszentmihalyi 的心流理论说:心流状态需要"挑战和技能的平衡"。AI 自动补全改变了编程的挑战/技能比------部分创造性工作变成了审查工作。但这不一定是"破坏":资深 code reviewer 同样可以进入高度专注的审查状态,审查本身也可以有心流。更准确的说法是:AI 改变了心流的触发条件和体验形态,你可能需要主动调整工作方式(比如在需要深度思考时关掉自动补全)来维持心流。
生成效应影响。 认知科学发现自己生成的信息比被动接收的记得更牢(Slamecka & Graf, 1978)。AI 写代码+你审查,和你自己写+debug 三次,记忆编码的深度大概率不同。这个效应对学习阶段的新手尤其重要------对已经掌握基本能力的资深工程师,影响可能没那么大。
自动化偏见。 Mosier & Skitka (1996) 在航空领域发现的规律:人对自动化系统的信任度,会在使用初期快速上升,即使系统有错。程序员版本:你用 Copilot 三个月后,会不自觉地降低对 AI 输出的审查力度。
应对方式: 解决这些问题的正确方向不是"倒退回纯手动编程",而是更好的人机协作设计:建立审查 AI 输出的 checklist 和流程,在学习阶段有意识地多自己写,在关键路径上提高审查标准。航空业解决自动化偏见靠的不是让飞行员关掉自动驾驶"练手感",而是 CRM(Crew Resource Management)训练和更好的人机交互设计。
六、刻意练习的方向变了
Ericsson 的刻意练习理论说:专家能力来自数千小时的有目的练习。程序员的传统刻意练习是什么?写代码、读代码、debug、code review。
AI 改变了练习的性价比:
| 活动 | AI 前的价值 | AI 后的价值 |
|---|---|---|
| 写 boilerplate 代码 | 中 (练手感) | 低 (AI 秒生成) |
| 实现已知算法 | 中 | 低 |
| 读源码理解系统设计 | 高 | 更高 (AI 加速但不能替代) |
| 跑 benchmark 做对比 | 高 | 更高 (AI 不能替你跑实验) |
| 调试并发 bug | 高 | 更高 (AI 目前较弱但在进步) |
| 设计 trade-off 分析 | 最高 | 最高 |
结论:练习的重心应该从"怎么写"转向"怎么判断"。 不是不需要写代码了------你仍然需要足够的基础能力来验证 AI 的输出。但差异化的价值在更高层。
回到开头那个 GC 停顿的例子。AI 能帮我在 3 秒内给出候选修复代码吗?能提供选项,但它未必能直接命中当前系统真实的非功能约束。AI 能在 3 秒内从一张 Grafana 图上形成"GC STW 卡了 RPC 关键路径"这个假设吗?目前不能------但多模态模型对时序图的理解能力在快速提升。这个例子说明的不是"人类不可替代",而是"人类目前在某些认知维度上仍有优势"。
诚实的结论是:我们不知道 AI 能力的天花板在哪里。 2022 年没有人预测到 2024 年 AI 就能做 IMO 银牌级别的数学推理。把"人类判断力不可替代"当作确定性结论,可能正是我们自己版本的自动化偏见------只不过偏见的方向相反:对人类能力的过度信任。
AI 正在加速你的手。你的判断力目前仍然重要------练它。但同时也要准备好:这个"目前"的窗口可能比你预期的短。
下一篇讲这个认知变化怎么影响程序员的职业定位。
参考资料:
- Kahneman, D. (2011). Thinking, Fast and Slow. Farrar, Straus and Giroux.
- de Groot, A.D. (1946/1978). Thought and Choice in Chess. Mouton.
- Adelson, B. (1981). Problem solving and the development of abstract categories in programming languages. Memory & Cognition.
- Soloway, E. & Ehrlich, K. (1984). Empirical studies of programming knowledge. IEEE TSE.
- Ericsson, K.A. et al. (2006). The Cambridge Handbook of Expertise and Expert Performance. Cambridge.
- Miller, G.A. (1956). The Magical Number Seven, Plus or Minus Two. Psychological Review.
- Csikszentmihalyi, M. (1990). Flow: The Psychology of Optimal Experience. Harper & Row.
- Slamecka, N.J. & Graf, P. (1978). The Generation Effect. Journal of Experimental Psychology.
- Mosier, K.L. & Skitka, L.J. (1996). Human Decision Makers and Automated Decision Aids. In Automation and Human Performance.
- Melnikoff, D.E. & Bargh, J.A. (2018). The Mythical Number Two. Trends in Cognitive Sciences.
- Kruglanski, A.W. & Gigerenzer, G. (2011). Intuitive and deliberate judgments are based on common principles. Psychological Review.
数据和引用截至 2026-02。AI 能力评估可能很快过时。