秋高气爽的黄昏,凭窗远眺,华盛顿湖碧波荡漾,一叶孤舟划过,泛起层层涟漪。远处的地平线上,依稀可见西雅图市的轮廓。这就是从查尔斯·西蒙尼位于华盛顿湖畔的家中看到的景象。1966年,这位年仅17岁的电脑编程奇才离开了匈牙利首都布达佩斯,远走他乡,从此开始了非凡的人生历程。他这幢房子依山傍水,占地1800多平方米,配有图书馆、计算机实验室、健身中心和游泳池。不过,从公路上几乎完全看不到。整套房子从内到外都由玻璃、木头和钢材建造而成,堪称现代主义的典范。黑色的磨光石地板闪闪发光,访客需要换鞋方可进入。墙上仅挂了几幅洛伊·李奇登斯坦、贾斯培·琼斯和维克托·瓦萨雷里的现代主义画作。除了这些艺术品,西蒙尼还收藏喷气式飞机。他收藏了两架飞机,其中包括他驾驶过的一架已经退役的北约战斗机。此外,他慷慨大方,曾捐赠数百万美元支持高校科研,牛津大学因此设立了一个以他的名字命名的教授席位,普林斯顿高级研究院还将他的名字刻在了数学系大楼上。年少的西蒙尼逃离匈牙利时一无所有,但是现在,已是亿万富翁的他却视金钱为无物。他说:“我现在已经不再为了逐利而做事。”1

1.2000年10月10日,作者访谈。

谈起他所取得的成绩,西蒙尼把这一切都归功于软件业的兴起,以及他在编写计算机代码方面的天赋异禀,当然,还有机遇、运气以及资本市场的反复无常。他的职业生涯始于20世纪60年代中期,那时他在匈牙利中央统计局工作,有点像美国青少年电脑黑客。他涉猎广泛,不断充实自己,自学了如何在俄制的Ural II电脑上进行编程。论计算机发展水平,布达佩斯还处于20世纪50年代早期的技术水平,比西方落后了几十年。多年来,软件不断发展,编程人员的视线不再局限于二进制数字或数位——机器语言0和1。但是,西蒙尼尝试用纯粹的机器语言与计算机对话。“那是编程的石器时代,”他回忆道,“我穿越了时间隧道。”

移民美国后,西蒙尼就把他的名字卡罗利改为了查尔斯。他先后进入加州大学伯克利分校和斯坦福大学学习,毕业后就职于施乐公司帕洛阿尔托研究中心(Xerox PARC)。那时正值20世纪70年代的黄金时期,他们的团队进行了大量的研究和开发工作,正是这些工作使人们使用个人电脑的方式初具雏形。在施乐帕洛阿尔托研究中心,西蒙尼是Bravo最重要的开发者。Bravo是一种全新的书写和文本编辑程序,可以在电脑屏幕上显示单词,就像熟练的排字工捡字那样。这就是后来广为人知的“所见即所得”(WYSIWYG,What You See Is What You Get)功能,它开启了桌面出版(desktop publishing)的大门,个人电脑从而成为提高个体创造力的工具。

但是,施乐公司并没有真正意识到帕洛阿尔托实验室工作的重要性。西蒙尼看透了这一点,并开始另谋高就。1980年夏季,他低调地拜访了西雅图城外一家在个人电脑行业初出茅庐的小公司——微软。虽然公司刚刚起步,仅有40名员工,但在这里,西蒙尼看到了希望。他和比尔•盖茨一见如故,于是加入了微软。

微软的Word文本编辑器如今已是世界上使用最广泛的软件程序之一,它是Bravo的商业化产物,西蒙尼则是当之无愧的“Word之父”。在他看来,个人电脑只是软件的传递载体,给用户很大帮助,并使编程人员如虎添翼。“写下几行代码,瞬间就能改变亿万人的生活,”他说,“这就是软件。”2

2.1999年11月18日,作者访谈。

从微软退休前的最后几年中,西蒙尼一直致力于一个重要的研发项目,旨在大大提高计算机编程人员的生产力。他认为编程人员目前使用的工具和方法依然过于原始,限制了人类智力在软件开发过程中的发挥,从而阻碍了软件业的发展。尽管如此,西蒙尼还是对软件的兴起赞叹不已:“这表明软件的力量强大无比。即使用现有的简单工具,软件也能做那么多事,这太神奇了!”

战后,软件业作为一个探索领域、一个行业以及通信与商业之间的媒介,取得了令人瞩目的迅速发展,而这一切几乎都发生得悄无声息。计算机编程的起源至少可追溯到19世纪。当时英国数学家查尔斯·巴贝奇正致力于解决分析机的计算问题;分析机是现代计算机概念化的雏形。今天,我们可以将其所做的事情称为编程。编程中最基本的概念是算法,即执行某种操作的一组指令,或者说是计算的方法。追根溯源的话,算法(algorithm)最早出现在巴比伦3,而algorithm这个词则是对波斯学者Muhammad ibn Musa al-Khwarizmi4姓氏的讹传,他写过一篇关于代数方法的专著。

3.马丁·坎贝尔-凯利和威廉·埃斯普瑞,Computer: A History of the Information Machine,第181页。
4.波斯数学家。高德纳,《计算机程序设计艺术,卷1:基本算法》,第1-2页。

但是,在第二次世界大战之前,电子技术还不够先进,人们尚未开发出有用的计算机。早期的编程只是后期任务的附属工作,更像是技术人员烦琐的劳动,通常被认为是机器的“设置”或“编码”。真正吸引人的是硬件,因为它被认为是真正的科学和工程。人们普遍认为,电子数字集成器和计算器,即ENIAC(Electronic Numerical Integrator and Computer),才是开启数字电子计算时代的关键所在。其实,这台存放于宾夕法尼亚大学的机器只是一台裸机。操作人员必须对这台机器进行手动设置,插拔那些让人眼花缭乱的线缆,并把一排一排的开关放到正确的位置。每解决一个新问题似乎都要重建机器,因为它采用的是硬接线方式。为此,当局雇用了一些具备数学技能的年轻女士,并对她们进行了培训。这些女性程序员称为“计算员”(computer),这个词可追溯至18世纪,专门指那些为绘制地图或航海图而编制统计表的计算者。

对ENIAC进行编程,使其计算出火炮的弹道轨迹,这是一项艰难的工作,但却是美国国防部指定的任务。为此,这些女程序员想出了一些技巧来简化流程。她们先在纸上画出详尽的图表,并标出在这台机器上可以解决问题的最有效方法。然后,她们再对机器进行手动设置。珍·巴蒂克这样回忆道5:“我们清楚地知道如何设置每一条线和每一个开关。”这种操作可能会花费好几个星期的时间。不过,正是由于她们的努力,ENIAC的公开演示才获得了巨大成功:一条炮弹轨迹用很短的时间就能计算出来,比炮弹本身的飞行速度还快。巴蒂克回忆道:“那简直棒极了,是我一生中最激动的一天。”6当时已是战后,1946年的春天。

5.2000年9月11日,访谈。
6.摘自1995年2月10日出版的珍·巴蒂克21页的个人史,第9页。

对于新兴职业的从业者来说,他们的职业称谓变化很快。人工的“计算员”(computer)变成了“编码员”(coder),然后,这个平淡无奇的称谓又被“程序员”(programmer)势不可当地取代了。事实上,这是英国从业者的贡献。很明显,新称谓听起来更有身份,也更具文学气息。葛丽丝·霍普是软件方面的领军人物,于1944年开始在哈佛Mark I上从事战备方程式的计算。她一直认为,用“编程”(programming)这个词来形容初期的工作过于高尚。“直到从英国传过来,‘程序员’这个词才开始广泛使用。”她回忆道,“事实上,我认为,书写机器代码的过程就是编码,我们应该留着‘编程’这个词来描述更高一级的工作。但是,它是从英国传过来的,而且比编码员要好听得多,于是每个人都想被称为程序员。”7

7.克里斯托弗·埃文斯1976在加州对葛丽丝·霍普的访谈,现为查尔斯·巴贝奇研究所口述历史项目的一部分,印刷本,第8页。

由于计算机设计上的突破,更高一级的编程很快就成为现实。这个想法最初源于ENIAC工作团队,随后,1945年6月发表的由约翰·冯·诺依曼撰写的文章“关于EDVAC的报告初稿”(A First Draft of a Report on the EDVAC)对其进行了详尽的阐述。作为著名的数学家和博弈理论家,冯·诺依曼受聘担任原子弹开发项目“曼哈顿计划”的顾问。原子弹的设计需要成千上万次的计算,当时主要是由大量计算员借助台式计算机来完成的。计算机的潜力引起了冯·诺依曼的兴趣,于是他在1944年成为了ENIAC项目的顾问。后来,在ENIAC的基础之上,经过改进,又有了EDVAC(Electronic Discrete Variable Automatic Computer),即电子离散型变量自动计算机。除了冯·诺依曼,还有很多人参与设计了EDVAC,其中最为著名的便是ENIAC项目负责人J. 普雷斯普尔·埃克特和约翰·莫克利,但由于最终负责撰写报告的是冯·诺依曼,因此他获得了设计“存储程序式计算机”的殊荣。这种设计思路就是后来广为人知的冯·诺依曼架构。事实上,现在所有的计算机使用的都是冯·诺依曼架构。

第二次世界大战后,早期的存储程序式计算机才真正开始出现。存储程序的理念在于,不仅计算机的数据——当时用于计算的主要是数字——而且程序指令也会储存在机器中。从某种程度上来说,这无疑能够提高效率,并能实现计算自动化。由于程序指令可以设置到打孔卡片或纸带上,与将要处理的数据一起存入计算机中,所以,再也不用手动设置开关和线缆了。

然而,存储程序这个概念还有更深刻的含义。用计算机科学家巴特勒·兰普森的话来说,它使软件构建成为了一门“独特的自引用”8工程学科,因为所有的计算机制都可以应用在自身中。也就是说,存储程序式计算机可使程序修改其他程序或创建新的程序。正是有了这种以计算机为中介的编程交互方式,如今的计算机编程语言才远远超越二进制0和1的组合,更易于人类理解。这种编程交互方式相当于计算机内部的数字生态环境:一段代码迅速跳到进程外去修改其他代码,而后者又会循环回来与其他代码混合。无论是电脑游戏、互联网,还是人工智能,所有这一切都源于代码的这种组合、重组以及持续地自我修正的能力。

8.2001年1月5日,访谈。

早期存储程序式计算机的开发人员最早体会到了编程的复杂性,而且这种复杂性常常是无法预料的。剑桥大学的莫里斯·威尔克斯率领的团队制造了第一台存储程序式计算机,并投入运行。这台机器称为EDSAC(Electronic Delay Storage Automatic Calculator,电子延时存储自动计算器)。在回忆录中,威尔克斯还清楚地回忆起第一次认识到bug注定是程序员的克星时的情景。他这样写道:“到了1949年6月,人们已经意识到,要得到正确无误的程序并不像看起来那么容易。”9当时,威尔克斯正在研究他的第一个“重大项目”,而当他在剑桥大学的事业更上一层楼时,他回忆道:“我突然强烈地意识到,我接下来的时间都要花费在寻找程序的bug上了。”

9.莫里斯·威尔克斯,Memoirs of a Computer Pioneer,第145页。

计算机投入应用很长一段时间之后,“软件”这个词才出现,可见人们对这种相当麻烦的技术只是勉强认同。1958年,在《美国数学月刊》上,“软件”作为计算机术语首次在出版物上使用。10普林斯顿大学的数学家约翰·杜奇在文中这样写道:“如今的‘软件’已包括精心设计的解释路径、编译器以及自动化编程的其他方面,对于现代电子计算器而言,其重要性丝毫不亚于那些由晶体管、转换器和线缆等构成的‘硬件’。”但这样的观点在当时并不普遍。

10.首次公开发表。该发现是耶鲁法学院的图书管理员弗雷德·夏皮罗做出的。“软件一词的来源:JSTOR电子期刊档案中的证据”,IEEE Annals of the History of Computing, 22(2000):第69-71页。

在当时的计算机工程文化氛围下,程序员曾长期被硬件人员轻视。后者认为程序员只不过是从事计算行业的一群放荡不羁的人,硬件才是真正的学科,因为硬件人员大都来自发展较完善的电子工程领域。那时,各个大学都已开设电子工程系,而且硬件的表现也符合物理、化学之类“硬科学”的严谨准则。虽然有些数学家也对计算机和编程着迷,但是他们往往沉迷于理论的高度,而不是编写代码和排查程序。直到20世纪60年代,随着计算机科学系的成立,编程才被学术界正式认可,并从此稳步发展。

在20世纪50年代以及此后的一段时间里,程序员的招聘和雇用几乎没有任何科学性可言。那时亟需编程技能:新员工必须经过培训,但是并没有可靠的方法测试其是否具备编程技能。“在报纸的广告里发现某个人,还没了解清楚,你可能就已经决定要雇用这个人了。在编程的早期就是这样,就像是在讲故事,”在20世纪50年代后期担任IBM编程研究部经理的罗伯特·贝莫这样说道,“我们就好像直接从大街上招人回来一样。”11刚刚从瓦萨学院毕业的洛伊丝·海波特于1955年加入IBM,成为FORTRAN编程语言开发团队的一员,该团队共有10人。她回忆道:“任何一个人,如桥牌玩家、象棋手,甚至是女性,只要看起来具备解决问题的能力,就会被他们招入麾下。”12作为IBM的经理,贝莫广泛撒网招揽人才。“我曾经决定以登广告的方式招募象棋手,因为我认为他们会成为相当出色的程序员。这招非常奏效。我们甚至招募到了全美象棋冠军亚瑟·比斯盖尔。此前,他大部分时间都在下棋,几乎没编过程序。”但是,事实证明,在编程领域,象棋手并不比常人更出色。1957年刊登在《纽约时报》《洛杉矶时报》以及《科学美国人》杂志上的广告,最终帮助贝莫招到了四五个合适的人,收获还算不错。贝莫估计,当时美国大概有1.5万名专业的程序员,约占全世界代码编写人员的80%。

11.IEEE Annals of the History of Computing,第6卷,第一期(1984年1月),第16-17页。
12.2000年9月11日,访谈。

如今,这种情况已大为改观。软件行业有了巨大的发展,全球拥有近900万名专业程序员。13在学术界,计算机科学已经成为受人尊重的领域,科研人员投入大量研究资金来探索软件的奥秘。我们有充分的理由相信,软件不仅赋予了个人电脑和互联网活力,还推动了电话、信用卡网络、机票预订系统、车辆燃料加注系统以及厨房用具等领域的发展。1999年,总统的科技顾问团队发现,软件已经成为“信息时代全新的物理基础设施”,是一种不可或缺的原材料,“对经济发展、科技研究以及国家安全至关重要”14

13.斯蒂芬·亨德里克和卢多维克·布鲁诺,The 2001 IDC Professional Developer Model,2001年6月出版。2000年,国际数据公司的数字为873.9万,预计2011年增为978.3万。
14.总统信息技术咨询委员会1999年2月23日发布的Information Technology Research: Investing in Our Future

的确,现代经济建立在软件基础之上,而且这种依赖性还会继续增强。商业周期和华尔街的狂热周而复始,转瞬即逝,但对软件的需求却从未间断。程序员就是信息时代的技师、工匠、砌砖工和建筑师。这些在早期都是难以想象的,因为没有人能预见迅猛的技术变革会带来什么——依赖硬件和软件的进步,计算领域得到了前所未有的拓展。约翰·冯·诺依曼和赫尔曼·高德斯汀是当时计算机领域的卓有远见者,他们在1946年写道,大约1000行的程序指令是“解决目前可以想见的复杂问题的合理上限”15。如今,一个电动牙刷就可能有3000行代码,而个人计算机程序则有数百万行的代码。

15.引自高德纳的《计算机程序设计艺术,卷1:基本算法》,第231页。

抛开其重要性不提,对于大多数人来说,计算机编程仍然很神秘。这不足为奇,毕竟,软件几乎是完全看不见、摸不着的东西,无法被人感知。但正是软件使计算机能够完成那些有用的、有趣的、令人愉悦的事情。计算机只不过是机器,它很强大,但也很愚蠢。在它们的世界里只有1和0、开或关。20世纪70年代的视频游戏Pong(《乒乓球》),用两条光束作为“球拍”,击打一个像光标一样的“球”,运行这款游戏的简单计算机所能看到的世界是这个样子的:

0011101010101000011100011010101000

而曾在1997年击败世界象棋冠军加里·卡斯帕罗夫的IBM超级计算机“深蓝”,它所看到的世界也是这个样子的:

0011101010101000011100011010101000

从本质上讲,这两台计算机只有两点区别。一是涡轮增压的位处理引擎使“深蓝”在速度和动力上占有优势,再就是软件。软件是人类智能的体现,是人和机器之间的中介,把我们的问题或命令传达给计算机。

作为一个专业,编程是艺术、科学和工程的奇妙结合。软件开发仍然是一项异常艰苦、循序渐进的工作,它更像是手工艺,而不是机器魔法,它是一种以软件为中介的创造形式。正如厨师烹饪食物,画家创作油画一样,程序员编写代码。不过编程仍是一种实践性很强的艺术形式,热爱它的人们都会为程序有效运行的魅力以及创造事物的渴望所深深吸引。

还是个孩子的时候,葛丽丝·霍普就会拆装闹钟;Unix操作系统的创始人肯·汤普森,在后院制作了火箭;电子表格软件的合作开发者丹·布里克林,用希斯套件(Heathkit)组装了家用电视机;Java编程语言的发明者詹姆斯·高斯林,在他祖父位于加拿大卡尔加里市的院子里,改装了旧农机。对那些天生迷恋编程的人来说,创造事物似乎能带来真正的快感,软件尤其能带给他们这种体验,因为它是没有实体约束的中间体。程序员不用钢筋、玻璃和混凝土,就能够建造模拟的城市;不用铝、喷气发动机和轮胎,就能够制造模拟的飞机;不用光、热和水,就能够模拟天气。程序员可以用计算机把想法变成现实,至少是视觉上的真实感,并在自己创造的虚拟世界中对其进行测试。

计算机编程的大部分历史可看成是努力扩大其使用范围的过程,即让更多的人能够更容易地编程。FORTRAN是第一个真正意义上的编程语言,旨在使科研人员和工程技术人员轻松自如地编程。COBOL则是为了让商务人士能随心所欲地进行编程。经过多年的发展,编程已经不像原来那么繁重困难了。不过,理想的情况是让每个人都能编程。早在20世纪60年代,就有人提出这种愿景,但至今仍未实现,虽然编程已取得了长足的进步。现在,几乎每个人都会使用计算机,数万甚至数百万人都能够完成诸如制作网页或者在电子表格中创建财务模型所需要的基本编程。

然而,更重要也更值得一提的是,迄今为止,大部分编程仍然局限于精英阶层。目前,人们已针对熟练的程序员开展了研究。研究表明,他们在智力上的确具备某种特质。他们属于那种对工作之外的事情同样怀有浓厚兴趣的人。例如,对科幻小说感兴趣的程序员会特别关注一两个作者,对音乐、休闲活动或者其他方面感兴趣的程序员也是如此。这种较高的智商和高度的专注正是编程所需要的。心理学领域的研究人员在研究心流时曾观察过软件程序员。“心流”状态指的是,注意力高度集中,全身心投入,心智水平达到最高。这种身心合一的境界就如同运动员进入“状态”。

不过,这类研究只能表明如何才能成为天才程序员以及哪些人具备这样的潜质。“某些人确实非常适合做程序员,他们比具有其他同等教育水平和同等智商的人在这一方面好很多倍,”莱斯大学的计算机科学教授肯•肯尼迪这样说道,“现在我们还不能真正理解这种现象。”16这进一步表明,编程不仅是一门科学,还是一门艺术。

16.2000年6月19日,访谈。

斯坦福大学的荣誉教授高德纳终生都在教授学生掌握这项技能。计算机科学能够成为一门学科,高德纳功不可没。他以编写软件方面的权威著作《计算机程序设计艺术》而闻名于世。他从1962年开始动笔撰写,目前已出版了三卷。17他的家在斯坦福大学后面的山丘上,二楼的书房里摆着一排排的书。高德纳在书房里说道:“确实有少部分大学生——大概2%左右——具备异于常人的心智,擅长计算机编程。他们精于此道,智慧如同泉涌……只有这些人才能让计算机做到令人惊叹的事情。我希望这不是真的,但是事实就是如此。”18

17.2011年出版了第4卷的第一部分4A卷。——编者注
18.2000年12月7日,访谈。

本书讲述的就是这些具有特殊心智的极少数人的故事,他们能够利用代码创造出神奇的世界。本书只是代表性地——绝非结论性地——对计算机编程历史进行回顾,主要讲述那些著名人物的生平事迹以及他们开发的软件。

本文内容选自《软件故事》

评论

推荐 0
点个赞

我要评论

需要登录后才能发言
登录未成功,请修改提交。