双向循环:正向与逆向不断交替

正向建模和逆向应用不是两个独立阶段,而是一个循环。模型建立后用于解决新问题(逆向),新问题暴露模型的不足,反过来修正模型(正向)。模型不是最终答案,而是当前阶段对一类具体事物的压缩描述——它一直在被使用、被挑战、被修正。


一、它不是单向的

最朴素的误解是:先正向(学模型),后逆向(用模型),然后结束。

实际是循环:

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
正向 + 逆向 不是两个阶段,是一个循环

正向产生模型 → 逆向使用模型 → 发现问题 → 正向修正模型

模型的三个性质:
压缩描述(不是事实本身)
有边界(边界外失效)
会被修正(新问题挑战)

工程 = 双向循环的实例(需求→模型→实现→发现问题→修正)

知识体系 = 模型演化树(每个模型为什么产生、边界在哪、为什么扩大)

最小闭环的反馈 = 循环中的「发现模型不够用」

模型是活的。 它被建立、被使用、被挑战、被修正——这就是双向循环,也是所有知识线共享的方法论。