双向循环:正向与逆向不断交替
正向建模和逆向应用不是两个独立阶段,而是一个循环。模型建立后用于解决新问题(逆向),新问题暴露模型的不足,反过来修正模型(正向)。模型不是最终答案,而是当前阶段对一类具体事物的压缩描述——它一直在被使用、被挑战、被修正。
一、它不是单向的
最朴素的误解是:先正向(学模型),后逆向(用模型),然后结束。
实际是循环:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ┌──────────────┐ │ 具体问题 │ └──────┬───────┘ ↓ 观察 比较 ↓ 提取共同性 ↓ 抽象模型 ↓ 用模型预测 ↓ 应用于新问题 ↓ 发现模型不够 ↓ 修正模型 │ └──────────→ 再次抽象
|
正向产生模型,逆向使用模型,使用中发现问题,又回到正向修正模型。
二、循环的每一步都会发生
以「游戏 = 输入 → 更新 → 渲染」为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 正向:做了几个小游戏,发现都有「输入 → 更新 → 渲染」→ 抽象出模型
逆向:用这个模型做一个新游戏 → 新游戏需要暂停功能 → 模型里有「输入/更新/渲染」,没有「暂停」 → 模型不够用
回到正向:观察带暂停的游戏 → 发现多了「暂停状态」 → 扩展模型:输入 → 更新 → 渲染 + 暂停状态
再逆向:用扩展后的模型做新游戏 → 需要存档 → 模型又不够用 → 再扩展……
|
每一个新需求都可能让模型不够用,然后模型被修正、被扩大。
三、模型的三个关键性质
1. 模型是压缩描述
1 2
| 模型 = 当前阶段对一类具体事物的压缩描述 不是事实本身,是对一类事物的抽象
|
2. 模型有边界
1 2 3
| 每个模型能解释一部分问题 边界之外的问题,模型失效 失效 = 需要扩展模型的信号
|
3. 模型会被修正
1
| 新问题 → 模型不够用 → 修正 → 更大的模型
|
模型不是最终答案。 它只是当前最好的压缩描述,随时可能被新问题挑战。
四、循环在工程中的表现
软件开发就是双向循环的实例:
1 2 3 4 5 6 7 8 9 10 11
| 正向:从需求抽象出架构模型(领域模型、分层模型) ↓ 逆向:用架构模型实现具体功能 ↓ 发现问题:新需求架构扛不住 ↓ 正向:重新抽象,修正架构 ↓ 逆向:继续实现 ↓ ……循环
|
1 2 3 4 5
| 具体实例: 先设计分层模型(正向) → 加网络功能,模型不够用(逆向暴露) → 拆成三系统,扩展模型(正向修正) → 用三系统模型继续开发(逆向)
|
五、知识体系就是这样长出来的
多次双向循环后,模型形成演化树:
1 2 3 4 5 6 7 8 9
| 模型 M1(函数) ↓ 边界暴露 模型 M2(文件) ↓ 边界暴露 模型 M3(分层) ↓ 边界暴露 模型 M4(系统) ↓ 边界暴露 模型 M5(多系统)
|
1 2 3 4
| 知识体系 = 模型的演化结构 每个模型为什么产生(正向) 每个模型解决什么、边界在哪(逆向暴露) 为什么必须扩大(新问题挑战模型)
|
知识体系是底层结构;文章是对这个结构的叙事展开。 双向循环产生了知识体系本身。
六、和其他内容的关系
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 双向循环 ←→ 从指令到系统 主线就是循环的完整记录:每个概念都是「模型不够用 → 修正 → 更大模型」
双向循环 ←→ 复刻软件(07-工程控制/04)与逆向工程论 复刻软件/逆向工程是循环的「逆向」极:从成品恢复模型 恢复后又可用模型拆下一个成品(再逆向) 复刻软件在产品层面反推设计;逆向工程在二进制层面还原机制
双向循环 ←→ 认知与语言主题(09,01 认知语言智能) 理解是逆向(语言→模型),表达是正向(模型→语言) 来回交替 = 双向循环
双向循环 ←→ 最小闭环 最小闭环(输入→处理→输出→验证→反馈)就是循环的骨架 反馈 = 发现模型不够用 → 修正
双向循环 ←→ 拆解与组织 拆解与组织是循环中的动作;循环是这些动作反复发生的原因
|
收束
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 正向 + 逆向 不是两个阶段,是一个循环
正向产生模型 → 逆向使用模型 → 发现问题 → 正向修正模型
模型的三个性质: 压缩描述(不是事实本身) 有边界(边界外失效) 会被修正(新问题挑战)
工程 = 双向循环的实例(需求→模型→实现→发现问题→修正)
知识体系 = 模型演化树(每个模型为什么产生、边界在哪、为什么扩大)
最小闭环的反馈 = 循环中的「发现模型不够用」
|
模型是活的。 它被建立、被使用、被挑战、被修正——这就是双向循环,也是所有知识线共享的方法论。