Bjarne Stroustrup 访谈

作者:Aleksey Dolya

以下是 Aleksey Dolya 对 C++ 编程语言的创建者 Bjarne Stroustrup 的采访。

Linux Journal: 您多大了?您有家庭吗?

Bjarne Stroustrup: 我 51 岁了。我已经结婚并有两个孩子;他们现在都是大学生。

Interview with Bjarne Stroustrup

LJ: Bjarne,您能谈谈您的青年时代吗?您何时何地出生,在哪里学习?

BS: 我出生在丹麦的奥胡斯(Arhus)。我不是出身于学术世家,但我在学校表现很好。所以我继续读完当地的高中,然后去了奥胡斯大学(University of Arhus),在那里我获得了数学硕士学位,[专注于]计算机科学。奥胡斯是一个很棒的城镇,约有 25 万人口,位于日德兰半岛(Jutland)东海岸。像那时那里的多数男孩一样,我在我们公寓楼的“院子里”玩耍,送报纸和牛奶以赚零花钱,踢足球,夏天骑自行车去海滩,并在童子军中学会欣赏城镇附近的树林。在大学学习的后期,我对微程序设计产生了兴趣,并去了英国,那里的机器在这方面更好。最终我在剑桥大学(Cambridge)获得了博士学位。

LJ: 您现在住在哪里?

BS: 我住在新泽西州(New Jersey)郊区的一个叫做沃辰(Watchung)的地方。这是一个小型、安静的地方,有很多树木。夏天从空中看它时,几乎只能看到树木。开车十分钟即可到达穆雷山(Murray Hill),我以前在贝尔实验室(Bell Labs)工作,大约 30 分钟即可到达弗洛勒姆公园(Florham Park),我在 AT&T 实验室工作。距离纽约市(New York City)约 35 英里。我过去常常在我家附近的一个拐角处就能看到世界贸易中心(World Trade Center)双塔。

LJ: 这个链接 指向一个包含您的名字和姓氏正确发音的文件。您是它的作者吗?

BS: 是的,那是我。

LJ: 您小时候家里有电脑吗?

BS: 没有,那时还太早了。电脑非常昂贵,只能在大学部门和大型公司里看到。我见到的第一台电脑是我大学数学系的 GIER。这是一台古老的丹麦电脑,占据了一个房间,程序通过纸带输入。我学会了在那台电脑上用 Algol 60 编程。

LJ: 每个名人都有他的起点。例如,比尔·盖茨(Bill Gates)最初是通过编写他的第一个 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 (ISBN 0-46-504225-2)中关于我和 C++ 的章节。有关 C++ 起源的更技术性描述,请参阅我的著作 The Design and Evolution of C++ (《C++ 的设计与演化》)。

LJ: 您是如何发明 C++ 语言的?

BS: 1979 年在剑桥大学完成学业后,我去了美国,在位于新泽西州穆雷山的 AT&T 贝尔实验室(AT&T Bell Labs)担任研究员。在那里,我开始了几个与使用局域网进行分布式计算相关的项目。然而,我没有取得很好的进展,因为可用的工具对于这些项目来说是不够的。因此,我开发了一种叫做“带类的 C”(C with Classes)的东西,以便我可以使用 Simula 风格的程序组织(现在称为面向对象编程)进行模拟和接近硬件的系统编程。C++ 是基于“带类的 C”以及我和许多其他人(主要是贝尔实验室)通过在许多应用领域中使用“带类的 C”所学到的知识而开发的。

LJ: 您为您的 C++ 语言感到骄傲吗?

BS: 当然。我很高兴它让我能够编写既优雅又高效的程序。我也为它的广泛使用感到非常自豪。话虽如此,我并不声称 C++ 是完美的。那里有很多非常糟糕的 C++ 代码,因为许多程序员没有学会好好使用 C++。我鼓励人们查看我的主页、论文和书籍,以获取有关如何改进代码的想法。我的印象是,如果设计人员和程序员理解最新的 C++ 功能和技术,大多数 C++ 代码本可以比现在更简洁、更易于维护和更高效。标准 C++ 确实使十年前不可行的编程技术成为可能。不幸的是,许多人受到约束或感到受约束,只能使用十年前的 C++,或者他们只是将其用作更好的 C。

LJ: 现在知道数百万人正在使用您创建的工具工作,您感觉如何?

BS: 我非常高兴,但正如我所说,我希望他们能更好地利用它,从而帮到他们自己。

LJ: 您认为创建 C++ 是您一生中最重要的事情吗?您认为将来会做更有用的事情吗?

BS: 这当然是我工作生涯中最重要的一部分,而且我不太可能创造出比这更重要的东西。许多直接影响我们日常生活的应用程序都是 C++ 程序。要了解这一点,请参阅我的 C++ 应用简短列表

我确信我将来会做一些重要且有用的事情。只是不太可能创造出像 C++ 这样规模的东西。我最近决定进入学术界,并接受了德克萨斯 A&M 大学(Texas A&M University)的教授职位。在那里,我将能够以我在 AT&T Research 无法做到的方式将研究与教学结合起来。我将教学视为以另一种不同的方式为世界带来积极影响,而学术研究提供了与我迄今为止实践的工业研究略有不同的权衡——不是更好,只是不同。我将与 AT&T Research 和整个行业保持联系,因为许多最好的研究都扎根于工业中发现的问题。

LJ: 您在工作中使用 C++ 吗?

BS: 是的。它是我的主要研究工具。

LJ: 从您的角度来看,哪个 C++ 编译器是最好的?

BS: 现在主要的 C++ 实现都相当不错或更好。我的意思是它们都接近 ISO C++ 标准,并提供良好的运行时性能。有关列表,请参阅 www.research.att.com/~bs/compilers.html。我不推荐那些远远落后于标准的编译器,例如(可悲的是)Watcom。

LJ: 您在工作中使用什么编译器?

BS: 几个;目前,GNU、Microsoft、Borland、SGI 和 Metrowerks。

LJ: 如果不是秘密,您在工作中研究什么?

BS: 我正在研究进行分布式计算的方法,尝试应用一些程序转换技术,以便我可以使用标准 C++ 源代码来处理各种分布式架构。

我怀疑这项研究更适合技术论文或技术讲座,而不是采访,但我可以举一个例子。我想编写一个小程序,它需要在多台计算机上运行。按照惯例,我必须编写该程序,以便通信方法在程序中是显式的。例如,如果我使用 CORBA,我的代码将包含 CORBA 调用,并且我需要为我想在程序的不同部分之间通信的类型编写 IDL。另一方面,如果我想直接使用 TCP/IP 进行通信,我的代码将充满 TCP/IP 库调用。相反,我编写了一个程序,其中各部分之间的通信由普通的 C++ 成员函数调用表示。如果要调用的对象是本地的,我直接调用类 X 的成员;如果不是,我调用类 proxy<X> 的相同成员。使用一个具有 C++ 程序转换功能的库,然后我自动将 proxy<X> 的调用转换为通过 TCP/IP 连接或 CORBA 调用发送的消息。

LJ: 除了 AT&T 贝尔实验室,还有其他公司试图聘请您吗?

BS: 当然;几家公司和大学都曾试图聘请我,但直到今年他们都失败了。

LJ: 您最喜欢的操作系统是什么?

BS: 我使用 Unix 和 Windows2000。

LJ: 什么 Unix?

BS: 目前是 Solaris、Irix 和 Linux。我尽量不依赖于在不同系统之间不是标准的特性。

LJ: 您认为它们是当今可用的最佳操作系统吗?

BS: 它们是很好的操作系统,但我不确定是什么让操作系统在总体上成为“最佳”。在大小、性能(各种形式)、运行现有应用程序的能力、在各种硬件上的可用性等因素之间存在严重的权衡,因此用户仍然必须在好的系统之间进行选择,以便选择最适合给定应用程序集的系统。

LJ: 您更喜欢哪种处理器,奔腾(Pentium)还是速龙(Athlon)?

BS: 我没有偏好,但 8*86 不是任何人最喜欢的机器架构。他们使用硬件将其过时的指令集映射到内部 RISC 架构的方式确实非常了不起。

LJ: 您每天花多少时间使用 PC 工作?

BS: 我每天必须花八个多小时使用电脑,周末的日子稍微少一些。但并非我所有的电脑都是 PC。

LJ: 您每天繁重的 PC 工作是否会导致任何健康问题?

BS: 我偶尔会因为鼠标用得太多而右臂酸痛,也不太频繁地因为在桌子旁坐得太久而下背部酸痛。我通过散步和跑步来对抗这种情况。大多数星期,我每周跑两到三次,每次四到六英里。

LJ: 您现在家里有什么电脑?

BS: 一台运行 Solaris 的 Sun 工作站,我的 IBM 笔记本电脑运行 W2000,一台 Linux 手持设备,一台运行 W95 的旧 Windows 电脑和一台“古董”Apple Mac。正如您所猜测的那样,我非常热衷于可移植性和合理程度的系统独立性。

LJ: 办公室里呢?

BS: 一台 Sun 工作站和我的笔记本电脑。从这些计算机(在工作场所和家里),我可以访问 AT&T Research Net 内部网络和外部的更多系统。如果人们有兴趣,他们实际上可以在我的主页上的全景图中看到这些计算机和我办公室的其余部分。

LJ: 您会哪些编程语言?

BS: 这取决于您所说的“会”是什么意思,但我对几种语言有实际的工作知识,对更多语言有阅读知识。例如 ML、PERL、Python 和 Ada。

LJ: 您认为哪些语言是 C++ 的 серьезные конкуренты?

BS: 这取决于应用程序。有时 C++ 是最佳选择;在其他时候,有理由优先选择 Fortran、Java、C# 或 Python 等语言。而在其他时候,人们可以使用更具实验性的语言,只是为了学习一些新东西。有很多语言非常适合它们的设计目的,并且仅仅依赖一种语言是一个错误。另一方面,竞争通常基于营销和看法,而不是事实,我不会对此发表评论。

LJ: 您如何看待 .NET 平台及其子语言 C#?

BS: 我对 .Net 仍然知之甚少,无法舒适地谈论它。

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++ 社区的好处。特别是,我为 The C/C++ Users Journal (《C/C++ 用户杂志》)撰写了一系列关于这个主题的文章,您可以从我的出版物页面和 CUJ 网站下载。然而,既得利益集团阻止了趋同的发生,我并没有看到大多数人真正有兴趣做任何事情,而我认为大多数人将从兼容性中获益最多。和以往一样,大多数人只是希望事情会以某种方式朝着最好的方向发展。

LJ: 与其他编程语言相比,您会说 C++ 是最好的吗?

BS: 不会;那没有意义。有很多很棒的编程语言。C++ 是其中之一,但没有也不可能有一种单一的语言对每个人和每个问题都是最好的。

LJ: 您有任何编程证书吗?

BS: 没有。总的来说,我重视教育胜过培训,并且几乎总是会选择具有广泛而深入的通用知识的人,而不是只接受过特定培训的人。学术技能和实践技能的结合是我的理想。

LJ: 您认为证书系统对程序员和雇用程序员的组织有用吗?

BS: 我不知道有哪个证书系统对程序员真正有价值。我更喜欢大学、工程学院等的传统学位。

LJ: 您认为,对于当今的程序员来说,了解汇编语言是否有用?

BS: 了解机器的工作原理很有用,而了解汇编语言几乎是必不可少的。如果您不了解该级别的机器,您几乎肯定会对计算机产生严重的误解,并且系统的某些部分对您来说是神奇的。目前,我正在阅读最新版的 Hennesey & Patterson,以更新我对机器架构的了解。

LJ: “最新版的 Hennesey & Patterson”。那是什么?

BS: 可能是解释现代计算机体系结构的最佳书籍。如果您想了解处理器内部真正发生的事情,这是一本您想读的书。但是,它不是睡前读物,大约有 1,000 页长。

LJ: 雇主需要汇编程序员吗?

BS: 不是作为这样的职位,但是以基本级别使用 DSP 的程序员必须非常了解其处理器的架构。

LJ: 什么是 DSP?

BS: DSP 是数字信号处理器(digital signal processor)。我的评论的相关性在于,DSP 指令集比普通的通用处理器有更多的特殊情况,并且编译器生成 DSP 良好代码的能力相对较弱。

LJ: 了解内核级别的操作系统的程序员是否真的比普通的高级程序员赚更多的钱(30-40%)?

BS: 我不知道;我不保留工资统计数据。内核知识很有用,因此它应该很有价值,但许多其他类型的知识也很有价值。

LJ: 您玩电脑游戏吗?

BS: 几乎不再玩了。不幸的是,我没有时间。

LJ: 您最喜欢的食物是什么?

BS: 我认为我没有最喜欢的食物。几乎任何在愉快陪伴下的餐点都是盛宴。然而,有一种丹麦菜肴叫做冷餐桌(cold table),它以几种鲱鱼开始,然后是鱼和肉,通常以贝类和奶酪结束。传统上,冷餐桌会搭配啤酒和阿夸维特酒。我的妻子有一个很棒的猪里脊肉配西洋菜沙拉的食谱,我最喜欢的意大利餐厅供应壮观的 Zupetta de Peche,这道菜是在细面条上放鱼和贝类,并配上辛辣的(“Fra Diavolo”)酱汁。美味!

LJ: 您现在快乐吗?

BS: 我相当快乐,因为考虑到我的家庭、我的朋友、我对编程的贡献、我的事业等等,我应该感到快乐。

LJ: 您想对使用 C++ 或正在使用 C++ 的程序员说些什么?

BS: 在您的实验中要敢于冒险,在您的生产代码中要更加谨慎。在我的主页上,我有一个 “技术和风格常见问题解答”("Technical and Style FAQ"),其中提供了许多实用的提示和示例。但是,要真正发展重要的新技能,必须阅读文章和书籍。我将 C++ 视为一种多范式编程语言。也就是说,C++ 是一种支持多种有效编程技术的语言,其中解决实际编程问题的最佳方案通常涉及这些技术的组合。因此,我鼓励人们学习数据抽象(粗略地说,使用抽象类进行编程)、面向对象编程(粗略地说,使用类层次结构进行编程)和泛型编程(粗略地说,使用模板进行编程)。此外,我鼓励人们寻找这些技术的组合,而不是对其中一种范式变得狂热,因为它恰好是解决少数问题的绝佳方案。

重要的是要记住,编程语言只是一种工具。一旦您掌握了语言的基本概念(例如 C++),那么更重要的是要充分理解应用程序领域和您试图解决的问题,而不是研究 C++ 的细微技术细节。祝您好运,并享受 C++ 的乐趣!

Aleksey Dolya 是一位俄罗斯 C/C++ 程序员,对网络安全和软件保护感兴趣。

加载 Disqus 评论