关于 Bjarne Stroustrup 博士

我是 C++ 语言的最初设计者和建构者。我在 C++ 标准委员会工作了 30 年,致力于让 C++ 在现实编程中成为有用的语言工具。

我的职业生涯始于贝尔实验室,在那里工作多年,从事行业研究工作,也在德州农工大学任职。之后,我加入摩根士丹利,任董事总经理,亦被授予技术院士称号。

技术院士,即 Technical Fellow,摩根士丹利授予其技术团队成员的最高荣誉。

 贝尔实验室、C++ 的诞生与 Bjarne 博士

博士毕业后,我有幸在贝尔实验室的计算机科学研究中心得到一份工作。

贝尔实验室的计算机科学研究中心位于默里山,拥有 1000 多名来自不同科学和工程领域的博士,聚集着一批计算机科学界的精英。20 世纪 70 年代到 90 年代,贝尔实验室的计算机科学研究中心是世界上最伟大的实践计算机科学和理论的地方。

在那里,每个人都有压力,觉得如果想在贝尔实验室找到归属感,就必须有拿得出手的成果。所以,我当时打算构建一套分布式系统。

但很快,我意识到我当时实现不了。问题在于,编程语言分为高级语言和低级语言,当时却没有哪一种语言能够兼顾我(在表达高级概念的同时也在底层与硬件沟通)的需求。所以,我决定自己开发一种。

我当时并没有构建一个处理系统,尽管我需要一个,我却创造了编写处理系统的工具。结果,构想中的分布式系统没能出现,但 C++ 语言倒是由此诞生。

 从大学教授到银行董事总经理,Bjarne 博士的职业选择

在德州农工大学工作十几年后,教授能做的事我基本上都做遍了——带本科生、带硕士生、带博士生、写学术论文,还有参加委员会之类。经历这些后,我打算尝试点新的东西。

作为学者,我担心自己离现实世界的技术问题太远了。这可能导致我在学术研究中搞错哪些才是真正亟待解决的现实问题。所以,我决定离开校园。

这时候,摩根士丹利向我发出邀请,我的第一反应是“可你们是一家银行啊”,但后来他们说服我,他们在我一贯以来的研究方向上有很多有趣的技术问题亟待解决,包括分布式系统、网络与代码改进等等。

另外,那里也有很多值得结交的优秀同事——简单纯粹的工作环境非常重要,我特别受不了办公室政治那些破事。

最后,最重要的一点是,他们的办公地点特别好,摩根士丹利的总部离我孙子孙女家只有 20 分钟路程。所以,我就去了。

 开发者掌握一种编程语言肯定是不够的

很难说,一个程序员到底该掌握多少门编程语言,但单纯一种肯定是不够的。在系统开发中,没有哪套方案单靠一种语言编写而成。例如,目前关于 AI 以及无人驾驶汽车的开发工作至少使用两种语言——利用 C++ 完成底层开发,更高层的功能倾向于由 Python 实现。

总之,不可能只用一种语言。

我个人不会推荐某一种特定语言。当然,我肯定会推荐 C++,因为它非常灵活,而且如果你确实需要处理硬件相关的,且更为复杂的问题,那么 C++ 具有显著的优势。

 开发者应具备的重要技能

我觉得,很难说哪种技能是对每一位程序员都必要的。你需要的技能,其实取决于你的实际任务。

我个人关注的大部分技术问题,都要求开发者具备基础性的计算机科学知识、了解数据结构,同时对计算机硬件架构有一定程度的认知。

最后,优秀的开发人员实际上不只是单纯的程序员。他们应该擅长沟通,因为需要听取用户意见以了解问题所在。此外,他们必须有能力与他人交流方案与想法,否则只能是浪费时间。

 C++ 几十年长盛不衰,其生命力何在?

在近 30 多年以来,C++ 一直都还算是排名比较靠前的一种编程语言。

要统计世界上有多少程序员在使用什么编程语言是很困难的。我觉得目前比较可靠的数字应该是(全球)有约 450 万名左右的 C++ 程序员,同时 C++ 社区以每年 10 万到 15 万新增开发者的速度增长。

C++之父:爱吃辣子鸡,C++20会非常出色丨极客档案_java

C++ 之所以拥有顽强的生命力,主要是因为它非常实用,同时具有强大的灵活性与通用性。我曾说过,我觉得一种语言不应该只能实现设计者想得到的功能,它必须有能力做得更好。并且,我很早就提出的一项零负担原则就是,计算机里的抽象模式必须要比人工做得更好。

因此,C++ 灵活且实用,同时也不乏条理性,你可以把它看作有能力兼顾两方面,这些特性就跟我当时使用的 C 和 Simula 一样。

一方面,它面向对象,允许直接访问计算机,最大程度地提升效率;另一方面,它也能让你使用可承受的高效方法,(非人工介入地)来掌控系统的复杂度。

我觉得这两点是 C++ 的真正优势所在。

 初学者应该怎样学习 C++?

在我看来,对初学者而言最重要的一点,就是不要急于一下学会所有内容。

这是不可能的。没有哪种现代语言可以快速学透,然后就开始使用。大家需要思考自己实际上需要什么知识,从基础部分起步,先尝试简单的东西。

以 C++ 为例,我们应该先学习其中现代的部分,其他比较陈旧的部分可以之后再尝试。

但往往人们在实际中采用了恰恰相反的方法。

 C++ 的优势和不足之处

没有哪种语言是完美的。

C++ 是一种非常灵活的语言,具备撰写高性能代码的能力。因此,如果大家需要直接跟硬件打交道并期望追求最高效率及低延迟,或在各类嵌入式系统中实现最具可预测的性能,那么 C++ 无疑是理想选择。

更进一步来讲,C++ 也是一种稳定的语言。我们拥有 ISO 标准,而且向下兼容,意味着二十年前的代码现在仍然可以运行。因此,人们也可以期待自己现在编写的代码在二十年后依然可以正常运行。这一点对于很多大型组织来讲非常重要。

我们也普遍认为 C++ 绝对不能转变为专有语言。C++ 不应归任何一家企业所有,因为一旦出现这样的情况,他们就只会根据自身以及合作伙伴的需求对语言做出调整,这对其他的 C++ 语言使用者来说肯定不是什么好消息。

C++ 是一种灵活的语言,它既能处理底层事务,也能处理高层事务。它是一种成熟的语言,基本上已经覆盖了大家能够想到的一切行业及应用领域——包括金融、农业、航空航天、半导体、设备驱动等等。

当然,它并非完美。随着语言成熟度、兼容性以及稳定性而来的,是语言的复杂性——我们无法摒弃某些陈旧的部分。

另外,C++ 作为一门历史久远且具复杂性的语言,在 IDE、编译系统以及软件包管理等方面存在弱项。

还有另一个弱点:大型财团支持下的语言能够发布大量不完全标准库,但 C++ 社区没有资金支持,所以做不到。不过这也是 C++ 语言壮大过程中的有趣之处——我们从来就没有过任何资本投入,但 C++ 社区规模始终在不断扩大。

 C++20 的主要亮点

我现在很有信心,C++20 会非常出色。我经常提到,C++11 用起来就像是一种全新的语言。C++20 的提升幅度要比 C++11 更大,它会带来全新的感觉。

C++之父:爱吃辣子鸡,C++20会非常出色丨极客档案_java_02

我可以提一下我认为对整个 C++ 社群而言会有极大帮助的特性,我觉得有两个。

第一个特性是概念(Concepts),它是对范式编程中接口的精确规范,旨在提升范式编程的易行性与灵活性。因此,我们将看到更多的范式编程,代码呈现形式也将会有所变化。大家会获得更好的错误提示信息,并且可以更少地使用模板元编程。当然,编译速度也会更快。

另一重要新特性是模块(Modules)。如果使用它整理代码,我们可以将代码编译速度大为提高(比如说快 5 倍以上),这一点非常重要。如此一来,大家就能够更迅速地完成编译而不需要在编译的间隙去喝咖啡打发时间了。同时,你也将消除更多的程序缺陷,因为你的代码将显得更加规整。

我觉得再过几年,Concepts 与 Modules 会重要到让大家都觉得不可或缺。

 编程之外的生活爱好

我阅读范围比较广泛,除了技术方面的内容,也涉及文学、历史以及自然科学。这几天我利用早餐时间在读一本关于中国历史朝代的书,因为我现在正在中国旅行,所以趁此机会多了解一点。我也爱听音乐,既喜欢古典也喜欢摇滚,有时候编程的时候也会听。

其实,记载 C++ 的历史大概可以算是我的一项业余爱好。虽然这不在我的常规工作范围之内,但回顾并记录 C++ 的历史可以帮助我反思系统设计。我们需要反思自己做过哪些事、为什么做了这些事,哪些真的有用,接下来需要做些什么等等。

业余时间,我也曾为第二届与第三届编程语言发展史大会写过文章,并且刚刚为第四届大会写好一篇初稿——编程语言发展史大会是美国计算机学会 ACM 每隔 15 年举办一次的大会,受邀为其写超过一篇文章其实算了不起的,目前还没人写过三篇,也没有哪种语言能够三次在大会上被探讨。所以我即将刷新纪录了。

 工作与生活的平衡

生活中,无论是工作还是别的什么,都应该讲究平衡。

C++之父:爱吃辣子鸡,C++20会非常出色丨极客档案_java_03

我很清楚,C++ 这类项目需要很长的周期,这更像是场长跑,而非短程冲刺。你需要把握节奏,所以要做点其它事。因此我会读书,听音乐,出去旅行——我总爱出去旅行。但在旅途中,我会试着多看看、多认识些人,尝尝本地美食之类。最近,我有时会带孙辈们一起旅行。

这些事情都是很重要的。

 后记

此次,Bjarne 博士来中国上海出差,行程满满,不仅参加第四届摩根士丹利 IT 职场女性论坛以及 C++ 软件技术大会并发表了主旨演讲,还到上海交大、浙大和华师大三所大学以及一所中学进行了校园演讲。Bjarne 博士今年 69 岁,但他身体很好,长期保持着跑步的习惯。采访时,他的精神不错,很有活力。在上海摩根士丹利工作期间,他会跑步,并号召大家一起跑。跑 5 公里,他仅用时 29 分 39 秒。他平易近人,采访时回答问题非常认真。他不仅对软件开发和编程有着深厚的理解,而且对人生也有很深的思考。