浅谈“抽象”
你说得太抽象,我听不懂。
在生活中,我们经常说或者经常听到这样的话。其实,“抽象”这个词,我也从很小的时候就开始接触,但是从来都不理解这个词,每当听到的时候都很困惑。于是,再根据大家使用的语境,就以为“抽象”就是“很高深”“让人琢磨不透”的东西。直到上了大学,接触到了计算机的课程,才算对这个词有了一些新的认识和一些比较粗浅的看法。
Abstraction is a process or result of generalization, removal of properties, or distancing of ideas from objects.
以上是来自维基百科对抽象(Abstraction)的定义。大概意思就是抽象是一个忽略细节,总结概括的过程或者结果。可能在不同的领域有对抽象更加具体的解释。在这里,我只以计算机科学为出发点,讨论一下生活中应该怎么去理解“抽象”这个词。
在计算机科学中,抽象是指隐藏实现细节,将接口暴露的过程或者方式。这样说,可能还是听不太懂。举个生活中常见的栗子吧,项目经理是对程序员的“抽象”,总裁是对项目经理的“抽象”,董事长是对总裁的“抽象”。为什么这么说呢?因为程序员对项目经理“隐藏”了代码实现的细节,只需要把项目经理布置的活干完就完事,项目经理只管程序员写的东西能不能跑起来,有没有 bug,至于你怎么写的,左花括号有没有换行,对他来说无所谓。总裁只关心项目经理的项目能不能在 deadline 前做完,有没有客户,能不能盈利,至于你什么项目的人员安排,整体架构什么的才不关心。董事长呢?只关心总裁能不能让公司盈利,不能赚钱滚蛋,管你做了什么项目,管你什么功劳苦劳。这就是“抽象”,一层一层地,人员各司其职,只关心自己做的工作,即只需要让下级提供少量的信息,向上级提供少量的信息,自己把中间的细节处理完就 OK, 中间的处理细节不用上下级管。
经过这个栗子,我想,抽象的过程也就不难理解——也就是只向别人提供关键的,对方需要的,并且能够轻易被理解的信息。
其实,这个“抽象”的方式,也经常被用于生活中,比如之前有人让我推荐手机,了解了具体需求之后,我直接让他买某果或某星。他问为什么,我说,屏幕清晰,拍照精致,稳定,好用,最符合你的需求,就酱。对方还追着问各种处理器核心和摄像头参数以及国产手机性价比什么的。我当时跟他说,这些你都不用管,什么8核10核,什么两三千万像素,你根本不需要关心这些细节,也不要被那些鼓吹手机硬件参数的厂商忽悠。当然,如果你愿意听,我能从 SoC 架构、操作系统、应用生态、设计语言、用户体验、甚至动画细节等方方面面跟你说上一整天,可是这些你都不需要呀,你只需要一款好用的手机就 OK 了,不是吗?
其实,在生活中,如果你再听不懂对方说的是什么,很可能不是因为对方说得太“抽象”,而是说得太“具体”,也就是给你说了太多的底层的你不能理解的信息,而没有对这些信息进行“包装”,比如忽略一些细节,举一些栗子,进行一些比喻,用一种你能听得懂的方式告诉你。
那么基于这种理解的延伸,对于其它领域的“抽象”也就不难理解了。抽象的绘画其实是用一些色彩、形状来表达作者感情或者观念,如果你恰好 match, 那就算是 get 了。再有就是音乐,其实音乐也是对音乐家情感的抽象,在听一些曲调的时候,你的感情能明显随之波动,就算是体会到了,在这其中你是不用理会其中的音符和弦这些具体细节的不是吗?而数学的公式,则是对一些繁复推导的抽象,免去了重复的劳动。
抽象无处不在,这种思维方式和行为方式其实是降低了我们的沟通成本,让我们的生活更美好才对,而不是“太抽象,搞不懂”。