关于抽象

简介

“抽象”是一个和“具体”相对的概念,它们是两种不同的描述事物的方式。对于一个事物来说,
对它的描述可以无限具体,你可以列举出它所有的属性,但是事物的属性是不可能被穷举的;
对它的描述也可以无限抽象,直到超越所有人能理解的范围。具体可以理解为低程度的抽象。
在我们尝试解决某一问题时,会根据情况使用不同的抽象程度,从而更好的分析问题。

关于抽象的一些例子

符号

数学,物理学中有很多符号,比如‘+’和‘-’,分别代表加法,减法运算。符号的产生从一定
程度上规范了数学,并且有利于把实际问题形式化。对于一些人来说,数学很难学,他们觉
得这些符号晦涩难懂,但其实如果没有符号,数学会更难学。数学本身就是一种对问题的抽
象,这种抽象的好处是可以让问题容易计算。此外,符号避免了描述性的文字,多数情况文
字的歧义是误解产生的根本原因;符号则使你专注于公式的内在逻辑,并且自然而然的思考
它们的抽象意义。在理学或者工程学领域,人们通常倡导用符号代替描述性的语言,它们具
有更明确的含义,至少从形式上看它们一模一样。关于符号抽象,莱布尼茨甚至希望能发明
一套能推演宇宙间所有问题的符号,即使是现在看起来仍是个宏伟的想法。

术语

满是术语的文章很招人讨厌,但是不得不说,术语提高了人们描绘事物的效率,降低了人与
人之间的沟通成本。例如,程序员都知道‘单例模式’,如果没有‘单例模式’这个词,你如何
与你的同行表达原有‘单例模式’的概念呢?你只得去背‘单例模式’的定义。从某种程度上看,
术语还降低了你学习的成本 —— 背诵这些模式的定义是件耗时耗力的事,而简短的术语很快
使你产生联想。各个行业都有术语,术语是专业事物的抽象描述,术语会被广泛使用,并且,
随着行业的发展,术语的含义也会不断丰富,它的抽象程度也会不断提高。

这样的例子还能找到很多,它们的共性就是利用其他更凝练的词汇代替长长的定义。抽象从
某种角度看是语言的力量,正如维根特斯坦所说“语言的边界即是思想的边界”,同样长度的
语句,较为抽象的也是意义更丰富的。一个人掌握的抽象越多,那么他就越能理解和表达更
复杂的想法。

信息的抽象表示

生活中的例子

想象一个场景,你在向某人介绍一个产品。如果你采用具体的方式来介绍这款产品,好处是,
你能使这位顾客知道关于这个产品的方方面面,但同时很有可能顾客对你冗长的叙述不得要
领。如果你采用较为抽象的方式来介绍这款产品 —— 比如简明扼要的介绍产品的功能,或者
如果你事先知道顾客所关注的问题,你就只介绍他所关心的方面,就能使顾客在最短的时间
里获取最有用的信息。

信息过剩的年代里,信息的表示方式应该要比信息的传输方式更加重要。即使信息传输的速
度已经很快了,四面八方的信息被传达到你的屏幕上,但你的工作效率并没有提高,因为我
们很难从一地鸡毛里找到自己想要的,因为这些信息过于具体,而信息量并不大。如果我们
用更抽象的方式写文章,那么它的信息量一定是很大的。一个例子是,充满术语的论文和通
俗易懂的博客文章。使用抽象的代价就是,使用者知道这些抽象的意义。

抽象和计算机的关系

‘1’是什么?朴实的回答是,它是一个自然数,然而仔细想想,它可以有更多丰富的含义。
一个苹果,乐谱里是第一个乐符,‘一’可以代表孤独,一种感觉,在有些民族的文化里‘一’
有圆满的意思等等,对它的解释可以无穷的多,‘1’是抽象的。在计算机里,‘1’就是这么抽
象,首先我们都知道,它代表高电平,其次它可以代表任何东西我们想赋予它的含义。条件
语句可以抽象成一个选择的过程,循环可以抽象成往复做某事的过程,函数是的数学意义是
一种映射关系,在面向对象的语言里函数被抽象成了方法,或某个事物的能力。

同时,在计算机里,抽象离不开环境,或者说上下文(context),不同的环境里,变量,
数字的含义就不一样。就好比在自然语言里,同样的词语,在不同的语境里就会有不同的含
义。

问题之外的问题

抽象的目的总是为了解决问题。如果抽象无益于解决问题,就应该避免它,这是很自然的想
法。

如果要提出一个放之四海皆准的想法,那么这个想法必定是高度抽象的,比如哲学就是这样
的一门学科。文学和工程学仿佛天生就走了两条相反的路。小说家往往惯于唠叨细节,细致
入微的描写往往引人入胜,动辄百万字巨著在文学领域很常见。工程师则喜欢言简意赅,一
针见血的指出问题的症结。