计算机简史,它绝不是技术简史


按:2018年 , 一个偶然的机会 , 我以审校者的身份 , 参与到蒋楠先生翻译的《计算机简史》的过程当中来 , 并在这个过程中获益良多 。 今天这本书终于上市了 , 这是我的推荐序 。
计算机简史,它绝不是技术简史
本文插图
我始终认为 , 有一些课程是计算机专业本科应当认真教 , 却很遗憾没有做好的 , 比如软件工程 , 再比如今天我要说的计算机简史 。
如今 , 但凡学习一个新的知识领域 , 多半要从了解其历史开始 。 对我们普通人来说 , 知道了起源和由来 , 知道了“背后的故事” , 理解起来才更加容易 。 但是回忆我们对计算机的学习 , 似乎全然不是这样 。 计算机似乎是从石头缝里蹦出来的 , “正经”的教育直接从二进制开始的 , 因为计算机“就是”这样工作的 。
我们很多人也听说过图灵、冯·诺伊曼、ENIAC、分析机等等名词 , 但羞愧的是 , 在很长的时间里 , 我都只有一些模糊的印象 , 也不知道它们之间的联系到底如何 。 总之 , 计算机科学不需要了解历史 , 身后无足轻重 , 前方充满未知 , 不善交流的技术狂人不经意之间就改变了世界 。
但是 , 事实真的如此吗?
软件行业流传着一幅漫画 , 开发软件就像制造小轿车 , 不是一开始就有设计图 , 轮子、车身、车门、发动机按部就班安上去就可以的 , 大概先是独轮车 , 接着是自行车 , 然后是滑板车 , 之后是三轮自行车 , 继而是两轮摩托车…… 如此反复迭代 , 最后才得到成型的小轿车 。 这幅漫画讽刺的是开发新系统时“想当然”的做法 , 反映的是真实的探索过程 。
其实 , 不只开发新系统是这样 , 计算机本身的发展也是这样 。 了解计算机发展的曲折过程 , 才能把各种关于计算机的知识归纳为有机的统一体 , 找到它们之间千丝万缕的联系 , 才能立体地了解这个行业 。 不信的话 , 且让我举几个例子 。
第一个例子是差分机 。
19世纪30年代 , 银行家查尔斯·巴贝奇先发明了差分机 , 用来计算数学用表 , 这样 , 复杂的计算只要查表就能完成 。 差分机获得了广泛的赞誉 , 但巴贝奇不满足 , 他希望机器不应当只用来算数 , 还应当有更广泛的用途 。
计算机简史,它绝不是技术简史
本文插图
于是 , 他把自己剩下的生命都投入到了分析机的制造当中 。 巴贝奇设计的分析机有几大突破:第一 , 它应当可以解决各种问题而不局限于计算;第二 , 应当有一般性的办法来描述解决问题的过程 , 而不是每个过程都有自己的语言;第三 , 它的计算和存储是分离的 。
如今我们看到 , 第一点正是后来图灵的突破性贡献 , 所谓“通用机” , 其“通用”正在于此;第二点中的“一般性办法” , 就是如今大家熟悉的编程;第三点是极具前瞻性的 , 如今大家熟知的冯·诺伊曼结构里 , 计算器、控制器、存储器、输入输出是互相分离的部分 。 有意思的是 , 冯·诺伊曼在设计时深受生物学的影响 , 所以计算机的“内存”才叫memory , 与生物体的“记忆”是同一个单词 。
可是 , 从巴贝奇设计分析机到哈佛大学和IBM实现真正意义上的通用计算机 , 中间还有一百多年 , 为什么花了这么久呢?因为巴贝奇当时完全以齿轮、条杆的机械方式制造分析机 , 而分析机的制造工艺远远超出了当时机械加工的水平 。 一份设计当然可以很巧妙 , 但如果超前于当时的技术实现 , 多半只能遗憾停留在蓝图上 。 这个道理不只适用于巴贝奇 , 在如今的软件开发中仍然成立 。
而且 , 因为分析机不成功 , 后人干脆停止了这种“通用机”的探索 , 转而采用模拟方式解决问题 。 比如有重大现实意义的潮汐计算 , 不是通过数学和物理公式来完成 , 而是通过一系列线缆、滑轮、传动轴、齿轮 , 来从物理上微观模拟海上的重力变化 , 再绘制出水位的变化 。 对今天的科研人员来说这大概有点荒谬 , 但当时 , 此办法的确解决了问题 。 这个故事再一次告诉我们 , 科学从来也不是直线前进的 。