土法炼钢兴趣小组的算法知识备份

你的大脑正在发生什么:程序员的认知心理学

目录

上周调一个线上 bug。一个 gRPC 服务在高负载下偶发 deadline exceeded,但 CPU 和内存都没打满。我盯着 Grafana 看了二十分钟,突然注意到 GC 停顿和 P99 延迟的相关性——然后脑子里自动跳出来一个画面:GC STW 刚好卡在 RPC 的关键路径上,上游 300ms 超时被吃掉了大半。

从”看到 GC 停顿曲线”到”形成因果假设”,大约 3 秒。我没有”思考”,是直觉。

这个直觉是怎么来的?AI 能不能复制它?

要回答这两个问题,需要先搞清楚一个前置问题:程序员的大脑在做什么认知操作?这不是哲学问题。认知心理学对此有精确的模型,有可复现的实验数据。搞清楚这个,才能判断 AI 在替代什么、不在替代什么。

一、两种认知系统

Daniel Kahneman 的 System 1 / System 2 理论:

System 1(快,自动,无意识):模式匹配。你看到一段代码,0.3 秒内知道”这是一个观察者模式”或”这里有一个 off-by-one”。不需要思考,直觉级反应。

System 2(慢,费力,有意识):符号推理。你在推导一个并发算法的正确性证明,或者在白板上画一个复杂的状态机转换图。需要工作记忆,很累,一天做不了太多。

编程同时使用两个系统。而且随着经验增长,比例会变化。

二、专家和新手的认知差异

de Groot (1946) 的国际象棋实验是认知心理学的经典:给棋手看一个真实的棋局 5 秒,然后让他们复盘。大师能复盘 90%+ 的棋子位置,新手只能复盘 25%。

但如果棋子是随机摆放的(不是真实棋局),大师和新手的表现一样差。

结论:大师不是记忆力好——他们是把棋局”分块”(chunking) 了。一个棋型不是 20 个独立的棋子,而是 5-6 个有意义的”块”:一个西西里防御开局、一个王翼攻击阵型、一个中心兵链。

后来的研究者把类似的实验搬到了编程领域。Adelson (1981) 发现同样的规律:专家程序员在看真实代码时能记住更多行,但看随机打乱的代码行时和新手一样。Soloway & Ehrlich (1984) 进一步证实:专家的优势来自识别”编程计划”(programming plans)——循环累加、哨兵检查、边界处理——这些固定搭配被压缩成了单个认知单元。

编程专家的核心能力是 chunking:把代码模式压缩成高层概念。

一个新手看到:

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]);

他看到两个嵌套循环、一个比较、一个交换。四个操作。

一个专家看到:选择排序。一个概念。

这个压缩不是偷懒——它释放了工作记忆。人的工作记忆容量大约是 4-7 个 chunk (Miller, 1956)。新手的 4 个 chunk 被循环和比较占满了,没有空间思考”这个排序在这里是否合适”。专家用一个 chunk 就搞定了排序,剩下 3-6 个 chunk 去思考更高层的问题。

三、AI 在替代 System 1

ChatGPT 和 Copilot 做的事情,本质上是 System 1 的外包。

能力 System 1 (模式匹配) System 2 (符号推理)
识别设计模式 AI 擅长 N/A
生成 boilerplate 代码 AI 擅长 N/A
解释一段代码的功能 AI 擅长 N/A
查找 API 用法 AI 擅长 N/A
证明并发算法正确性 AI 不行 人类慢但能做
设计系统架构 AI 给出常见方案 需要人类判断约束
调试竞态条件 AI 几乎无能 需要系统化推理
判断”这个优化值不值得” AI 不行 需要工程判断

AI 的训练过程本质上就是在建造一个超大规模的 System 1——它见过海量的代码模式,能在 0.1 秒内匹配并生成。但它没有 System 2。它不能做多步推理、不能维护全局不变量、不能在矛盾的约束之间做权衡。

四、Chunking 的层次

编程专家的 chunking 不是一层的:

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: 工程判断 (这个系统应该做什么, 不应该做什么)

AI 在 Level 0-2 非常强。Level 3 有时对有时错。Level 4-5 基本不行。

这意味着什么?如果你的日常工作主要在 Level 0-2(写 CRUD、实现已知算法、搬运 API 调用),AI 确实在替代你的核心价值。

如果你的工作在 Level 3-5(设计系统、做工程权衡、调试复杂 bug),AI 是你的加速器而不是替代者。它帮你更快地完成 Level 0-2 的实现,让你有更多时间花在 Level 3-5 上。

五、被忽视的三个认知陷阱

上面讲的是”AI 替代了什么”。下面讲三个更隐蔽的问题——AI 辅助编程对你大脑的副作用。

心流破坏。 Csikszentmihalyi 的心流理论说:心流状态需要”挑战和技能的平衡”。编程是少数能让人进入深度心流的职业——但 AI 自动补全每 15 秒打断你一次。你从”我在创造”变成了”我在审批”。审批不产生心流。长期下来,你可能更高效了,但更不享受了。

生成效应衰退。 认知科学的铁律:自己生成的信息比被动接收的记得更牢(Slamecka & Graf, 1978)。你自己写的代码,debug 三次才跑通的代码,会刻进长期记忆。AI 写+你审,看起来一样的知识转移,但记忆编码的深度完全不同。就像运动员不让机器替自己训练——你的大脑需要”自己犯错”来成长。

自动化偏见。 Mosier & Skitka (1996) 在航空领域发现的规律:人对自动化系统的信任度,会在使用初期快速上升,即使系统有错。程序员版本:你用 Copilot 三个月后,会不自觉地降低对 AI 输出的审查力度——我们审计 50 段 AI 系统代码时发现的很多 bug,恰恰是”看起来对”所以没人细看的那种。

反直觉结论:越高效使用 AI 的人,越需要定期”无 AI 编程时间”。 不是因为 AI 不好——是因为你的大脑需要主动练习来维持 chunking 能力和审查直觉。

六、刻意练习的方向变了

Ericsson 的刻意练习理论说:专家能力来自数千小时的有目的练习。程序员的传统刻意练习是什么?写代码、读代码、debug、code review。

AI 改变了练习的性价比:

活动 AI 前的价值 AI 后的价值
写 boilerplate 代码 中 (练手感) 低 (AI 秒生成)
实现已知算法
读源码理解系统设计 更高 (AI 加速但不能替代)
跑 benchmark 做对比 更高 (AI 不能替你跑实验)
调试并发 bug 更高 (AI 完全不行)
设计 trade-off 分析 最高 最高

结论:练习的重心应该从”怎么写”转向”怎么判断”。 不是不需要写代码了——你仍然需要足够的 Level 0-2 能力来验证 AI 的输出。但差异化的价值在 Level 3-5。

回到开头那个 GC 停顿的例子。AI 能帮我在 3 秒内写出修复代码吗?能。AI 能在 3 秒内从一张 Grafana 图上形成”GC STW 卡了 RPC 关键路径”这个假设吗?不能。前者是 Level 1 的模式匹配,后者是 Level 4 的系统直觉——来自几百次类似故障的 chunking 积累。

AI 加速了你的手。但你的判断力,只能自己练。

下一篇讲这个认知变化怎么影响程序员的职业定位。


延伸阅读:

参考资料:

  1. Kahneman, D. (2011). Thinking, Fast and Slow. Farrar, Straus and Giroux.
  2. de Groot, A.D. (1946/1978). Thought and Choice in Chess. Mouton.
  3. Adelson, B. (1981). Problem solving and the development of abstract categories in programming languages. Memory & Cognition.
  4. Soloway, E. & Ehrlich, K. (1984). Empirical studies of programming knowledge. IEEE TSE.
  5. Ericsson, K.A. et al. (2006). The Cambridge Handbook of Expertise and Expert Performance. Cambridge.
  6. Miller, G.A. (1956). The Magical Number Seven, Plus or Minus Two. Psychological Review.
  7. Csikszentmihalyi, M. (1990). Flow: The Psychology of Optimal Experience. Harper & Row.
  8. Slamecka, N.J. & Graf, P. (1978). The Generation Effect. Journal of Experimental Psychology.
  9. Mosier, K.L. & Skitka, L.J. (1996). Human Decision Makers and Automated Decision Aids. In Automation and Human Performance.

数据和引用截至 2025-02。


By .