初读Bruce Eckel的《Thinking in java》,从导论一开始就出现了对“抽象”一词的阐述。这是我第一次在工程、技术领域认真思考这个词汇的含义。而后,在系统地学习计算机课程的过程中,也总是免不了和“抽象”打交道。可知,认识“抽象”是对探索计算机世界发蒙启蔽的重要关节。
直面抽象
第一印象
谈及“抽象”,大多数人脑海里出现的第一个概念就是“难以理解”。多数时候,人们用“太抽象了”来表达对某些晦涩难懂的理论、知识的不解。可“抽象”并不就因此等同于“生涩难解”。
词典解释
商务印书馆出版的《现代汉语词典》给了“抽象”两种解释:
- 从许多事物中,舍弃个别的、非本质的属性,抽出共同的、本质的属性,叫抽象,是形成概念的必要手段;
- 形容不能具体经验到的,笼统的,空洞的。
《朗文英语词典》中,也对“abstract”给出了两种解释:
- based on general ideas or principles rather than specific examples or real events.
- 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中的一个按钮,用户仅需知道它的作用即可。而触发按钮后首先执行的是前端工程师所设计的一套逻辑,这套逻辑又会被其他软件工程师设计的浏览器所理解、执行,而浏览器又依赖于其他软件工程师所设计的高级语言实现,这些语言又会被编译成底层的机器语言,这些机器语言又将在硬件中继续执行……如此繁杂的流程被“抽象”分割后就变得各司其职起来。
一个科学家或者工程师,只需要在一个层级上研究、工作,不必过多了解其他层级的具体实现,工作和研究也变得更加得心应手,世界的发展也将有更多样的机会和可能。(封装、黑盒技术也由来于此)
一切,从抽象开始
如此多的实例说明,“抽象”的意义远超过对“生涩难解”的一句感叹。理解“抽象”,这是一切探索与创造的一把利器。