第一课——抽象

    初读Bruce Eckel的《Thinking in java》,从导论一开始就出现了对“抽象”一词的阐述。这是我第一次在工程、技术领域认真思考这个词汇的含义。而后,在系统地学习计算机课程的过程中,也总是免不了和“抽象”打交道。可知,认识“抽象”是对探索计算机世界发蒙启蔽的重要关节。

直面抽象

第一印象

    谈及“抽象”,大多数人脑海里出现的第一个概念就是“难以理解”。多数时候,人们用“太抽象了”来表达对某些晦涩难懂的理论、知识的不解。可“抽象”并不就因此等同于“生涩难解”。

词典解释

商务印书馆出版的《现代汉语词典》给了“抽象”两种解释:

  1. 从许多事物中,舍弃个别的、非本质的属性,抽出共同的、本质的属性,叫抽象,是形成概念的必要手段;
  2. 形容不能具体经验到的,笼统的,空洞的。

《朗文英语词典》中,也对“abstract”给出了两种解释:

  1. based on general ideas or principles rather than specific examples or real events.
  2. existing only as an idea or quality rather than as something real that you can see or touch.

    简而言之,无非是说“抽象”就是无实体、不具体的。可“不具体”意味着什么?其意义又在何处?

反推理解

    “你能不能说得更具体一点?”这是人们表达希望获得更多的细节和更加详细的内容的方式之一。不难理解,“具体”就意味着更加详细的,有更多细节存在的。
    比如,让你想象一辆汽车的模样,你的脑海中可以有太多种可能的组合,可以想象出各式各样的车。而其他人脑海里的样子一定和你想象的不同,这实在算不得是一个具体的事物。
抽象汽车
    而假如不用幻想,你眼前就有一辆白色的轿车,你可以清楚看到它大致的结构、颜色、品牌等细节,这就是一个相对具体的事物。不同的人能观察到的信息也是大体一致的。
    由此可见,“抽象”是对某一类具体事物的概括,是对具体事物中细枝末节的省略。“抽象”与“具象”实际上是一种宏观与微观的关系。

现实中的抽象

化具体为抽象是我们生活中最常见的化繁为简的方法,也是我们对事物归类、总结的必要手段。

汉字

    中华民族的智慧结晶之一——汉字,就是在人类社会发展历史中逐步抽象形成的信息载体。
象形文字
    从象形文字开始,人类利用简单的线条描绘出具体事物的大致形象,让整个群体可以通过简单的形状,联想到其对应的某个具体的事物。甲骨文由此而来。
    随着时代和社会的发展,繁杂的线条和越来越多新生的字词,使象形文字不再满足人们便捷的需求,于是复杂的线条、形象渐渐被省略、简化。虽然字体的模样与具体的事物渐行渐远,但却方便、扩展了人们对文字的使用。近代中国对繁体字的简化也是如此。这就是“抽象”力量。

物理学

    在物理学中,把一群电荷的定向流动抽象成一条“有向线段”——电流,这样就不用关注微观下每个电荷的具体状态。在设计电路图时,不必使用实体的线路、开关等元件,只需要在图纸上用统一的形状大致描绘电路设计即可。“抽象”让人们在研究某一事物时,只关注与我们研究相关的部分,大大简化了研究的方法,降低了成本。

艺术

    说到文艺界的“抽象”,头号代表必定是抽象画了。我见识到的第一幅抽象画,是抽象画的集大成者毕加索的名作——《格尔尼卡》。
格尔尼卡
    即便是离开绘画背景,看着这样阴沉的色调,扭曲的线条和形象,还有人物的表情,也不难感受到画中人物的挣扎、痛苦、阴郁。而当你了解到这幅画作是以1937年德国空军轰炸西班牙北部巴斯克重镇格尔尼卡的事件为背景时,你会惊叹毕加索的才华。他居然能把如此复杂、抽象的情感融入到这“一团乱麻”里。
    但你或许还忽略了一件事,天才的毕加索只完成了作品的一半,他只是把自己的情感具象到画里。而从他的画里抽象出属于个人的理解和情感,是观者完成的另一半。
    艺术家们无一例外,从具体的生活里抽取出他们所需的素材,或是情感,或是韵律,亦或是形象(称之为灵感)。他们把灵感又具象成艺术作品:画作、电影、音乐、诗歌……而你从中二次抽象,得到专属的感知,得到属于你的“哈姆雷特”。由此可见,欣赏艺术作品,也是受众运用自己抽象的方式,寻求感受与共鸣。

计算机

    在计算机领域,我们把各种电子元件组合成具有特定功能的各个模块,把这些功能模块稍加抽象,忽略其具体实现,就有了运算器、控制器、存储器等部件。控制器和运算器等部件又被作为一个整体,抽象成大家熟知的CPU。最终,各个模块从底层开始层层组合、抽象,形成计算机硬件部分。
    而在计算机软件方面,我们把电平信号或者脉冲信号的变化抽象成0、1之间的变化,再利用0、1变化实现二进制的运算,由此形成了机器语言。把复杂难记的机器语言抽象成可以用简单人类语言表达的式子,就形成了汇编语言。如此层层抽象,化繁为简,就产生了其他更高级的语言。

分层劳作

    随着抽象的进行,一项复杂的工程被分化成若干层级,各个工种和研究方向由此诞生。例如Web中的一个按钮,用户仅需知道它的作用即可。而触发按钮后首先执行的是前端工程师所设计的一套逻辑,这套逻辑又会被其他软件工程师设计的浏览器所理解、执行,而浏览器又依赖于其他软件工程师所设计的高级语言实现,这些语言又会被编译成底层的机器语言,这些机器语言又将在硬件中继续执行……如此繁杂的流程被“抽象”分割后就变得各司其职起来。
    一个科学家或者工程师,只需要在一个层级上研究、工作,不必过多了解其他层级的具体实现,工作和研究也变得更加得心应手,世界的发展也将有更多样的机会和可能。(封装、黑盒技术也由来于此)

一切,从抽象开始

    如此多的实例说明,“抽象”的意义远超过对“生涩难解”的一句感叹。理解“抽象”,这是一切探索与创造的一把利器。