.. Kenneth Lee 版权所有 2023
:Authors: Kenneth Lee :Version: 0.1 :Date: 2023-03-27 :Status: Draft
抽象思维
最近发现,很多人缺乏抽象思维的本质是缺乏独立抽象空间的能力。举个例子,有一家子, 老李是李大李二李三的父亲,翠花是老李的婆娘。如果我们抽象他们的关系,可能抽象为: A, B, C, D, E五个对象,ABCD是兄弟,AE是夫妻。在这个空间里面,我们只知道这些, 我们不知道A姓李。不知道B比C大。这个空间只有我们抽象出来的信息,我们不使用额外 的信息。这样才叫抽象。在这个抽象空间中建立的额外的逻辑,才能被充分利用。比如我 们说,分A的遗产的时候,E先要分一半,剩下的BCDE平分。这一点不依赖A是不是姓李, 不依赖翠花有没有上过酸菜。
这样的抽象才是有价值的,如果我们没有分遗产这件事,这个空间里面额外加入的条件都 可以一次删除,或者我们要把一样的设计给予多个不同对象,我们都可以用一样的规则。
但在实际中,工程师却反复问:A到底是不是就是老李,老李是不是只有三个儿子。这个 事情在抽象的时候答案是“不知道”,然后他们就会问:你怎么就不知道呢?他明明就是老 李啊。
但一旦你都知道他是老李了,这个空间就没有什么好抽象的了,你全部逻辑都平摊在“老 李这一家子”的逻辑空间中了。
我觉得,意识到这一点,也许对部分人提升抽象设计能力有帮助吧。
今天又看到一个例子。有人做了一个分布式中断控制器,每个中断单元(以下称为IU)可 以把中断通过MSI(一种通过写总线地址报告中断的方法,称为消息中断)报告给下一级 的IU,为了决定报告给哪个IU,他可以配置下一个UI的MSI地址。结果他配置了整个IU的 MMIO空间的起始地址,然后通过计算MSI地址在IU的MMIO空间的首地址偏移来找到MSI地址。
就这么一个简单的设计,就把报告目标和IU MMIO空间的格式给关联起来了。你让举个例 子我都不会举出这样的傻设计来,但现实就是会发生。说到底,我要给你举例子,我抽取 的信息一定是已经总结过的,让你注意到这个逻辑的荒谬之处,但现实中,缺乏抽象能力 的设计者,和可能根本没有这个概念。