程序员的底层思维
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 抽象=抽离+具象

在《西方哲学史》中,奥古斯丁说:“至于什么是时间,在没人问我时,我非常清楚;可一旦要向别人解释,我就有点糊涂了。”

对于抽象的概念也是如此,很多人都介于“懂”但是又“说不清楚”的模棱两可状态,不妨让我们先从定义开始来揭开“抽象”的神秘面纱。

关于抽象的定义,百度百科中是这样说的:

抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。

实际上,抽象是与具体相对应的概念,具体是事物的多种属性的总和,因而抽象亦可理解为由具体事物的多种属性中舍弃了若干属性而固定了另一些属性的思维活动。

简而言之,“抽”就是抽离,“象”就是具象。从字面上理解抽象,抽象的过程就是从“具象”事物中归纳共同特征,“抽取”得到一般化的概念的过程。英文的抽象——abstract,来自拉丁文abstractio,它的原意是排除、抽出。

为了更直观地理解抽象,让我们先来看一幅毕加索的画。如图1-1所示,图的左边是一头水牛,是具象的;右边是毕加索的画,是抽象的。怎么样,是不是感觉自己一下子理解了抽象的含义?

图1-1 具象牛与抽象牛

可以看到,抽象牛只有几根线条,不过这几根线条是做了高度抽象之后的线条,过滤了水牛的绝大部分细节,只保留了牛最本质的特征,比如牛角、牛头、牛鞭、牛尾巴等。这种对细节的舍弃使得“抽象牛”具有更好的泛化(Generalization)能力。可以说,抽象概念更接近问题的本质。也就是说,所有的牛都逃不过这几根线条。