《计算机简史》推荐序
按:2018年,一个偶然的机会,我以审校者的身份,参与到蒋楠先生翻译的《计算机简史》的过程当中来,并在这个过程中获益良多。今天这本书终于上市了,这是我的推荐序。
我始终认为,有一些课程是计算机专业本科应当认真教,却很遗憾没有做好的,比如软件工程,再比如今天我要说的计算机简史。
如今,但凡学习一个新的知识领域,多半要从了解其历史开始。对我们普通人来说,知道了起源和由来,知道了“背后的故事”,理解起来才更加容易。但是回忆我们对计算机的学习,似乎全然不是这样。计算机似乎是从石头缝里蹦出来的,“正经”的教育直接从二进制开始的,因为计算机“就是”这样工作的。
我们很多人也听说过图灵、冯·诺伊曼、ENIAC、分析机等等名词,但羞愧的是,在很长的时间里,我都只有一些模糊的印象,也不知道它们之间的联系到底如何。总之,计算机科学不需要了解历史,身后无足轻重,前方充满未知,不善交流的技术狂人不经意之间就改变了世界。
但是,事实真的如此吗?
软件行业流传着一幅漫画,开发软件就像制造小轿车,不是一开始就有设计图,轮子、车身、车门、发动机按部就班安上去就可以的,大概先是独轮车,接着是自行车,然后是滑板车,之后是三轮自行车,继而是两轮摩托车…… 如此反复迭代,最后才得到成型的小轿车。这幅漫画讽刺的是开发新系统时“想当然”的做法,反映的是真实的探索过程。
其实,不只开发新系统是这样,计算机本身的发展也是这样。了解计算机发展的曲折过程,才能把各种关于计算机的知识归纳为有机的统一体,找到它们之间千丝万缕的联系,才能立体地了解这个行业。不信的话,且让我举几个例子。
第一个例子是差分机。
19世纪30年代,银行家查尔斯·巴贝奇先发明了差分机,用来计算数学用表,这样,复杂的计算只要查表就能完成。差分机获得了广泛的赞誉,但巴贝奇不满足,他希望机器不应当只用来算数,还应当有更广泛的用途。
于是,他把自己剩下的生命都投入到了分析机的制造当中。巴贝奇设计的分析机有几大突破:第一,它应当可以解决各种问题而不局限于计算;第二,应当有一般性的办法来描述解决问题的过程,而不是每个过程都有自己的语言;第三,它的计算和存储是分离的。
如今我们看到,第一点正是后来图灵的突破性贡献,所谓“通用机”,其“通用”正在于此;第二点中的“一般性办法”,就是如今大家熟悉的编程;第三点是极具前瞻性的,如今大家熟知的冯·诺伊曼结构里,计算器、控制器、存储器、输入输出是互相分离的部分。有意思的是,冯·诺伊曼在设计时深受生物学的影响,所以计算机的“内存”才叫memory,与生物体的“记忆”是同一个单词。
可是,从巴贝奇设计分析机到哈佛大学和IBM实现真正意义上的通用计算机,中间还有一百多年,为什么花了这么久呢?因为巴贝奇当时完全以齿轮、条杆的机械方式制造分析机,而分析机的制造工艺远远超出了当时机械加工的水平。一份设计当然可以很巧妙,但如果超前于当时的技术实现,多半只能遗憾停留在蓝图上。这个道理不只适用于巴贝奇,在如今的软件开发中仍然成立。
而且,因为分析机不成功,后人干脆停止了这种“通用机”的探索,转而采用模拟方式解决问题。比如有重大现实意义的潮汐计算,它不是通过数学和物理公式来完成,而是通过一系列线缆、滑轮、传动轴、齿轮,来从物理上微观模拟海上的重力变化,再绘制出水位的变化。对今天的科研人员来说这大概有点荒谬,但当时这办法的确解决了问题。这个故事再一次告诉我们,科学从来也不是直线前进的。
第二个例子是实时系统。
如今大家都习惯于计算机的“实时”反馈,点击马上就得到反应,运行就可以看到结果。但是在计算机诞生的很长时间里,它只要能足够快地计算预先设定的任务,正确给出结果即可。“实时”这种奢侈的特性,在强烈的需求诞生之前,是不会有资源去实现的。
“实时”的第一个强烈需求,来自美国海军的飞行模拟器。随着军用飞机速度的不断提升,机型的不断增加,传统的真机培训飞行员的做法已经日益过时,海军必须有成本足够低、效率足够高、效果足够好的办法来批量培训合格飞行员,这就是飞行模拟器。飞行模拟器要真正起作用,就必须实时对飞行员的操作给出反馈,传统的机械结构已经无能为力。
1945年,通过一个偶然的机会,负责研制飞行模拟器的麻省理工学院伺服机构实验室助理主管福里斯特知道了数字计算机。他迅速意识到,相比传统的圆盘、齿轮、电阻来模拟飞机的状态,数字计算机有无与伦比的优势,于是他力排众议改变项目计划,以数字计算机为基础研制飞行模拟器。
这种方案在理论上可行,但实现上还有困难,因为当时的计算机采用水银延迟线存储,每秒计算速度只有不到一万次,而飞行模拟器要求运算速度至少达到每秒十万次。关键时刻,福里斯特又做了一个重大决策,斥巨资投入当时前景尚不明朗的静电存储管。结果到后来,飞行模拟器反而成了次要目标,配备静电存储管的,性能强悍的“旋风”计算机才是最终结果。尽管海军对这一结果并不满意,但有价值的新技术总会在意想不到的领域找到落脚点。
1949年,苏联爆炸了第一颗原子弹,美国空军发现,如果要构建安全有效的防空网,必须要有足够强的计算能力,把各方面信息综合起来,并统一调度截击机、高射炮以及后来的防空导弹。
又是一个偶然的机会,防空工程委员会的主要委员瓦利教授知道了海军正在研制的“旋风”计算机,于是空军接力提供后续的资金,同时技术制造工作也从麻省理工逐渐转向IBM。最终诞生的“半自动地面防空系统(SAGE)”,其价值虽然因为洲际导弹的出现大打折扣,却催生了包含软件、硬件、通信在内的一整套生态,无数的民间承包商从中获得了宝贵的机会,最终在IT领域大展拳脚。
在SAGE开发中获得了足够多宝贵经验的IBM迅速发现,民用航空市场对实时计算的需求极其旺盛。当时民用航空市场正在井喷式增长,但订票服务仍然保持着相对原始的方式,许多人为了保险起见,不得不一次订两张票,起飞前再退掉一张,这反而又加重了订票系统的压力。依靠SAGE的经验,IBM斥巨资开发了SABRE系统,并于1964年首次投入使用。第二年,航空公司就因为客座率提高、客户服务的提升收回了成本。
从此,实时计算开始蔓延开来,在信用卡等等新的领域大显神威,结果,才有今天我们“想当然”的实时服务。
第三个例子来自IBM。
如今许多人提到IBM,想到的是蓝色巨人,想到的是它历史上制造的各种大型机。但是,IT行业的成功从来也不单纯是技术的成功,IBM显然深谙此道。
计算机的流行,很大程度上得益于它成为了通用的“办公机器”。而真正大规模生产的办公机器的历史并不长,19世纪出现的打字机,堪称最早的办公机器。在打字机刚诞生的日子里,市场上充斥着大大小小、各种品牌的打字机。最后,只有一家胜出,那就是雷明顿打字机公司。
雷明顿公司为什么能够胜出呢?依靠的并不是独树一帜的产品质量,也不是独步天下的专利技术,而是通过探索准确把握了三大特点:
第一,要有完善的产品,而且价格能让客户负担得起;
第二,有专门的销售机构负责销售,在各地设立销售代表的做法并无先例,所以一开始颇受行业排斥,雷明顿公司不得不依靠一己之力,在欧洲各大城市设立办事处;
第三,需要有专门的培训机构,保证有足够多的用户使用自己的产品,据统计,1900年美国已经有8.6万名女打字员,而1880年只有2000人。数量庞大的女打字员成了一股不可忽视的惯性,对雷明顿公司的市场地位是非常好的保障。
雷明顿公司探索出的这三点玩法,后续被计算机行业的公司完整继承下来。今天我们带着这种视角去看IBM就会知道,IBM的成功从来不单纯是技术的成功:在IBM如日中天的岁月,谁也没法忽略IBM庞大的销售团队;而PC的市场份额之所以远高于Mac,赢得了广大开发者支持正是关键因素之一。
遗憾的是,虽然在这个行业工作了十多年,所有这些精彩的故事,这些巧妙奇特的联系,都要等到如今读《计算机简史》才算懂得。到今天,我们的计算机教育在谈起历史的时候,仍然只强调技术的贡献,结果许多人印象里,计算机的世界就是“技术决定一切”。到工作之后,“技术至上”的思维惯性仍然存在,“技术至上”的傲慢不经意间就冒出来。
然而纵观计算机的历史,成功永远是充满了机遇巧合的复杂过程,是多种因素角力的结果,是多种考虑综合的权衡。技术从来不是唯一的决定性因素,所谓“(单凭)技术改变世界”,其实是玫瑰色的泡影。拥有了技术创新就斗志昂扬,希望横扫天下,最后碰得头破血流的例子,几乎随处可见。
没错,技术的伟大力量激励了无数人想要成功,想要改变世界。但是要想成功,想要改变世界,单凭技术好是绝对不够的,还必须尊重其它力量,顺应客观规律——所以我时常在想,如果我们早早在学校里能明白这样的道理,该是多好?
好在,现在补课,也不算晚。
From Life Sailor, post 《计算机简史》推荐序