2020年/02月/16日
软件故事后记
程序员经常使用工具(tool)这个词描述他们开发的软件以及他们应用的编程工具。工具这一说法采用了手艺人和工程师的语言和视角。程序员的工作领域是“计算机科学”,但这个词可能不太恰当。软件工程专家弗雷德·布鲁克斯指出:“它是工程原则,而非科学原则。”这两种视角截然不同。布鲁克斯解释说,科学家构建的目的是研究,而工程师研究的目的是构建。很多领先的程序员原先都从事科学或数学领域的工作,在发现软件的实践工具比其他领域的理论更有吸引力之后,转而进入软件行业。
巴特勒·兰普森讲述了这一转变过程;他在施乐PARC的研究奠定了现代个人计算机的基础。20世纪60年代,兰普森在加州伯克利大学攻读物理学博士学位。一天,他走进了学校的计算机实验室,后来就再也没有回到物理专业。他回忆说:“我在那里徘徊,被计算机迷住了。”像其他很多转行到计算机领域的物理学家和数学家一样,兰普森常常谈到工程学带给他的满足感——用软件创造事物,既不需要耗费大量体力,也不需要卡车和起重机吊装,唯一需要的就是将知识组合在一起。兰普森说,编程是一种自由的工程。“工程师热衷于创造事物。对于任何迷恋计算机的人而言,这就像是毒品。”就在本书将要完成的时候,计算机领域又有了另一项革命性进步,这就是所谓的“栅格”计算。这预示着有朝一日智能计算机的力量将为人所用,随时随地为人们提供所需的帮助——只需插入或无线接入,就可以获得超级计算机的能力。
栅格的概念在很多方面都为人所熟知,这也是对J.C.R.利克里德关于“人机共生”以及追溯到20世纪60年代信息效用理念的回应。就像从分时系统到互联网等一系列创新一样,栅格计算也是由大学和政府的实验室率先开始研究的。和计算机发展中的其他重要进步一样,栅格概念的实现得益于处理能力、网络容量以及软件等方面的持续进步。按照最宏伟的构想,栅格将成为解决人类一切问题——从疾病治疗到游戏娱乐——的技术基础。虽然栅格现在还没有实现,但数十年之后,社会大众可能会利用计算机来提高人类智能。栅格如果能实现的话,将极大地依赖于软件。在某种程度上,栅格软件被视为对Java等的巨大跨越,能够有效地推动互联网的智能化和可编程化。作为位于芝加哥附近的阿尔贡国家实验室的资深科学家,新西兰籍的依安·福斯特现为栅格软件设计的带头人之一。福斯特和他的同事(通常都是这样)南加州大学的卡尔·凯瑟曼在几年前就开始着手一个编程问题,并且工作不断扩展。“我们正在构建的工具有广泛的用途”福斯特回忆说。在软件领域,从FORTRAN到Unix再到Web,类似的故事比比皆是。
工具越来越有用,程序员的视野也在不断扩展。编程的创新来自工程的多样性,部分是实用发明,部分是结构设计——就像托马斯·爱迪生和弗兰克·劳埃德·赖特。在软件领域,突破性的进展不同于科学和数学领域的基础理论见解,例如顿悟E=mC2。相反,自FORTRAN之后,编程创新指的是发现一种创造新事物的方法,或者用一种新的方法创造事物,然后再去实践。在这种情况下,软件大师更像建筑师或土木工程师,即用不同的方式进行设计和建造。如今的大型软件程序比人类建造的任何其他事物都更加复杂。最好的程序员既擅长概念性思考,又善于把握程序细节;从高级语言设计到贴近机器底层的实施,转换自如。对于那些擅长此道的人而言,运用这种能力并不全是出于乐趣,有时也是莫名地情不自禁。虽然这一点很难向非业内人士解释清楚,但《计算机程序设计艺术》一书的作者,斯坦福大学的高德纳就作出了很好的说明。高德纳解释说,他在60多岁的时候还觉得
每天都需要编写程序。“编程具有一种独特的美,所以我必须这样做,”他说,“我喜欢看它们组合在一起为你‘弹奏’每一个音符。”