编程猿 (Code Hale, 2012) [视频]
摘要
文章解释了软件应该设计得符合人类认知系统,特别是快速直觉和慢速注意过程,以提高效果和用户体验。
暂无内容
查看缓存全文
缓存时间: 2026/08/15 18:40
**核心观点:软件应当为人类思维而设计,其运作基于两个通常相互冲突的认知系统——快速自动的“直觉”与缓慢费力的“注意力”。理解这两者的交互机制,是构建有效工具的关键。**
## 软件设计中的人为因素
我们开发软件是为了帮助人们完成任务。无论是平凡琐事还是激动人心的创造,软件本质上都是供人类使用的工具。这看似理所当然,却引出一个关键问题:人类究竟是什么?因为要构建有效工具,我们必须理解用户的本质、行为模式、需求以及思维习惯。正如斧头必须契合人手的握持,软件也必须适配人类心智的运作方式。
长期与计算机打交道的人常会陷入一个误区:将人类视为存在缺陷、易出问题的“生物计算机”。这是种职业思维陷阱。但人类并非计算机。我们没有单一统一的意识,认知过程实际上由一系列相互作用、时常冲突的机制构成。与计算机不同,我们的思维具有不确定性:情绪、环境甚至近期经历都可能在我们毫无察觉的情况下,可预测地改变行为。我们的记忆不是静态记录,而会随时间推移被不断重构甚至虚构。
我们无法直接内省大多数认知机制。心智缺乏“错误堆栈追踪”或反射式API。尽管思维过程给人以流畅连贯的体验,其实际运作却非如此。就像视觉可能被缪勒-莱尔错觉欺骗,我们的推理也会陷入认知陷阱,例如著名的蒙提霍尔问题。
幸运的是,我们无需掌握完整的人类认知模型。可以专注于观察外显的人类行为——这正是人类物种的擅长领域。认知科学与行为经济学数十年的研究,已为人类认知与行为提供了大量可重复、模型化的解释体系。
## 认知的双系统:直觉与注意力
人类认知大致由两个不同系统构成。为简便起见,我们可称之为“直觉”和“注意力”。
### 直觉:快速自动的系统
直觉易于演示。这是什么字?什么颜色?2+2等于多少?这些直觉认知行为具有共同特征:
* **自动与非自愿:** 你并未有意识地决定去阅读“狗”字、识别蓝色或计算和值。
* **轻松且迅速:** 该系统让我们能在瞬间躲避飞来的球、接住掉落的杯子或击中高速飞来的棒球。它似乎拥有无限的“认知预算”。
* **不可见:** 文字、色彩和答案仿佛直接呈现在感知中。这个过程对意识体验是隐藏的;感觉不像思考,更像直接感知现实。
直觉处理从感知椅子位置、补全句子,到看到小狗照片感到愉悦、从步态判断他人心情,以及当“顿悟”问题解决方案时的创造性跳跃等所有活动。
### 注意力:缓慢审慎的系统
注意力是直觉的对应系统,且更难控制。试一试:计算21 × 72。
你的第一反应——识别这是个乘法题——是直觉的。第二反应——可能想放弃——则涉及注意力:你有意识地判断该任务毫无意义,不值得费力。
注意力的特征包括:
* **自主性:** 你可以选择不参与。你并未自动计算答案。
* **缓慢且费力:** 2+2能瞬间完成,但21×72需要一系列步骤。我们用于注意力的工作记忆容量有限。
* **生理成本高昂:** 执行此类任务会导致瞳孔放大、心率增加、前额叶皮层葡萄糖消耗上升。注意力如同肌肉群:是有限、可恢复的资源。我们极度吝惜将其用于重要任务,因此你可能立即放弃了乘法计算。
* **有意识:** 我们将注意力过程体验为思考、选择、分析和决策。我们甚至能将注意力转向内部以评估自身推理。这就是我们与“自我”相关联的认知。
注意力用于在人群中搜索特定人物、评估论点逻辑,或等待计算精确数学结果。
总结来说:直觉非自愿但极快;注意力自愿但缓慢且认知成本高昂。直觉在意识阈限下持续运作,常被误认为现实本身;注意力是有意识的,让我们感觉像“真正”的自我。人类认知正是这两个系统相互作用的产物。
## 联想引擎与懒惰的控制器
直觉本质上是庞大的联想引擎。我们的头脑中存在一个由相互关联的想法、思维、情绪、记忆和知觉构成的加权巨型网络图。当某个节点被激活,相关的联想联结就会增强。例如,“啤酒”的概念与“宿醉”强烈关联。这些联想并行激活,解释了为何单个神经过程缓慢但整体思维迅捷。
我们感知、感受或思考的一切都会触发联想。近期的联想更为强烈。若看到“洗”,你更可能将“s _ _ p”补全为“肥皂”而非“掌掴”或“折断”。
直觉利用这些联想进行模式匹配。我们持续寻找模式,凭借丰富的联想素材,甚至能在随机概念间发现联系。试图关联“游泳”和“公路旅行”可能会唤起旅途中游泳的记忆。只有面对高度不协调的信息——如“游泳”与“土豆”——注意力才会被剧烈激活(常引发笑声:“会游泳的土豆?太荒谬了”)。
注意力充当直觉的监控器,察觉异常。然而,由于容量有限,**注意力是懒惰的**。对于21×72的任务,其监控过程瞬间判断“太无聊”并脱离工作。
这种懒惰带来一个迷人的副作用:认知替换。思考这个经典问题:
> 一只球棒和一个球总共花费1.10美元。球棒比球贵1.00美元。球多少钱?
直觉答案是10美分。但这是错的(答案是5美分)。我们的大脑用简单问题(“1.10减1.00等于多少?”)替换了难题(“解方程 x + (x+1) = 1.10”)。这种“偷换概念”之所以发生,是因为注意力脱离,让直觉采用简单却错误的启发式方法运行。
这种未察觉直觉误判的现象很常见。这就是为什么我们说“太长不看”(直觉评估文本过于枯燥,于是替换为更简单的决策)。上面的演示也发生了同样的事:我先展示正确解法让你产生“这很简单”的预设,再提问原问题。你的直觉性错误答案“10美分”可能在注意力捕捉错误前就脱口而出。这种替换偏差是经典的认知现象。
## 对“编程猿”的启示
理解这个双系统模型对那些为人类构建系统的人(“编程猿”)至关重要。它告诉我们:用户常通过快速自动的直觉,而非缓慢审慎的注意力与软件交互。他们的行为受联想模式驱动,并存在可预测的偏差。有效的设计必须承认这一现实——创造与直觉认知契合、真正可用且有益的工具,而非对抗人类心智的固有结构。
来源:[编程猿 (Code Hale, 2012) [视频]](https://www.youtube.com/watch?v=e_6gkfTomUQ)
相似文章
以理论构建的视角阅读编程
本文推荐 Peter Naur 的著作《编程即理论构建》,主张编程的本质在于构建和传达对软件的心理模型,而不仅仅是编写代码。
@4rblaber:Anthropic 负责人:"人们总是执着于写出完美的代码行。别再这样做。" "直接告诉Claude你要...
Anthropic CEO Dario Amodei 建议开发者停止手动编码,转而通过目标驱动的提示来引导像Claude这样的AI模型;同时,OpenAI联合创始人Andrej Karpathy在播客中也表达了类似的“vibe coding”观点,这标志着向AI驱动开发工作流的转变。
软件关乎人,而非代码(2020)
一篇论述软件成功更多取决于理解人及其需求,而非编写完美代码的文章,并以被遗弃的、未解决实际问题的代码库为例。
@badlogicgames:推荐阅读。
本文讨论了软件工程中的有限认知概念,强调了人类记忆和注意力的局限性,以及在这些限制下如何构建软件系统。
掌控思想,而非代码
在这篇博文中,antirez认为在人工智能时代,程序员应该专注于掌控软件背后的思想,而非阅读每一行代码,因为AI可以生成局部最优的代码,而人类擅长大局设计和方向。