专访Bjarne Stroustrup 荣耀 马皓明 译 第一次看到Bjarne Stroustrup这个名字,是在一本Borland Turbo C++手册上,它以“旁白”的方式提及他发明了C++编程语言。由于我对C++最初的兴趣在于它背后的设计理念,自然而然,《The Design and Evolution of C++》就成为Stroustrup著作中我的首选读物。拜读之后,我清醒地意识到,他对语言的贡献要比Turbo C++手册所提到的多得多。读完初遍,书释于手,我知道我对语言设计的认识将从此改变,并且意识到Stroustrup已经成为我职业生涯中最具影响力的系统工程师。实际上,正是那本书,正是那条通往系统工程之路,使我坚信,计算机语言的研究工作值得长期孜孜以求。 我不禁浮想联翩。有着稳重的开始以及成长期阵痛的C++,并不仅仅意味着另一门新语言。尽管新语言的登场,往往有强力的市场营销作为后盾,但C++已成为一门不同于其他语言衡量标准的语言。即使它作为“严肃工程师的工具”而占据着强有力的位置,它已经成为并且仍将继续是“弱者的语言”,恐怕这很大程度上要归因于Stroustrup最初的愿望 — 创造一门不仅面向大众,还要能够满足有着“非同寻常的需求”的开发者的语言。 “作为一门语言,我对C++最初的设计目标之一是‘甚至对一个毕业生来说也承受得起’,”他解释说,“在那时,计算机科学(Computer Science,CS)是如此时髦,以至于很多CS毕业生被那些‘捐赠的东西’惯怀了。在我看来,‘承受得起’意味着编译器的编写成本低到基本上可以免费发放,而且这个编译器能够产生足够出色的代码,以便运行于普通用户的硬件之上。” 从他关于“惯怀了的CS学生”的评论中,很容易让人揣测象C++这样有影响力的语言的创造者希望如何立身处世。他是希望被看作为一位计算机科学家呢,抑或是一位技术专家?“我将自己定位为一名程序员、设计师和系统构建者,”他说,“在我的研究工作中,我尽力做到‘科学化’,也就是说,我希望看到我所构建的东西拥有内在的一致性,并具有‘可被有效地使用’的经验性证据。为满足‘愿意接受开销和个人口味方面的约束’的使用者的需求,我在努力修改我所构建的东西的过程中,始终抱着实用主义的态度。” 是什么影响了这位拥有数学专业高等学历的人,使其成为一个实用主义者呢?我认为我自己对数学领域的认识很大程度上受Polya的影响,而Stroustrup则说,“我说不出哪位数学家直接影响了我。我的硕士学位是数学和计算机学,而历史学则是我长期的业余爱好,尽管我能够不假思索地背出一大串伟人的名字,但影响我的并非数学家,而是数学本身。” Stroustrup承认自从离开大学以后就没有做过数学实践工作,那数学是如何影响他的呢?“留给我的是一些思想,一些思维方式,还有对于那些真正漂亮的‘证明’和‘公式’栩栩如生的记忆。”他解释道,“数学带来的情感上的冲击可能是意义深远的,如同任何艺术或者个人经历所带来的冲击一样意义深远。” 假如一位数学家变成了一名程序员和系统设计师,而他又说不出究竟是哪位数学家影响了他的思维,那么会不会受到哪位计算机科学家的影响呢?我提起了Noam Chomsky,尽管他不是一位计算机科学家,但他对计算机科学语言理论的发展有着巨大的影响。我还说,Chomsky或者Church可能已对近50年来语言的设计产生了实实在在的深远影响。Stroustrup报以这样的回答: “Chomsky和Church都不在影响我的十大人物排行榜中,不,实际上我心目中根本就不存在这样一个榜单。我的感觉是,他们的影响更在于教育方面而非实践方面。引起我不安的部分原因是,我不能确定在什么范围内的‘计算机科学’才能被称为‘科学’。我感觉我更乐于将我和同事们的工作与建筑师和工程师相提并论,而不是同数学家、物理学家或生物学家的所作所为混为一谈。在软件领域,我感觉一些东西更象是被‘发现’而非‘发明’,而大多数计算机科学中的明日黄花则纯属‘人为’。” 他解释说:“经验主义科学家探索自然,并努力搞清楚他们所发现的东西。而数学家探索的思想是如此基础,以至于自从柏拉图时代至今,人们就一直在争论‘数学思想是否独立于人类而存在’。我认为计算机科学家在他们研究的东西方面肯定要‘谦逊’一些。 “我们的大多数所作所为都不是那么得‘基础’,我们是在为实际需求建造工具。当然了,从‘使很多人的生活得更加舒适’意义上来说,这是一个高尚的事业,但它并非多么得‘基础’。另一方面,对于那些在非常接近数学领域搞研究的计算机工作者来说,他们应该扪心自问,他们与现实世界的契合点在什么地方?” 然而,Stroustrup明确指出,Kristen Nygaard是计算机科学领域‘十大人物排行榜’候选人之一。“因为他发明(或发现)了许多现代软件开发的基础(或根基) — 继承机制,在面向对象程序设计、理论和subtyping领域中,继承机制无所不在。” 当我向Stroustrup提出,我认为他是近20年最具影响力的技术专家的“候选人”之一时,他回答:“你可以找到世界上百米跑最快的运动员,但你却不可能评选出真正意义上的‘世界上最伟大的运动员’。即使你确实做出这样的‘技术专家’榜单,你也未必能发现我榜上有名,至少我自己不会把自己摆到那儿。当今计算机技术是成千上万名天才的、幸运的并且勤奋的个体共同努力的结晶。假如要做一个榜单,那最好先推选那些图灵奖得主,因为他们的思想是我们绝大多数计算机工作的基础。” Stroustrup关于“世界上最伟大的运动员”的评论,在他表述对“无休止的语言论战”的想法中再次发出回声。当我问及象微软C#这样的新语言 — 它们时不时地突然杀出来声称比C++更优秀,是否令他心烦意乱?他的回答是:“C++已成为新生派的打击目标,不久你将接受这个现实。 “更让人难以接受的是,为数众多的人在缺乏必要知识的情况下竟想达到公正。让我苦恼的是拙劣的商业营销活动。让我伤心的是看到一些非常优秀、能力突出的人也被这些大肆宣传弄得亢奋起来,而投身于这场语言混战之中,并且放弃了‘令人厌烦的老旧复杂的工具’,转而投奔向那些‘走红的’但并不完善的新工具。他们终将会明白,旧工具之所以复杂,是为了对付现实世界中的复杂问题,而那些简单的新工具的传播者也正在忙于扩展它们,以应付复杂的现实状况。” 当再次提及“C++是弱者的语言”时,Stroustrup说,“我应该说明我不喜欢专有语言。我更乐意C++的定义掌握在‘相当公正、相当稳固、相当民主’的正式标准团体手中。我不喜欢这种倾向 — 根据专有语言拥有者的大部分顾客所面临的问题,对其进行‘简化’。这种策略有利于语言的流行,但却倾向于欺骗有特殊需求的程序员和组织。我想我们绝大多数人至少在某些情况下会有一些特殊需求。” 谈及ISO标准C++,Stroustrup说,在他的职业生涯中,“那是一个重要的里程碑,不过还有几件事可以与之相提并论,比如我的C++编译器的第一个商业版的发布,以及《The C++ Programming Language》第一版的出版,这些都使得C++很快从大量实验性的和专用目的的语言中脱颖而出。” 关于ISO标准化,Stroustrup又补充道,“我无法确定在‘我希望一门语言可以承受得起’和‘我偏爱具有正式ISO标准的语言’两者之间有多么直接的联系。从原理上来说, 一门专有语言的所有者可以保持其价格低廉,但实际上,我倾向于在‘专有’与‘保持价格低廉,直到有足够的用户被套牢,然后提高价格’二者之间划等号。 “专有语言更加令我担心的是,它们有这种倾向 — 语言本身被绑定在该公司别的产品上,比如操作系统或者硬件上,并将重点集中在该公司认定的‘关键顾客群’和‘典型用户’身上。如果你没有被归入此类,你的需求将会很轻易地被牺牲掉。除了更换语言之外你别无选择,而更换语言是非常困难的,尤其当一门专有语言着眼于‘套牢用户’时更是如此。我认为,那些‘组织合理、运作民主的标准委员会’控制下的语言,更可能具有长期的稳定性和广泛的适用性。” 我以如下问题结束了对Stroustrup的采访 — 在他的生活中,有没有与他在C++方面的工作没有直接关系、但对他的职业成就却起到关键影响的重大事件,比如获得博士学位就是这样的一个事件,他说,“当然是,尽管或许从小学升入中学困难更大。我所在的小学没有很强的‘学术’传统,那里更注重为学生日后适应‘现实世界的学徒生活’以及升入‘职业学校’做准备。” 因为我本人出身于农场和“蓝领”工人的家庭,这一席话触动了我的心弦,我问到,他家人是否知道,通过C++,他已经影响了世界范围的数十亿美元的设计决策。他们是否理解,一位科学家,努力将一门语言引入学术界而非商界或者什么“学徒生涯”,已经与他接受的教育之期望相去甚远? “不完全如此,”他回答道,“他们知道我做得不错,但他们所处的环境不允许他们对此完全理解。对他们来说,真正重要的是我和我的妻子和孩子的幸福快乐。” 在C++发展之初(1985年~1988年),AT&T拨款5000美元作为三年市场预算,“创建一门语言”的决心可能由此在Stroustrup心中生根,直到C++发展为“新生派众矢之的”这样的局面。在发展初期,他曾担心“有着更强商业支持的语言,例如Objective C、Smalltalk和Eiffel,将会淹没C++。毕竟它们都有‘有着推销人员和市场预算’的公司作为后盾,而我只有贝尔实验室善意的支持…… 同样的逻辑,Ada也将凭借其强大的官方支持以及经济后盾埋葬所有对手。” 在我看来,C++的天赋并不完全在于其语法或者“身为一门语言”的纯粹的力量。有时候,由于它背负了C语言遗留下来的很多包袱而可能会对一些代码的表达造成障碍。然而,我还是禁不住想,这门语言是为我 — 一名软件开发战场上的一线士兵而发明的,而Bjarne Stroustrup的“实用主义”则抚平了我的“崎岖之旅”。我感觉到,Stroustrup和其他一些人在每一个概念、它的含义以及对程序员的实际效用方面都殚精竭虑。从写在黑板上的一项提议,到提交给第一届“OOPSLA”研讨会的一篇论文,再到向ISO标准委员会提出睿智的观点和深刻的洞察力,再到听取同行们的反馈,Stroustrup一直在这个世界 — 用他的话来讲 — 充斥了“人为”的东西的世界 — 从事着一项“实实在在”的事业。 我同意Stroustrup的说法,我们需要“一些众所公认的‘英雄’来给予我们共享的理想和梦想。他们存在于‘建设良好’的领域之中,比如Newton、Bohr和Einstein等等。在他们的领域,尽管并非他们所有的工作细节都被认可,但他们还是因为卓越的贡献而受到人们的敬仰。”我也赞成他的观点,“或许计算科学还太年轻,所以我们没有足够的观察来十分肯定地评选出我们的英雄。” 即便不存在英雄,C++程序员也确实拥有一群忠实的关键人物,他们处于恰当的位置,通过恰当的影响力,执行着他们的任务 — 即使这个任务近乎“不同寻常” — 用Stroustrup的话来说 — “有一点繁重”。或许语言发明者的实用主义传统使然,或许工程师们在凌晨两点钟与保护错误(protection faults)之间的斗争流下的汗水,以及几千封寄给Stroustrup关于挫折经历的邮件,都关系到C++成为今天的样子 — 一门合用、通用而实用的语言。假如我们有一根钉子,它可以用作锤子;假如我们有一根螺丝,它又可以用作起子。拥有了C++,我们便拥有了一门“爱为自己着想的程序员”的语言 — Andrew Koenig在其著作《Ruminations on C++》中这样说道。 在采访Stroustrup以前我就通过许多邮件往来而对他有所了解,显而易见,现在这种了解得到了进一步加深。 |