与抽象共存:来自计算机科学的感想

抽象(Abstraction)是计算机科学中一个常见的概念 —— 在生活中也很常见 。但我们在日常生活中提及抽象时,往往是为了描述某个事物复杂而难以理解,却往往忽略了抽象背后的统一性 。私将抽象理解为“从一系列复杂的具体事物中抽离出有意义的统一形象”,事物的复杂性是抽象存在的土壤 。事先声明,写这篇博客并非为了从技术的角度阐述计算机科学中抽象的概念,而是单纯的有感而发 —— 是因为我在为时尚短的大学生活中发现的抽象能力的普遍缺乏 。这让我感到不安 。

我们无法抽象

我的不安自大学以来就一直存在,在最近开设了计算机组成与体系结构 这门课后达到了高峰,因此思考一番过后决定写这篇博客 。让我感到不安的是来请教我的同学的问题 —— 他/她们知道磁盘上的磁道、磁道上的扇区,知道机械臂如何移动读写磁头,但他/她们宁愿在每一个无关紧要的细节上钻牛角尖,也拒绝相信将这些功能组合起来能形成磁盘 。

这样的学习习惯似乎与我们的教育方式有关 。我们的考试制度素来要求我们在细节上一丝不苟:我仍能记得高中语文试题如何试图肢解 诗歌与散文,并从零散的语句中榨干最后一点过度解读的意象 —— 我是厌恶这样的阅读的 。而时至今日在大学中,似乎仍有很多人热衷于在每一个细节上皓首穷经,而无法系统地观察抽象的整体 。

与抽象相对的是具体(Concrete),而具体正是我们之所擅长 。我们向来被告诫要脚踏实地,务实而非务虚 。我们擅长解决具体的问题,事实上我们能运用现有的框架出色地解决问题 —— 我们的孩子脚踏实地勤学苦练,能在奥数、钢琴、绘画等许多领域取得他国同龄人难以望其项背的成绩 。但最新的科技进展绝大多数依然并非来自我国 。有人将之归结为创新的缺失,而我想将创新的缺失归结为抽象的缺失 —— 归结为我们无法从现有的繁杂的知识体系中抽象出新的框架 。这是最令我感到不安的 。

我们为何需要抽象

在计算机科学领域,你会发现抽象的概念无所不在;而且正如它们的名字所暗示的那样,这些抽象真的很抽象 。在观看(好像是)宾大的计算机科学基础课程系列视频的时候,最令我印象深刻的一个词就是抽象层(Layer of Abstraction),因为它在视频中几乎每十分钟就会出现一次 。视频这样将计算机组织分解为多个抽象层:从最基础的电路开始,再到逻辑门,再到全加/半加器等小型部件,再到算术逻辑单元(ALU),再到最后的中央处理器(CPU)等;每一层都是对下层复杂体系的抽象 。

上述关于计算机结构的例子一定程度上阐述了:抽象就是从现有的复杂系统中抽离出可用的框架 。从基础电路到逻辑门,从逻辑门到小型集成部件,层层抽象精确地依赖于下一层而为上一层提供可用的新的框架,而这新框架在当时很可能就是场技术革新 。我们会将从大量逻辑门的复杂连接中抽象出加法器的人称为创造者,而将使用加法器做计算的人称为使用者 。我们需要抽象的能力,因为我们需要创新的能力;我们需要创新的能力,因为我们需要更多创造者而非使用者;我们需要更多乔布斯,而不是更多富士康 。

我试图以计算机科学为例引入抽象的意义 。但这篇博客探讨的终究不是技术问题,而是抽象这一概念在技术之外的意义 。在现有的基础知识体系短期内不会有重大更新的情况下,抽象与创新是息息相关的;如何从已知的混沌中抽象出新的框架将至关重要


最后,我不想讨论你/我应如何学会抽象 —— 因为我不知道答案,也暂时没有建设性意见 。但或许,抽象的能力本身就来自对一系列处理具体的能力的抽象 —— 这是个递归玩笑

鼓励一下
0%