Skip to content
Blog

隐性知识与显性知识

认知知识管理

We know more than we can tell.
— Michael Polanyi

核心概念

隐性知识(Tacit Knowledge):无法完全用语言表达的知识,包括直觉、模式识别、审美判断、身体记忆。

显性知识(Explicit Knowledge):可以用语言、文字、公式明确表达的知识。

Polanyi 的洞察

波兰尼在《个人知识》(Personal Knowledge, 1958)和《隐性维度》(The Tacit Dimension, 1966)中指出:

我们知道的远多于我们能表达出来的。

经典例子

  • 骑自行车:你会骑,但无法完全用语言教会别人平衡感
  • 识别人脸:你认得某人,但无法完全描述“为什么这是他”
  • 品酒:专家能分辨细微差别,但无法完全言传

在编程中的体现

优秀工程师的隐性知识

  1. 代码审美 — 看一眼代码就知道“这里不对劲”,但说不清具体哪里不对
  2. 架构直觉 — 感觉“这个设计会出问题”,但无法完全形式化推理过程
  3. Bug 嗅觉 — 凭经验判断“问题可能在这个模块”,跳过大量无关代码
  4. 取舍判断 — 在没有完整信息的情况下,依靠直觉做出“足够好”的决策

为什么无法完全显性化?

编程中的隐性知识来自:

  • 模式识别:大脑在大量案例中形成的模式,无法完全意识到
  • 上下文感知:对项目历史、团队风格、业务约束的整体把握
  • 审美偏好:对“好代码”的感觉,部分是文化、部分是个人经验

隐性知识的传递

不能靠“讲”,只能靠“示范 + 观察 + 实践”

传递方式 效果 为什么
读文档 ❌ 低效 文档只能传递显性知识
听讲座 △ 有限 可以传递部分模式,但无法覆盖所有上下文
Code Review ✅ 高效 Junior 观察 Senior 的修改建议,习得判断力
Pair Programming ✅ 高效 实时观察思考过程和决策路径
踩坑 + 反思 ✅ 最高效 亲身经历形成的隐性知识最牢固

Code Review 的隐藏价值

Code Review 的价值不只是发现 bug,更是传递隐性知识:

  • Senior 说“这里应该抽象”,Junior 看到了抽象的时机
  • Senior 说“这个命名不够清晰”,Junior 习得了命名的审美
  • Senior 说“这里可能有并发问题”,Junior 建立了并发的直觉

对“说不清楚是因为想不清楚”的补充

第 9 条编程哲学说:说不清楚是因为想不清楚。

但隐性知识的存在表明:有时“说不清楚”不是因为“想不清楚”,而是因为这类知识本质上就无法完全言说。

两种“说不清楚”

  1. 思考不够深入 → 继续思考,写出清晰的技术方案
  2. 隐性知识无法言传 → 不要强求显性化,用“示范 + 实践”传递

如何区分?

如果你能做出正确决策(写出好代码、找到 bug、设计出好架构),但无法完全解释推理过程 → 这是隐性知识,不是思考不够。

对知识管理的启示

Wiki 的局限性

Wiki、文档、知识库只能捕获显性知识。大量的隐性知识(审美、直觉、上下文感知)无法写进文档。

混合策略

  • 显性知识 → Wiki、文档、ADR
  • 隐性知识 → Code Review、Pair Programming、案例分析、导师制

在 system-weaver 中的体现

  • sources/ 和 wiki/ 捕获显性知识
  • 对话、code review、实际项目操作传递隐性知识

与结构思维的关系

结构思维强调“说清楚”,但也要承认有些结构是通过实践涌现的,而不是先规划后执行。

TDD 的例子

TDD 的“消除重复后自然涌现设计”就是隐性知识的体现:

  • 你无法事先完全设计出最优结构
  • 但通过红-绿-重构循环,好的结构会自然显现
  • 这个过程部分依赖你的审美和直觉

实践建议

  1. 不要强求显性化一切 — 有些知识必须通过实践传递
  2. 重视 Code Review — 这是传递隐性知识的最佳场景
  3. 建立导师制 — Junior 跟着 Senior 工作,观察思考过程
  4. 记录决策而非过程 — ADR 记录“决定了什么”,不强求解释“为什么这样想”
  5. 鼓励踩坑 — 亲身经历形成的隐性知识最牢固

核心原则

智慧不可传授,唯有实践。 但隐性知识可以通过观察、模仿、反思逐步习得。

Type to search…

↑↓ navigate↵ selectEsc close