<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>认知债 on Lingming 灵明</title><link>https://lingming.blog/tags/%E8%AE%A4%E7%9F%A5%E5%80%BA/</link><description>Recent content in 认知债 on Lingming 灵明</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 21 Jul 2026 23:04:10 -0400</lastBuildDate><atom:link href="https://lingming.blog/tags/%E8%AE%A4%E7%9F%A5%E5%80%BA/index.xml" rel="self" type="application/rss+xml"/><item><title>黑箱转向（三）：认知债——团队知道得越来越少吗</title><link>https://lingming.blog/posts/2026/the-collapse-of-linearity/</link><pubDate>Mon, 02 Mar 2026 11:45:57 -0500</pubDate><author>Lingming</author><guid>https://lingming.blog/posts/2026/the-collapse-of-linearity/</guid><description>AI 生成代码可能让系统增长快于团队理解，但“不知道每一行”并不等于失控。本文把认知债定义为安全修改所需知识与团队实际可调用知识之间的缺口，区分技术债、理解债和意图债，并提出识别、度量与偿还方法。</description><content:encoded>&lt;p>一次故障发生在周五深夜。代码风格整洁，测试也不少，但值班工程师无法回答三个问题：这个重试为什么设置为五次？两个状态字段为何必须一起更新？删除某段兼容逻辑会影响哪一批旧客户？&lt;/p>
&lt;p>问题不是代码不可见，而是让团队安全修改它的知识没有留在可调用的位置。&lt;a href="https://lingming.blog/posts/2026/the-generative-inflection-point/">上一篇&lt;/a>把生成拐点定义为实现吞吐超过保证吞吐。本篇讨论这种落差积累后的一个结果：认知债。&lt;/p>
&lt;h2 id="认知债不是没人读过全部代码">认知债不是“没人读过全部代码”&lt;/h2>
&lt;p>大型系统本来就不需要每个成员理解所有细节。健康的抽象允许团队只掌握与职责相称的部分。若把“不知道每一行”都算作债务，模块化本身就会成为问题。&lt;/p>
&lt;p>本文采用一个更窄的定义：&lt;/p>
&lt;blockquote>
&lt;p>认知债，是团队为了安全解释、修改和恢复系统所需要的知识，与当下能够及时调用的知识之间的缺口；这项缺口把成本和风险推迟到未来。&lt;/p>&lt;/blockquote>
&lt;p>这个定义包含两个限制。第一，缺少的必须是未来任务真正需要的知识，而不是任何可能知识。第二，它必须产生延迟成本，例如变更更慢、审查失真、事故恢复困难或关键人员离开后风险上升。&lt;/p>
&lt;p>因此，认知债不能仅凭代码行数、AI 生成比例或主观陌生感判断。它需要在具体任务中表现出来。&lt;/p>
&lt;h2 id="它与技术债意图债有什么不同">它与技术债、意图债有什么不同&lt;/h2>
&lt;p>技术债通常位于软件制品中：重复逻辑、脆弱依赖、缺少测试、不合理耦合。即使没人意识到，它们仍可能通过分析和重构被发现。&lt;/p>
&lt;p>认知债位于团队与系统的关系中。同一份代码，对长期维护者可能没有认知债，对刚接手且没有文档的团队却可能风险很高。&lt;/p>
&lt;p>还可以进一步区分&lt;strong>意图债&lt;/strong>：系统保留了“做了什么”，却没有保留“为什么这样做”、替代方案为何被拒绝、哪些假设可能过期。意图债是认知债的重要来源，但两者不完全相同。团队也可能拥有设计记录，却缺乏把它应用到当前故障的能力。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>债务&lt;/th>
 &lt;th>缺口主要在哪里&lt;/th>
 &lt;th>常见表现&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>技术债&lt;/td>
 &lt;td>代码与架构制品&lt;/td>
 &lt;td>改动牵一发而动全身、缺陷反复出现&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>认知债&lt;/td>
 &lt;td>团队可调用的心智模型&lt;/td>
 &lt;td>接手慢、审查无法质疑、事故定位困难&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>意图债&lt;/td>
 &lt;td>决策理由与约束记录&lt;/td>
 &lt;td>不敢删除旧逻辑、反复争论已解决问题&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>三者会相互强化，但治理手段不同。重构可以减少技术债，培训和轮岗可以减少认知债，决策记录和需求追踪更适合处理意图债。&lt;/p>
&lt;h2 id="ai-如何增加认知债">AI 如何增加认知债&lt;/h2>
&lt;p>AI 并不是唯一来源，却会放大几种积累机制。&lt;/p>
&lt;h3 id="先有答案后补问题模型">先有答案，后补问题模型&lt;/h3>
&lt;p>工程师在充分理解领域之前就得到可运行实现，容易把熟悉的代码形状误认为正确的问题模型。系统可以通过当前测试，却没有人能说明未测试的边界。&lt;/p>
&lt;h3 id="生成批量大于学习批量">生成批量大于学习批量&lt;/h3>
&lt;p>一个人可能逐行编写时顺便形成局部心智模型；一次接受数百行跨模块变更时，这种伴随学习不会自动发生。阅读者如果只确认表面合理，就把理解成本推给未来维护。&lt;/p>
&lt;h3 id="设计理由停留在临时对话">设计理由停留在临时对话&lt;/h3>
&lt;p>模型对话可能包含关键约束、失败尝试和方案取舍，但最终仓库只保存代码。聊天记录即使被保留，也常常过长、含噪且难以检索，不能直接等同于设计文档。&lt;/p>
&lt;h3 id="能做出来被误认为能够维护">能做出来被误认为能够维护&lt;/h3>
&lt;p>代理可以在熟悉基准上完成任务，却未必掌握组织内部历史、合规规则和运行经验。团队若因为生成成功而削弱人工所有权，故障发生时会发现工具和人都缺少完整上下文。&lt;/p>
&lt;h2 id="ai-也可能减少认知债">AI 也可能减少认知债&lt;/h2>
&lt;p>认知债不是使用 AI 的必然结果。同一种工具也能解释陌生模块、生成调用图、比较方案、补充测试、整理事故记录或把隐性知识转成可搜索文档。&lt;/p>
&lt;p>关键差别是它承担哪一种角色：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>替代角色&lt;/strong>：直接交付答案，人类跳过建模与质疑；&lt;/li>
&lt;li>&lt;strong>脚手架角色&lt;/strong>：帮助人类建立、检查和外化心智模型。&lt;/li>
&lt;/ul>
&lt;p>2026 年一项针对本科软件工程项目的初步定性研究把类似现象称为 comprehension debt。研究从学生反思记录中识别出黑箱式接受、上下文不匹配和绕过验证等积累模式，也观察到把 AI 用作理解脚手架的缓解模式。它提供了有用线索，但样本来自教学项目，不能直接外推到所有专业团队。&lt;/p>
&lt;h2 id="怎样观察认知债">怎样观察认知债&lt;/h2>
&lt;p>认知债目前没有公认的单一指标，也不适合用一个分数制造虚假精确。可以组合观察以下信号。&lt;/p>
&lt;h3 id="修改前的预测能力">修改前的预测能力&lt;/h3>
&lt;p>在查看测试结果之前，维护者能否预测改动会影响哪些模块、数据和用户？预测长期偏差，说明心智模型与实际系统脱节。&lt;/p>
&lt;h3 id="接手与解释成本">接手与解释成本&lt;/h3>
&lt;p>新成员完成一个真实变更需要多久？审查者能否用自己的话解释关键不变量？如果只有提示操作者能够继续工作，知识并未真正进入团队。&lt;/p>
&lt;h3 id="事故诊断能力">事故诊断能力&lt;/h3>
&lt;p>平均恢复时间上升不一定来自认知债，但事故中反复出现“没人知道为什么”“只能试着回滚”“不敢动这段代码”，是更直接的定性证据。&lt;/p>
&lt;h3 id="决策理由覆盖">决策理由覆盖&lt;/h3>
&lt;p>高风险模块是否保存了关键约束、被拒方案和有效期限？文档数量不是重点，能否在需要时找到并验证才是重点。&lt;/p>
&lt;h3 id="审查的质疑密度">审查的质疑密度&lt;/h3>
&lt;p>审查是否只剩格式和测试通过，还是有人挑战需求、权限、失败方式与可运维性？完全没有异议的大批生成变更，不一定代表质量极高，也可能代表审查者没有形成模型。&lt;/p>
&lt;h2 id="怎样偿还而不是制造文档仓库">怎样偿还，而不是制造文档仓库&lt;/h2>
&lt;ol>
&lt;li>&lt;strong>缩小生成批量。&lt;/strong> 让每次变化足够小，使审查者能解释其目的、边界和风险。&lt;/li>
&lt;li>&lt;strong>要求教回。&lt;/strong> 合并前由负责人不用模型复述关键数据流、不变量和失败模式。&lt;/li>
&lt;li>&lt;strong>保存决策，不保存全部对话。&lt;/strong> 把长对话压缩为简短的架构决策记录，并说明假设何时需要复查。&lt;/li>
&lt;li>&lt;strong>让测试表达性质。&lt;/strong> 除了示例输入输出，还记录为什么这个性质重要，以及哪些区域尚未覆盖。&lt;/li>
&lt;li>&lt;strong>轮换真实所有权。&lt;/strong> 通过结对、值班和跨人审查检验知识能否转移。&lt;/li>
&lt;li>&lt;strong>删除不必要实现。&lt;/strong> AI 让增加代码很便宜，更需要把删除、合并和依赖收缩当作正式工作。&lt;/li>
&lt;li>&lt;strong>在事故后更新模型。&lt;/strong> 复盘不仅修 bug，还要说明此前哪条理解错误、怎样让下一位维护者更早发现。&lt;/li>
&lt;/ol>
&lt;p>这些做法的目标不是让每个人背下系统，而是让关键知识不只存在于某次生成会话、某个人的记忆或一个无法验证的解释里。&lt;/p>
&lt;h2 id="结语债务来自延迟而不是无知本身">结语：债务来自延迟，而不是无知本身&lt;/h2>
&lt;p>工程师永远会对系统有所不知。健康工程的目标不是消灭未知，而是把未知放在合适边界内，并为重要未知配置验证和恢复机制。&lt;/p>
&lt;p>认知债出现于另一种情况：团队今天接受了自己尚未理解、也没有外部证据充分约束的变化，把解释和维护成本推迟给未来。AI 让这种借款更容易，也能帮助偿还。决定方向的不是工具是否生成代码，而是组织有没有把理解视为需要持续维护的共同资产。&lt;/p>
&lt;h2 id="延伸阅读与参考资料">延伸阅读与参考资料&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://arxiv.org/abs/2604.13277">Comprehension Debt in GenAI-Assisted Software Engineering Projects（预印本）&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://arxiv.org/abs/2603.22106">From Technical Debt to Cognitive and Intent Debt: Rethinking Software Health in the Age of AI（预印本）&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://dora.dev/research/2025/dora-report/">DORA：State of AI-assisted Software Development 2025&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://martinfowler.com/bliki/TeamTopologies.html">Martin Fowler：Team Topologies&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;em>上一篇：&lt;a href="https://lingming.blog/posts/2026/the-generative-inflection-point/">《黑箱转向（二）：生成—验证落差，真正的拐点》&lt;/a>；下一篇：&lt;a href="https://lingming.blog/posts/2026/controlling-the-unreadable/">《黑箱转向（四）：控制不可读之物，需要哪些证据》&lt;/a>。&lt;/em>&lt;/p></content:encoded></item></channel></rss>