推荐序

我始终认为,有一些课程应在计算机专业本科认真教授,却很遗憾没有做好,比如软件工程,再如今天我要说的计算机简史。

如今,但凡学习一个新领域的知识,多半要从了解其历史开始。对我们普通人来说,只有知道了起源和由来,知道了“背后的故事”,理解起来才更加容易。但是回忆我们对计算机的学习,似乎全然不是这样。计算机似乎是从石头缝里蹦出来的,“正经”的教育是直接从二进制开始的,因为计算机 “就是”这样工作的。我们很多人也听说过艾伦•图灵、约翰•冯•诺伊曼、 ENIAC、分析机等名词,但羞愧的是,在很长的时间里,我都只有一些模糊的印象,也不知道它们之间的联系到底如何。总之,学习计算机科学似乎不需要了解历史,身后无足轻重,前方充满未知。

但是,事实真的如此吗?

软件行业流传着一幅漫画:开发软件就像制造小轿车,不是一开始就有设计图,也不是将轮子、车身、车门、发动机按部就班安装上去就可以的,而是大概先出现独轮车,接着出现自行车,然后是滑板车,之后是三轮自行车,继而是两轮摩托车……如此反复迭代,最后才得到成型的小轿车。这幅漫画讽刺的是开发新系统时“想当然”的做法,反映的是真实的探索过程。

其实,不只开发新系统是这样,计算机本身的发展也是这样。只有了解计算机发展的曲折过程,才能把各种关于计算机的知识归纳为有机的统一体;只有找到它们之间千丝万缕的联系,才能立体地了解这个行业。不信的话,且让我举几个例子。

第一个例子是差分机。

19 世纪 30 年代,英国工程师查尔斯•巴贝奇发明了差分机,用来计算数学用表,这样,只要查表就能完成复杂的计算。差分机获得了广泛的赞誉,但巴贝奇不满足,他希望机器不应当只用来计算数,还应当有更广泛的用途。于是,他把自己的余生都投入到了分析机的制造当中。巴贝奇设计的分析机有三大突破:第一,它应当可以解决各种问题而不局限于计算;第二,它应当有一般性办法来描述解决问题的过程;第三,它的计算和存储是分离的。

如今我们看到,第一点正是后来图灵的突破性贡献,所谓“通用机”,其“通用”正在于此;第二点中的“一般性办法”,就是如今大家熟悉的编程;第三点极具前瞻性,如今大家熟知的冯•诺伊曼体系结构里,计算器、控制器、存储器、输入输出就是互相分离的部分。有意思的是,冯•诺伊曼在设计时深受生物学的影响,所以计算机的“内存”才叫 memory,与生物体的“记忆”是同一个单词。

可是,从巴贝奇设计分析机到哈佛大学和 IBM 实现真正意义上的通用计算机,中间还有一百多年,为什么这么久呢?因为巴贝奇当时完全以齿轮、条杆的机械方式制造分析机,而分析机的制造工艺远远超出了当时的机械加工水平。一份设计当然可以很巧妙,但如果它超前于当时的技术实现,就多半只能遗憾地停留在蓝图上。这个道理不只适用于巴贝奇,在今天的软件开发中仍然成立。

而且,因为分析机不成功,所以后人干脆停止了对这种“通用机”的探索,转而采用模拟方式解决问题。比如有重大现实意义的潮汐计算,不是通过数学和物理公式来完成的,而是经由一系列线缆、滑轮、传动轴、齿轮,从物理上微观模拟海上的重力变化,再绘制出水位的变化。对今天的科研人员来说,这大概有点荒谬,但在当时,这办法的确解决了问题。这个故事再一次告诉我们,科学从来也不是直线前进的。

第二个例子是实时系统。

今天大家都习惯于计算机的“实时”反馈,点击马上就得到反应,运行就可以看到结果。但是在计算机诞生后的很长时间里,它只要能足够快地计算预先设定的任务,正确给出结果即可。“实时”这种奢侈的特性,在其强烈的需求诞生之前,是不会有资源去实现的。

“实时”的第一个强烈需求,来自美国海军的飞行模拟器。随着军用飞机速度的不断提升,机型的不断增加,用真机培训飞行员的传统做法已经日益过时,海军必须有成本足够低、效率足够高、效果足够好的办法来批量培训合格飞行员,这种办法就是利用飞行模拟器。飞行模拟器要真正起作用,就必须实时对飞行员的操作给出反馈,传统的机械结构对此已经无能为力。

1945 年,通过一个偶然的机会,负责研制飞行模拟器的麻省理工学院伺服机构实验室助理主管杰伊•福里斯特知道了数字计算机。他迅速意识到,相比用传统的圆盘、齿轮、电阻来模拟飞机的状态,数字计算机有着无与伦比的优势,于是他力排众议改变项目计划,以数字计算机为基础研制飞行模拟器。

这种方案在理论上可行,但在实现上还有困难,因为当时的计算机采用水银延迟线存储,计算速度每秒不到一万次,而飞行模拟器要求运算速度至少达到每秒十万次。关键时刻,福里斯特又做了一个重大决策,斥巨资投入当时前景尚不明朗的静电存储管。结果到后来,飞行模拟器反而成了次要目标,配备经典存储管、性能强悍的“旋风”计算机才是最终结果。尽管美国海军对这一结果并不满意,但有价值的新技术总会在意想不到的领域找到落脚点。

1949 年,苏联第一颗原子弹爆炸。美国空军发现,如果要构建安全有效的防控网,就必须有足够强的计算能力把各方面信息综合起来,并统一调度截击机、高射炮以及后来的防空导弹。又是一个偶然的机会,美国防空系统工程委员会的主要委员瓦利教授知道了海军正在研制“旋风”计算机,于是空军接力提供后续的资金,同时,技术制造工作也从麻省理工逐渐转向 IBM。最终诞生的“半自动地面防空系统”(SAGE),其价值虽然因为洲际导弹的出现大打折扣,却催生了包含软件、硬件、通信在内的一整套生态系统,无数的民间承包商从中获得了宝贵的机会,最终在信息技术领域大展拳脚。

在 SAGE 开发中获得了足够多宝贵经验的 IBM 迅速发现,民用航空市场对实时计算的需求极其旺盛。当时民用航空市场正呈现井喷式增长,但订票服务仍然保持着相对原始的方式,许多人为了保险起见,不得不一次订两张票,起飞前再退掉一张,这反而加重了订票系统的压力。依靠 SAGE 的经验,IBM斥巨资开发了 SABRE 系统,并于 1964 年首次投入使用。第二年,航空公司就因为客座率提高、客户服务的提升收回了成本。

从此,实时计算开始蔓延开来,在信用卡等新的领域大显神威,结果才有了今天我们“想当然”的实时服务。

第三个例子来自 IBM。

如今许多人提到 IBM,想到的是“蓝色巨人”,想到的是它在历史上制造的各种大型机。但是,IT 行业的成功从来不单纯是技术成功,IBM 显然深谙此道。

计算机的流行,很大程度上得益于它成了通用的“办公机器”。而真正大规模生产办公机器的历史并不长,19 世纪出现的打字机堪称最早的办公机器。在打字机刚诞生的日子里,市场上充斥着大大小小、各种品牌的打字机。最终胜出的美国雷明顿打字机公司,并没有依靠独树一帜的产品质量,而是通过探索,准确把握了三大法则:第一,要有完善的产品,而且价格能让客户负担得起;第二,要有专门的销售机构负责销售,在各地设立销售代表的做法一开始颇受排斥,雷明顿公司不得不依靠一己之力,在欧洲各大城市设立办事处;第三,要有专门的培训机构,保证足够多的用户使用自己的产品,据统计,1900年美国已经有 8.6 万名女打字员,而 1880 年只有 2000 名,数量庞大的女打字员带来的惯性力量不容小觑,对雷明顿公司的市场地位是非常好的保障。

雷明顿公司探索出的这三点玩法,被计算机行业的公司完整地继承了下来。今天我们带着这种视角去看 IBM 就会知道,IBM 的成功不单纯是技术的成功:在 IBM 如日中天的岁月里,谁也没法忽略 IBM 庞大的销售团队;而 IBM PC 的市场份额之所以远高于 Mac,关键因素之一正是赢得了广大开发者的支持。

遗憾的是,虽然我在这个行业工作了十多年,但所有这些精彩的故事、巧妙奇特的联系,都要等到如今读《计算机简史(第三版)》才算懂得。到今天,我们的计算机教育在谈起历史的时候,仍然只强调技术的贡献,于是在许多人印象里,计算机的世界就是“技术决定一切”。到他们工作之后,“技术至上”的思维惯性仍然存在,“技术至上”的傲慢不经意间就会流露出来。

然而纵观计算机的历史,成功永远是充满了机缘巧合的复杂过程,是多种因素角力的结果,也是对多种考虑综合的权衡,技术从来不是唯一的决定性因素。也就是说,要想成功,单凭技术好是不行的,还必须尊重其他力量和客观规律——我经常在想,如果我们能早早在学校里就明白这样的道理,那该有多好?

好在,现在补课,也不算晚。

余晟

2019 年 9 月

目录

  • 推荐序
  • 译者序
  • 中文版序
  • 第三版前言
  • 致谢
  • 引言
  • 第一部分 时代之前
  • 第1章 人类计算员
  • 第2章 办公机械化
  • 第3章 巴贝奇梦想成真
  • 第二部分 登上舞台
  • 第4章 计算机诞生
  • 第5章 步入商界
  • 第6章 大型机成熟:IBM 崛起
  • 第三部分 创新发展
  • 第7章 实时:旋风降临
  • 第8章 软件
  • 第9章 计算新模式
  • 第四部分 走向个人
  • 第10章 个人计算机登场
  • 第11章 魅力渐长
  • 第12章 因特网
  • 参考文献