复杂性管理与重复性管理

探讨了简单重复性所带来的复杂性.

目录

在前面我们说到了所谓的"计算机科学", 重点在于如何控制大型系统的复杂性.

复杂性本身当然也是个很大的话题, 而一种常见的复杂性的来源则是重复性, 即是由不断的重复所带来的复杂性.

重复性带来的复杂性常被人忽视, 大概是因为一开始它是不起眼的, 而当人们意识到它的存在时可能已经陷入了泥潭.

从心理学说起

下面的一幅图(来自知乎日报), 你一眼就能看出有几个点的是哪些呢?

一眼能看出的点的数量

显然, 上面一行你能很容易看出来, 下面一行则有难度了.

心理学上还有一个所谓的"短时记忆的容量"问题:

1956 年, 美国心理学家米勒教授发表了一篇重要的论文, 明确提出短时记忆的容量为 7±2, 即一般为 7, 并在 5 ~ 9 之间波动. 这就是神奇的 7±2 效应.

这在我们日常生活中也不难观察到, 最简单的例子就是有人在电话里报了一个手机号码给你, 多数人都不得不借助纸和笔才能记下来.

短时记忆 电话 7+2 问题

一个手机号码, 不过是从 9 再多重复了两次, 到了 11 位, 多数人就无法一下子记住它们了.

所以, 即便是简单的重复, 它的影响也可能是深远的.

一个隐喻场景

让我们来看一个更具体的例子, 先从一个简单的隐喻场景说起, 假如你掉了一根针在你的座位底下, 你要怎么找回它呢?

很简单, 你东找找, 西找找, 东找不着, 你就西找, 西也找不着, 你就重复东找, 然后重复西找, 直到你找到为止.

在这种情况下, 你不需要任何的方法论. 以下可能是你寻找的路径:

随机路径

现在假设针不是掉在了座位底下, 而是在整个房间里, 但你不知道具体哪里, 现在你要怎么找呢?

整个房间与座位底下有什么本质不同吗? 好像没有, 不过是一小块面积重复了更多遍而已, 然而它已经对你的寻找策略造成了冲击.

你还能像之前那样东找找西找找吗? 当然, 你想撞下运气也是可以的, 但你也可能面临重复了几次依旧一无所获的尴尬境地. 此刻, 最保险的方式是遵循如下蛇形的逐行扫描式的排查,

扫描式寻找

这样你能确保你的寻找时间有一个上限.

现在, 场景再换一下, 假设针不是掉在了房间里, 而是在一个大操场上, 你要怎么找呢?

可以说, 现在那种随机游走式的东找找西找找再也不适合了, 首先一次随机找到的概率太低了, 然后反复随机的话, 你不能确切知道那些地方你已经找过了.

一个大操场与一间房间本质上还是一样的, 只是面积重复了更多次, 但我们以往的寻找策略则彻底不行了, 即便是那种蛇形的逐行扫描式的排查也有很大风险了.

对于这种情况, 首先最好是操场划出块来:

区域

然后是一些簿记工作:

区域标记

然后一块一块寻找, 在每一小块中, 重复房间的寻找策略:

扫描式区域寻找

找完了则在簿记上标记一下, 直到找到为止. 如果一遍过完了还没有找到, 则清除所有标记, 重复再查找.

还有可能发动更多的人, 把不同块分配给不同的人, 进行并发式的寻找.

不难看出, 以上寻找策略与最开始的策略有了天壤之别, 而这就是简单重复性所带来的冲击, 重复性也能导致复杂性.