Linux Journal对Bjarne Stroustrup专访
罗翼 翻译 荣耀 指导
Linux Journal(以下简称LJ):您多大年纪了?成家了吗?
Bjarne Stroustrup(以下简称BS):我今年51岁了,已经结婚并且有2个小孩,他们现在都在大学读书。
LJ:Bjarne先生,能不能简单地谈谈您年轻时的情况?何时何地出生?在哪里求学?
BS:我出生在丹麦的奥尔胡斯市。我的家庭并不是一个书香世家,可我在学校的成绩却很好。所以我继续上了我们本地的高中然后又进入奥尔胡斯大学继续学习。在奥尔胡斯大学,我获得了数学硕士学位,同时培养了我对计算机科学的兴趣。奥尔胡斯是日德兰半岛东海岸的一个拥有25万人口的美丽的城市。和那时所有的男生一样,我在我们公寓的院子里玩耍,在大街上分发报纸和牛奶赚些零花钱,踢足球,在夏日的周末骑车去海边,学会欣赏郊外的森林美景,宛若一名“童子军”。在我大学快要毕业的时候,我微程序设计(microprogramming)越来越感兴趣,然后我就去了英格兰,因为那里有更好的计算机。最后,我在剑桥大学获得了博士学位。
LJ:那您现在住在哪里?
BS:我现在住在新泽西的一个名为Watchung的郊区中。这是一个小巧、安静并且拥有许多树林的地方。夏天当你从空中俯视它的时候,几乎是满眼绿色。当我在贝尔实验室工作的时候,从Murray Hill到这里有10分钟车程;而当我到AT&T工作后,从Florham Park开车到这里需要大概30分钟;这里距纽约大约35公里。过去我常能从我家院子的拐角处看到世贸中心的楼顶。
LJ:这儿链接了一个文件,表示您名字的正确发音,它是由您本人录音的吗?
BS:是的,是我自己录的音。
LJ:当你还是一个少年时,家中是否有计算机呢?
BS:没有。那时离计算机的普及还太早了。那时的计算机非常昂贵,只有在一些大学和大型的公司内才能见到。我见到的第一台计算机是我大学数学系的GIER,它是一台旧的丹麦计算机,有一个房间那么大,程序都写在磁带上面,我用它学习Algol 60程序设计。
LJ:每一个著名的人物都有自己的开始。拿比尔.盖茨来说,他的开始就是用学校买的Basic编译器开始写程序。那么您的开始是什么呢?
BS:我认为在我的发展生涯中最关键的一个项目是在剑桥大学攻读博士学位时用Simula67做的模拟分布式系统。除此之外,大学期间很多其他项目经验也给了我很深的影响。例如,我攻读硕士学位的费用就是为Burroughs公司奥尔胡斯办事处开发一些小型商业软件而赚来的(后来这家公司与Univac合并而创建了Unisys公司)。在那里,我学会了如何去设计那些别人要靠其谋生的程序。设计那种要求苛刻的程序与你仅仅为了自己或者朋友的需要而简单地写一个能运行的程序有着巨大的区别。我同时也学会了如何通过与最终用户沟通来设计程序,这与在大学里简单地完成一个程序设计作业也有着巨大的差别。另外,在程序语言的设计决策和具体技术实现等方面,我曾经从事过的计算机架构方面的研究工作也起了积极的影响。
如果你想知道我对于C++的诞生的个人观点的话,你可以去查看Steve Lohr的一本名为《Go To:The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution》的书。如果想得到更多的关于C++的诞生的技术性描述,可以去看看我的《The Design and Evolution of C++》。
LJ:是什么促使你发明了C++语言?
BS:1979年我在剑桥完成学业后,我到了位于美国新泽西Murray Hill的AT&T贝尔实验室从事研究工作。在那里,我开始研究几个与分布式计算有关的项目(使用局域网)。可是我的工作进展得并不顺利,因为那时几乎所有程序设计工具都不适合完成此类工作。所以,我决定自己开发一个名为“带类的C”的工具,它既允许我以类似于Simula的方式组织程序(这种方式现在被称为面向对象),同时也支持在硬件层次上进行系统软件开发。“带类的C”后来被应用于贝尔实验室的很多应用领域,在应用过程中,我们又学到了很多东西,而C++正是以“带类的C”为基础并结合了一些我们学到的新东西发展而来的。
LJ:您以您发明的C++语言而自豪吗?
BS:这是很自然的事情。我很高兴C++能够允许我以优雅而不失效率的方式来写程序,同时我也为C++的大面积普及和传播而感到自豪。可是那并不代表我就认为C++已经完美无缺了。因为很多程序员还并未学会如何很好地使用C++,所以世界上还存在着许多用C++写成的非常可怕的代码。我鼓励人们来访问我的主页,看看其中的论文和书籍,从中学习如何改进他们的代码。我的感觉是,如果设计者和程序员都能对现在的C++特性和技术有一个不错的理解的话,大部分C++代码都可以变得更干净、更易维护并且更有效率,因为标准C++已经让十年前不可能实现的编程技术成为现实可用的工具。可令人失望的是,很多人仍然在以十年前的老眼光看待C++,他们认为C++不过是一个更好的C而已。
LJ:当您知道数以百万的人正在使用由您创造的工具来完成工作时,您有何感想?
BS:我感到非常高兴。但是我上面也已经说过,我希望他们能够以一种更好的方式来使用C++。
LJ:您是否认为创造C++是您生命中最重要的事情?您认为您会在将来做一些更有意义的事情吗?
BS:在我的职业生涯中的确是这样的,而且看来我也不大可能再生产出什么意义更加重大的东西了。有很多与我们日常生活息息相关的应用程序是用C++开发的,你可以从我收集的一个C++程序简要列表获得一个大概的印象。
可以肯定的是,我在将来会继续做一些有意义而且有用的事情,但不太可能再创建像C++这般规模的东西。我最近已经决定进入大学工作,并且接受了德克萨斯州A&M大学教授一职。在那里,我将可以以一种在AT&T研究所中无法采用的方式将我的研究和教学结合起来。我认为教学是一种与工业生产不同的能影响世界并使其变得更加美好的方式,而且大学里的研究工作的成果与我曾经进行的工业研究的并不相同 — 不是说它更好,仅仅只是不同而已。我将会与AT&T研究所和业界保持紧密的联系,因为很多最优秀的研究项目的原动力就是业界中存在的现实问题。
LJ:您在您的工作中也使用C++吗?
BS:是的。它是我主要的研究工具。
LJ:以您的观点来看,哪个C++编译器是最好的?
BS:现今各主流C++编译器的实现产品都已经表现得非常不错甚或更好了。我说这句话的意思是它们都非常接近ISO C++标准,并且提供了优秀的运行时表现。在www.research.att.com/~bs/compilers.html,你可以找到一份编译器列表。我并不推荐使用那些已经在标准上落后很多的编译器产品,例如Watcom C++编译器。
LJ:您现在工作中使用的编译器是哪一款?
BS:很多。现在主要使用GNU、Microsoft、Borland、SGI以及Metrowerks的编译器。
LJ:如果不算秘密的话,可不可以告诉我们您现在主要的研究领域是什么?
BS:我现在正在做一些和分布式计算相关的研究,尝试使用一些程序转换技术使得我可以将标准C++代码用在不同的分布式系统上。
我认为正式地介绍这个研究项目的内容的工作应该以技术论文或者技术讲座的形式来进行,而不是通过采访的形式。但我可以给出一个例子来简要说明一下:假设我需要写一个小程序,它的各个部分可以在不同的计算机上运行。那么按照老方法,我需要在程序中显式地确定各部分之间通信的方法。例如,如果我采用CORBA,那么我的代码中就将包含CORBA调用语句,并且我也要为各模块之间互相通信的类型编写IDL文件。另一方面,如果我希望程序能够直接使用TCP/IP协议进行通信,那么我的代码中就会充斥着对TCP/IP库的调用。作为这些情形的替代方式,我的研究工作就是让这些模块之间的调用可以通过普通C++成员函数完成 — 如果被调用的C++对象是本地对象,那么我只需要直接调用class X的成员函数即可;如果不是,那么我就会调用该类的代理对象的一个成员函数。通过使用具有C++程序转换功能的库,我就可以自动地将对该代理对象的调用翻译成TCP/IP消息或者CORBA调用。
LJ:除开AT&T贝尔实验室,是否还有其他公司向你抛出橄榄枝?
BS:是的。很多公司和大学都对我发出过邀请,但都被我拒绝了。
LJ:您最喜欢的操作系统是哪一个?
BS:我使用Unix和Windows2000。
LJ:哪一种Unix?
BS:就目前而言,是Solarix、Irix和Linux。我努力使我的工作做到与平台无关
LJ:您是否认为它们是现今最好的操作系统?
BS:它们都是不错的操作系统,但是我认为对于什么是“最好”的操作系统这个问题并没有一个普适的定义。每一个产品中,都有着对诸如大小、性能(各种形式)、与现有程序的兼容性以及与各种硬件的兼容性等各种因素的折衷。所以,用户仍然需要从这些不错的系统中选出一个来,作为一些特定应用的最好的系统。
LJ:您更喜欢哪种处理器?Pentium系列还是Athlon系列?
BS:我并没有什么偏爱,但是80X86架构系列并不是所有人的最爱,但它们将那些陈旧的指令集映射到内部RISC架构的硬件用法是非常值得注意的。
LJ:您每天花在PC上面的工作时间有多少?
BS:我每天在计算机上所花的时间都超过8个小时,在周末可能会稍微少一些。要指出的是,并不是我所有的计算机都是PC。
LJ:每天繁重的工作是否给您带来了健康方面的问题?
BS:有时我的右手臂会因为长时间使用鼠标而感到疼痛,还有时因为在桌前坐得太久下腰部也会感到疼痛。我通过散步和跑步的方式来改善这种状况。通常情况下,我每周进行2到3次4至6公里的跑步运动。
LJ:您现在家中的电脑是什么型号的?
BS:一台运行着Solaris的Sun工作站,一台运行着Win2000的IBM笔记本电脑, 一台运行着Linux的掌上电脑,一台旧式的台式机上运行着Win95,还有一台“古董级”的苹果Mac机器。你可以猜得到,我对可移植性和适度的系统无关性更感兴趣一些。
LJ:在办公室呢?
BS:一台Sun工作站和我的笔记本。我可以通过这些计算机(家里的和办公室的)和AT&T的内部网以及其他辅助设施访问到更多的系统。如果人们感兴趣的话,他们可以在我的主页上找到这些计算机以及我办公室其他东西的全景照片。
LJ:请问您会哪些程序设计语言?
BS:这个问题的答案取决于你对“会”这个词的定义。总的来说,我有着实践经验的语言的数目并不太多,大多数语言我都仅仅是停留在“阅读过”的层面,例如:ML、PERL、Python以及Ada。
LJ:您认为哪种语言会是C++最有力的竞争者?
BS:这个问题的答案取决于具体的应用范畴。有时候C++是最好的选择,但也有时由于各种各样的原因,使得Fortran、Java、C#或者Python显得更为适合。还有些时候,我们会出于学习目的而使用一些处于试验阶段的语言。很多语言都在其当初设计的目标领域取得了非常不错的成绩,所以一个程序员完全依赖于一种语言来完成他所有的工作是错误的。另一方面,语言之间的竞争更多是凭借着市场运作和人们的感觉而非语言本身的优劣。我也并不想就此问题发表任何其他看法。
LJ:请问您对于微软.NET平台以及其上的主要语言C#有何看法?
BS:我对其知之甚少,不便发表评论。
LJ:您认为C#会成为一种“一统天下”的语言吗?
BS:当然不会!对于很多系统程序设计问题来说,它都显得过于高级了;相对于很多其他程序设计问题而言,它也与Windows走得太近。当然这并不代表它就不是开发普通Windows应用程序的有效工具。
LJ:但是.NET是一个被设计成可以在很多操作系统上运行的平台。例如微软制定了一些将其移植到FreeBSD之上的步骤。面对这种情况,您仍然认为它过于Windows化吗?
BS:我想我们最好等等看事情如何发展。就现在的情况而言,.NET仍然只是一个微软为其Windows设计的私有平台,而且我也看不出近期它有在其它方面发挥重大作用的迹象。
LJ:请问您对于C和C++之间日益扩大的差距有何看法?这两种语言看起来已经分开得越来越远了。
BS:我认为现今这种C和C++之间不兼容的混乱情况是一个历史的意外,并没有相应的技术基础或哲学基础促使这两者越走越远。理想情况下,二者应该可以优雅地合并起来,而且我认为这种合并在技术是完全有可能的,只要这两者都分别进行一些“集成性”的改动即可。然而现实情况不尽如人意,两者都不想为了合并的目的而做出妥协,这样的结果只能是使二者的分歧越来越大,而受害者就是每一个C和C++程序员。
LJ:您考虑过一些将C和C++集成起来的步骤吗?
BS:我正在努力使C/C++社群看到使这两者兼容所能带来的好处。作为实践,我围绕着这个主题在C/C++ User Journal上发表了一系列文章,你可以从我的主页或者CUJ站点下载这些论文。然而,有一些难以动摇的利害关系阻碍了这种集成的发生,并且在我看来,尽管大多数人将从这种兼容中受益良多,然而我并没有看到他们付出实实在在的行动。一如往常,大多数人只是希望事情出于好意而以某种方式得到解决。
LJ:与其他程序设计语言相比,您会说C++是所有最好的语言中最好的一个么?
BS:不会。那样做并没有任何意义。世界上有很多不错的语言,C++只是其中之一。并且也不会存在对所有人和所有问题而言都是最好的唯一语言。
LJ:您取得过某些程序设计认证么?
BS:没有。基本上,我认为教育比职业培训更有价值,广泛而深入的学习比在某个特定领域进行特训更有意义。理想的教育情况应该是由大学教育和实践练习这两者结合而成。
LJ:您认为认证系统对雇用程序员的公司或者组织有所帮助吗?
BS:我还不知道有哪个认证体系是对程序员而言真正有价值的。相较于认证系统而言,我认为大学学位教育、工程师教育等传统教育方式更好。
LJ:您认为在如今的情况下,程序员掌握汇编语言还有意义吗?
BS:理解计算机的工作机理是很有意义的,而通晓汇编程序则是做到这一点必不可少的内容。如果你不能在汇编的层次理解计算机是如何运作的,那么你几乎肯定会对计算机的某些方面存在误解,对系统的某些部分觉得神秘莫测。我现在正在读Hennesey & Patterson的最新版,以保持我的计算机组成结构的知识不至于落伍。
LJ:Hennesey & Patterson的最新版?什么意思?
BS:也许它可以称得上是讲解现代计算机组成架构的最好的书籍。如果你对于计算机处理器内部究竟是如何运作的问题很感兴趣,那么该书就非常适合你。不过阅读这本书并不轻松,它有大约1000页厚,别指望靠在床头舒舒服服地就能读下去。
LJ:您认为公司还需要雇佣汇编程序员吗?
BS:需要的并不多。但是如果你的程序员从事的工作是最底层的DSP芯片开发的话,那么他就必须拥有处理器组成架构的知识。
LJ:DSP是什么?
BS:DSP就是digital signal processor,数字信号处理器。我对于DSP的一个比较中肯的评价是:相对于通用处理器而言,它的指令集显得更特殊,这就造成了编译器更难为DSP产生优秀的代码。
LJ:有一种说法认为通晓操作系统核心知识的程序员比普通的高级程序员的工资更高(30%-40%),您认为这是真的吗?
BS:我不清楚。我并没有程序员薪水的统计表。对操作系统核心运行机制的理解是有用的,所以这门知识应该值钱,但是同时还存在很多其他的同样重要的知识领域。
LJ:您喜欢玩计算机游戏吗?
BS:几乎从来不玩。我很难有空。
LJ:您最喜欢的食品是什么?
BS:我并不对某种食物特别偏爱。对我而言,任何一个不错的公司提供的食品都不错。丹麦有一种被称为冷盘的套餐,通常是以青鱼开始,然后是鱼和肉,最后上一些贝壳和干酪。按照传统的吃法,吃冷盘时需要配上啤酒和白兰地。我太太能够用豆瓣酱做出非常美味的猪腰肉。而我最喜爱的意大利餐馆提供一种名为Zupetta de Peche的食品,这种食品是在面条上放一些鱼和贝壳,然后淋一层加香加辣的沙司,嗯~!那可真是太美味了!
LJ:您现在觉得快乐吗?
BS:相当快乐。我的家庭,我的朋友,我对程序设计的贡献以及我的工作等等都让我觉得非常开心。
LJ:对于那些正在使用C++的程序员,您有什么要说的话?
BS:做实验时,可以大胆激进;可是当你是在写软件产品的代码时,最好还是保守谨慎。在我的主页上,有一个Technical and Style FAQ的页面,上面有很多编程提示和示例。如果你想发明一些具有重大意义的技巧,那你必须阅读一些书和文章。C++是一门多范型的程序设计语言,这句话的意思是说C++可以支持很多种有效的程序设计技术,而现实世界中的很多问题经常需要将这些技术联合起来才能得以优美地解决。所以,我建议大家首先学习数据抽象技术(简单地说就是利用抽象类编程)、面向对象技术(利用类继承体系)以及泛型程序设计技术(利用模板),然后考虑如何将这些技术结合起来发挥最大的功用,不要仅仅因为某种编程范型曾经漂亮地解决了你的某个问题就对它推崇备至而成为其狂热的追随者。
请牢记:程序设计语言只是一种工具而已。一旦你掌握了C++这样的语言的基础知识,更重要的事情就是对应用领域进行深入研究而不是继续在语言的细枝末节上纠缠不清。祝你在使用C++的旅途中开心好运。
评论