软件之外的心智

我研究的东西通常始于偶然,来自我读的一本书或文章,或者来自与共事者的对话。我研究,让想法在一个小的个人项目中成熟,如果它说服了我,我就把它推广到更重要的项目中。

上周我重新打开了一个个人项目的Pull Request,这个Pull Request我在十天前已经合并了。很多代码行,由一个AI代理根据我非常具体的提示生成。产品团队(我的兄弟,和我共享这个项目)发来了一个修改请求,所以我重新开始处理这个问题。

看着diff,我意识到了一些我从未想过会感受到的东西。我完全知道代码背后的意图。我知道它应该做什么。我甚至记得我们遇到的问题。然而,在滚动浏览这些行时,有一个黑暗区域:有些函数的结构像是外来的东西。它们写得非常好,也许比我自己写的还要好。问题在于它们没有像我在其他项目中手动构建的类那样存在于我的脑海中。

那一刻,我感受到了一种非常清晰的负债感。一种微妙的、看不见的负债。在与业务团队讨论时,我几乎感到尴尬,再次,我的兄弟。比代码本身更奇怪的东西缺失了。那段代码的心理理论缺失了。

而这正是我今天想要开始的地方。

1、当写作意味着沉淀

几十年来,编程是一项极其缓慢的活动。为了简单起见,让我们暂时抛开TDD等模式,专注于编程的纯粹概念。你坐在一个问题面前,逐字逐句地处理它,一遍又一遍地返回,编写三天后就会被重写的类和方法。规格说明(规范和自动化测试)也是如此。生产力很低,但与此同时,在手移动的时候,一些沉默的事情正在头脑中发生。地图正在形成。

什么地图?系统、数据流、只有在看到bug出现在没人预料到的地方时才出现的权衡。几乎肌肉般的直觉地图,关于某类问题以后会再次出现的地方。编写代码有一个第二层沉默的层次,由认知沉淀组成。这是一个缓慢、令人精疲力竭的过程,正因为如此,它也是深刻的。你编写代码,但你像画家一样绘制它。你在脑海中观察它并像雕塑家一样雕刻它。

当一个工程师在一小时内就能生产出几年前需要几天才能完成的代码量时,我们应该问自己一些生产力指标无法描述的问题。所有那些过去在那段时间里涌现的理解都去哪儿了?

2、阅读代码和理解代码是两个不同的职业

这里有一个值得学术上澄清的区别。

阅读代码创造熟悉感。你滚动浏览它,识别模式,大致理解事情的发展方向。理解代码是另一回事。理解意味着在你自己的脑海中执行它。一个资深工程师,当面对他们真正了解的系统时,从来不是逐行阅读的。他们的大脑正在做一些更接近内部仿真的事情。它预测bug会在哪里出现。它感知哪些组件会冲突。它预期哪些变更会在明显遥远的领域产生副作用。

这种内部模拟的能力是真正的理解水平。这是一种昂贵的能力,因为它需要将数千个细节压缩成一个可导航的心理模型。

在之前的文章中,我详细讨论了transformer如何拖动巨大的缓存而从未建立真正的内部记忆。拥有巨大的上下文窗口与拥有强大的回忆能力是不同的。同样的情况也适用于我们。暴露于大量代码与内化它是非常不同的。整个系统可以在开发者的眼前经过,而从未进入他们的认知结构。

而这正是我在上一篇文章中已经提到的一个角色从新的角度回归的地方。

3、弗内斯,但这次是我们

在关于KV缓存和遗忘的前一篇文章中,我使用博尔赫斯的《弗内斯,记忆者》来描述transformer问题。弗内斯记住每一片叶子、每一个瞬间、世界的每一个变化,正因为如此他无法真正思考,因为思考意味着抽象,而抽象需要选择性地丢失信息。

在那个推理中,弗内斯是模型的隐喻。

但还有另一个角度让我觉得更有趣,如果从2026年工程师的角度来看,这个故事完美地支持了这一点。今天,这篇文章似乎也在谈论我们。关于我们每天使用AI代理的人,关于我们午餐前处理几十个Pull Request的人,关于我们浏览仓库时代码在我们眼前经过的速度超过人类心智消化能力的人。

工程师们今天面临的风险以一种令人不安的方式类似于弗内斯的命运。我们看到一切。我们滚动浏览无尽的diff。我们批准一个又一个变更。每天产生代码暴露量在该职业历史上前所未有。然而,这种暴露越来越少地转化为理解,越来越多地转化为模仿熟悉感的表面饱和。

我们时代的认知饱和已经改变了它的性质。过去它源于信息稀缺。今天它源于过剩,源于我们移动太快而无法转化为抽象的暴露。

在成为模型的隐喻之前,弗内斯是一个看得太多而理解太少的心智的隐喻。

4、我们真正委派的是什么

为了正确地框定问题,我们需要做一个微妙的区分,因为人类历史充满了认知委派,而没有一个摧毁了文明。

我们将记忆委派给文字。我们将计算委派给计算器。我们将导航委派给数字地图。每种认知技术都将部分思维移出心智,通常它这样做时会保留一些东西。计算器从我们手中移除了计算,但数学过程仍然可以理解。地图移除了记住方向的努力,但我们的地理感没有被抹去。

AI代理引入了一些不同的东西,这种区别值得仔细处理。一个能够生成一千行代码的代理将人类直到昨天还无法委派的东西移出了人类心智:中间的推理链。

在那一千行代码中生活着数十个隐含的决策。时间优先级、关于竞态条件的假设、关于最终一致性的权衡、失效策略、关于状态写入和读取顺序的决策。这些是历史上在屏幕前涌现的微架构决策,而工程师的心智则一一经历它们,与每一个发生冲突,并通过这种重复的摩擦建立直觉。

当代理跨越整个序列时,生成的系统可以工作。然而,生成它的逻辑路径以更加稀释的方式通过人类心智,几乎就像从快速火车的窗户看到的图像。

5、断裂的连续性

多年来,软件工程在三个时刻之间包含了一种隐含的连续性:

  1. 意图,
  2. 实现,
  3. 理解。

你想象一个解决方案,慢慢构建它,在构建过程中心理模型不断完善。思想产生代码,代码强化思想。

今天这个三角形趋于崩溃。越来越多的时候,留在我们手中的只有最初的意图和最终的验证。中间的部分,漫长的部分,令人精疲力竭的部分,被代理穿越。而这正是深度理解历史上涌现的区域。

试着想象具体的差异。直到几年前,说"让我们用分布式缓存和重试策略实现乐观更新"意味着开始一周的战斗。你写了一个草案,遇到了奇怪的竞态条件,重写了失效逻辑,发现指数重试与某个缓存共存不好,最终达到了一个体面的版本。那场战斗的每一天都会在头脑中沉积另一层直觉,这将伴随一生。

今天,同样的请求,以提示的形式表达,可以在几个小时甚至几分钟内产生一个工作解决方案。代码存在。代码运行。解释为什么它以那种方式工作的统一心理理论远不那么有保证。

6、也许理解并没有消失,而是迁移了

然而,将这一切解读为纯粹的损失就太简单了。每一次重大的技术抽象也改变了人类所需的直觉类型。用汇编语言编程构建了一种与高级语言不同的理解,而编排AI代理可能已经开始构建另一种。

直觉可能根本不会消失。它可能只是向更高层次的抽象移动。较少与单个函数相关,更多与包含系统、验证假设、识别新兴脆弱性以及引导代理通过比单个人类能够探索的大得多的架构空间的能力相关。

问题也许不是我们是否在失去直觉。而是理解哪些直觉在新直觉有足够时间形成之前就有萎缩的风险。

风险不是生产没人编写的软件。而是生产没人真正深入思考过的软件。

7、疲劳作为认知技术

我想花几分钟时间讨论一个在我看来似乎很核心、却经常被当作细节处理的概念:疲劳

认知疲劳一直是软件工程的功能性、几乎是认识论的一部分。编写解析器、调试器、并发系统或复杂算法意味着缓慢地穿越复杂性,而这种缓慢很重要。大脑需要它来构建深度模型,因为人类心智通过摩擦构建深度模型。失败的尝试。燃烧的错误。揭示最微妙bug的重构。消耗整个下午处理五行代码的调试会议。

AI代理极大地压缩了所有这些摩擦。从生产的角度来看,这是一个巨大的礼物。从学习的角度来看,它也可能成为一个陷阱。压缩经验通常意味着压缩从该经验中学习的机会。

我喜欢用音乐做类比。一个学习困难曲子的钢琴家不仅仅是在训练手指达到最终表演。他们通过缓慢重复动作来构建深度神经结构,这些结构成为解释的地下层。如果有人神奇地在没有多年学习的情况下赠送他们最终表演,他们会有一场音乐会。他们仍然不会有一个钢琴家。

类似的情况也适用于软件。多年的调试在工程师内部构建了几乎物理性的系统直觉。延迟感、并发感、对架构脆弱性的敏感性。这些不是你在书中能找到的东西,因为它们不是概念。它们是通过处理无数真实案例而构建的心理老茧。

真正的担忧有一种微妙的形状。工程师们仍然和以前一样聪明。有风险被中断的是系统直觉历史性形成的沉默过程。如果代理代替我们去健身房,肌肉仍然停留在原来的位置。

8、控制的幻觉

有一个值得命名的小心理陷阱。当一个系统工作时,我们立即产生一种控制感。我们看到测试通过、端点响应、UI正确渲染,我们感知到掌握。然而,真正的掌握是在别处衡量的。它是在系统崩溃时衡量的。

当一个bug在凌晨三点出现在生产环境中,当一个没人考虑的边缘情况拖垮了一个流水线,当奇怪的行为在意外负载条件下出现时,那就是理解债务呈现其发票的地方。在那里我们发现我们是否真正拥有系统的理论,或者我们是否仅仅拥有一个工作系统和一个关于它应该如何行为的模糊直觉。

这就是为什么工程师的价值在破裂时刻最为明显。在那里我们衡量心智是否真正包含系统,还是仅仅掠过其表面。

9、包含比心智增长更快的东西

在这一点上,我想抬起我的目光,因为我相信这一切反映了工程职业本身的深刻转变。

几十年来,编写软件的人的价值很大一部分与他们生产该软件的能力重合。在AI代理的世界中,生产正在悄悄变得丰富,几乎免费。稀缺性转移到别处。它变成了构建与比人类心智进化跟随的速度更快增长的极其复杂系统的连贯心理表征的能力。

这种能力有一个我喜欢在本课中向我想象的"学生"重复的名字:包含。包含一个系统意味着知道哪些抽象真正重要,哪些细节可以忽略而不在以后付出代价,真正的复杂性生活在哪里,只有表面复杂性在哪里,代码的哪些部分正在积累将在六个月后爆炸的隐形紧张。它几乎是一种建筑性的心智能力,而正是AI代理至少目前完全没有替代的那种能力。

在这里,我到达了我认为最重要的反思,以及将这篇文章与我近几个月关于transformer、潜在记忆和遗忘所写的一切联系起来的地方。

智能,无论是生物的还是人工的,与处理的信息量越来越无关。相反,它关乎建立在这些信息之上的心理压缩的质量。一个伟大的工程师,就像一个设计良好的transformer一样,是通过将庞大系统转化为可管理的认知结构的能力来衡量的。它是通过忘记正确的事情和记住核心事情的能力来衡量的。

软件工程的未来可能属于那些仍然能够为系统构建心理理论的人,而系统本身比心智增长得更快。

10、遗忘足够,理解足够

我想通过回到贯穿整个系列文章的主题来结束:遗忘

多年来,我们相信人工智能的进步意味着添加记忆、上下文和生成能力。这个故事是真实的,但不完整。缺失的部分涉及我们。

未来几年的紧迫问题将越来越少地关乎我们能从代理中提取多少生产力,越来越多地关乎我们无法完全委派哪些认知过程。人类理解产生于一种非常微妙的平衡。记住足够以建立随时间推移的连续性。遗忘足够以进行抽象。AI代理正在改变这种平衡的两端。

回到手工编写每一行代码将是浪漫的怀旧,可能没有用。但问题还有另一个版本,它每天早上当我打开编辑器,代理在我身边时追随我。这是在正确时刻慢下来的纪律。深入重读diff而不是仅仅扫描它。要求代理解释其隐含假设而不是默默接受。偶尔自己编写最重要的部分,即使代理可以做得更好,因为我需要让复杂性再次通过我,而不是仅仅从外部观察它。

不是出于对失落工艺的怀旧,而是因为某些形式的理解仍然通过直接穿越复杂性而诞生,而其他形式可能恰恰在编排它的能力中涌现。

未来几年的真正挑战将在与软件生产速度不同的层面上展开。它将在工程师继续在心理上栖息于比其自然理解能力增长更快的系统中的可能性中展开。

而也许,在这个奇怪的十年里,一个好工程师的定义性特征正是这一点:能够在十分钟内观看代理生成数千行代码,并在清晰中决定,在这十分钟中的哪些分钟值得慢下来。


原文链接:The Mind Outside Software

汇智网翻译整理,转载请标明出处