不管你是数学家、物理学家、工程专家,还是商业人士,抽象这一概念都是很重要的,很难想象哪个学科或知识体系不需要“抽象”,所以下面我们来阐述“抽象”这个重要的概念。
一、抽象是什么?
抽象在生活中普遍存在,就拿搭乘出租车来举例。在搭乘出租车的时候,如果我对司机说“去中关村”,那么我使用的就是抽象的表达方式。为什么呢?因为我还可以用另外一种表述方式,详细地告诉司机到达目的路线的每一个步骤:顺着这条路直行800米,左转,直行1500米,右转,如此继续。显然,尽管你知道这些细节,但这远不如告诉司机你要去中关村来得高效。
学会抽象是一个重要的进步,它让我们站在更高的层次看问题,隐藏其中的细节,将事物的本质表现出来;它让我们学会更有效地使用时间和大脑,在分析问题时不至于陷入泥潭。
二、抽象与解析抽象
当我们使用抽象的时候,其实是存在着这样的一个假设:“各方面的细节都是运转正常的”。比如,我在直接告诉司机:“去中关村”时,已经假设了“司机知道从此地去中关村的所有细节,并能准确地将我送到目的地”。
但是如果底层细节的工作并不完全是正常的呢?
讲一个故事:
在电力发电时代早期,通用电气的一个大型发电机出现故障,面对发电机工作板上的一大堆的仪表盘和旋钮,所有人都束手无策。于是,公司请来了一个专家级的工程师,它看了一眼仪表盘,又仔细听了一会发电机的声音。然后,它从口袋里拿出一个螺丝刀,将其中的一个旋钮逆时针旋转了35°,机器正常了!随后他为自己这两分钟的工作开出了1000美元的收费单。控制中心在接到这份账单时很不情愿,于是请求他开一个具体的明细账单。新账单的明细如下:
(1)将旋钮逆时针旋转35°:$0.75
(2)知道旋转哪个旋钮以及旋转多少度:$999.25
这个故事传递出的信息是:抽象能提高我们的效率,从而摆脱细节的纠缠。如果事情不出现意外,一切OK!但是底层细节一旦出现了问题,则要求我们具备解析抽象的能力。
给我们的启发:在设计一个由门电路组成的逻辑电路时,不要深陷于门电路的内部原理。而应该将其中的每个门电路都看作是现成的、可靠的。但在电路不工作时,才去研究门电路的内部结构,以发现问题的症结所在。
再如,当你设计一个复杂的计算机应用程序时,可以将使用到的每个组件都看作是一个“抽象”。因为在此时探究每个组件的细节是没有意义的,这样只会使你的工作永远无法结束。但当系统出现问题时,要想发现问题所在,就必须深入到每个组件的实现机制。
三、总结
抽象是一个非常重要的概念,能够使我们忽略抽象之下的细节,提高我们思考的效率。所以抽象的层次越高越好,因为它与工作效率成正比。但是,在实际地构建一个大型系统时,难免会出现错误,若想解决这些错误引发的问题,就要求我们具备解析抽象的能力。
这就意味着,我们既要不断地提高抽象层次,又要注意细节的深入。
参考资料:《计算机系统概论》Yale N·Patt & Sanjay J·Patel