>> >> >>Indexer<< << << <<<<<< Idx >>>>>>
Matched: 0
Preface
M: 2026-04-29 - ljf12825

能够被记录下来的历史,往往同时满足几个条件:影响深远、可被验证、易于传播,以及经得起时间的筛选。大浪淘沙,最终留下来的,不仅重要,在某种意义上也相当“幸运”。

但还存在另一类历史。它们并不完全符合这些条件——它们曾在某个时代广为人知,却随着时间的流逝逐渐消失:不再被提及,也不再被记录。
于是便出现了一种现象:知道的人不再讲述,不知道的人无从得知。这正是所谓的“代际断层”。\

在众多学科中,计算机科学对这种断层的体现尤为明显。它的历史并不漫长,但技术演进却异常迅速。许多曾经被视为“常识”的理解,很快就被新的工具、抽象和范式所取代。在这一过程中,大量中间层的知识悄然消失。

本系列的目的,正是尝试回到这些被遗忘的“中间层”:重新提起那些曾经被提出的问题,以及它们是如何一步步被解决的。

如果从历史的角度回望,计算机科学的发展大致呈现出一条相对清晰的主线:

  • 19 世纪,查尔斯·巴贝奇构想差分机与分析机,艾达·洛夫莱斯为其编写算法;
  • 1936 年,艾伦·图灵提出图灵机,奠定计算理论基础;
  • 1945 年,ENIAC 诞生;
  • 同期,约翰·冯·诺依曼提出现代计算机体系结构的核心思想;
  • 1950 年代,MIT、普林斯顿、伯克利等高校建立计算机实验室;
  • 1960 年代,计算机科学成为独立学科;
  • 1970 年代,编程语言与操作系统逐渐成熟,学科开始分化。

在此基础上,计算机科学逐渐向两个方向延伸:

  • 向下,Close to silicon(机器与硬件)
  • 向上,Close to carbon(人类与应用)

而在这两端之间,存在着层层叠加的抽象。
我们大多数人,往往是从更靠近“人”的一端进入这个领域的。这意味着,如果想真正理解计算机科学,就必须反向而行——逐层拆解这些抽象,回到它们产生的背景与动机。

人们常说,我们“站在巨人的肩膀上”。这在结果层面是成立的。但在抽象层面,我们继承的往往只是结论,而不是推导出这些结论的过程。

作为 Z 世代的一员,我成长于个人计算机早已普及的时代,可以说是某种意义上的“数字原住民”。然而,对计算机科学的系统性认知,却是在进入大学之后才逐渐建立的。这难免带来一种遗憾:我没有真正经历这一学科的发展过程。

学习一门学科,本质上是在头脑中构建一个自洽的认知结构。如果将计算机科学的发展视作一条时间轴,那么从不同位置、以不同方式切入,最终形成的认知结构将截然不同。

例如,一个在 2010 年之后才接触计算机科学的人,其理解方式,很可能与自 1950 年代起逐步接触这一领域的人完全不同。

以游戏开发为例: 在商业游戏引擎普及之后,许多人将“引擎”视为开发的基础; 但在引擎出现之前,开发者必须亲自处理诸如碰撞检测、资源管理、渲染流程等底层问题。

现代引擎几乎完全封装了这些复杂性。它极大地降低了门槛,也在无形中重塑了开发者对这一领域的理解方式。这种变化带来了效率与普及,但也可能削弱对底层机制的认知。开发者的理解方式,最终会直接影响其作品的质量。

从这个角度看,计算机科学的历史并不仅仅是背景知识,它本身具有方法论意义。

有人认为,学习历史并不能直接提升技术能力。这并非全然错误——历史不会让你写出更多代码,也不会立刻提升工程能力。但它会在更深层面发挥作用:改变你理解技术的方式。

只学习当下的技术,本质上是在接受结论;而回溯其发展过程,则是在重建推导路径。开发者之间真正的差异,往往不在于“知道什么”,而在于是否理解“这些东西为什么存在”。

因此,我们既要向前看,也必须向后看。向后看,并非出于怀旧,而是为了重新发现那些曾经被提出的问题,以及它们被解决的路径。