程序员在数学上付出的努力

1.C++ 对 C++ 之父的影响

Evrone:您创建了一门高效且快速的编程语言,这无疑改变了我们的世界。请问对您个人而言,在创建这门语言的工作中是否也发生了变化?

Bjarne:我从未想过这个问题,不过我认为这个问题可以从两个角度进行回答:哪些方面长期保持不变,又有哪些方面发生了巨大变化。

从很久以前开始,我就对历史、哲学等许多领域都抱有广泛兴趣,多年来也一直保持不变,我认为这对C++的发展具有重要意义。因此,相较于深入研究学术,我更想要建立更多东西,这也给我对工程领域的看法带来了一定“偏见”。我看重性能、低成本和可靠性,再加上我很重视反馈、不断进步以及对现实世界问题的理解,最终造就了C++。

多年来,在我工作中持续稳步发展的一个方面就是教育。当我试图解释自己的想法时,我逐渐意识到:不能只是做出来,你必须教人们如何使用它。这也是C++一直存在的问题。通常,我的个人看法会被其他人的声音所淹没,这些人往往有着更简单的愿景并提出更大的主张。在20世纪80年代和90年代,我们经常会听到“我们没办法迅速培养教师”之类的抱怨,所以C++的教学常常采用一种在我看来很糟糕的方式,也难怪有些人会对C++抱有非常负面的看法。

如果我能早点知道自己一生中的大部分时间都在说写英语,那么我一定会在英语上更加努力。这些年来,我需要面对并解决许多问题,这些问题种类繁多且范围广泛,在这过程中我对它们也有了很多见解。许多困难的问题都与组织、管理和教育有关。与技术教育相比,广泛的阅读令我更加受益匪浅。我明白了良好的语言设计需要高度谦逊,因为我们不了解的东西太多:这个世界在不断变化,我们的问题在不断变化,而我们自身也在变化。

2.洞悉行业当前现象及趋势见解

Evrone:强大的C++元编程系统有时会被滥用,开发人员会想方设法将任务从运行时转移到编译时。在您看来,有没有什么可行的解决方法?

Bjarne:每一种新颖且强大的功能或技术都会被过度使用和错误使用,对此我想不到有什么好办法。不过这也会带来一定好处,因为过度使用会让我们认识到弱点,并设法解决。

举个例子,C++模板元编程非常有用,因此许多人愿意忽略它的不足及其负面消息去使用它。后来,我们从中总结了大量经验,利用编译时求值的函数(constexpr和consteval)和概念来弥补相关不足,大大简化了手动编写的大部分代码。

Evrone:业界流传着一个“笑话”,即任何架构问题都可以通过引入新的抽象层来解决,结果却导致抽象层太多。我们看到很多C++代码都有大量的抽象类,那么作为C++创始人,您认为如何才能让每个抽象类都发挥积极作用?

Bjarne:这就是David Wheeler的“计算第一定律”,他是我的论文导师,也是一个了不起的人,我从他身上学到了很多。

你说的这个“笑话”反映了现实,人们确实喜欢将真正的逻辑隐藏在多层接口之后,还会使用大量的间接方式,但这可能会导致代码量和运行时间增加一到两个数量级。因此,现代C++的大多数功能就是为了让人们编写的接口能被编译器优化成更简单的机器代码,尽量减少使用无谓的间接方式。

Evrone:随着DeepMind的AlphaCode神经网络的问世,越来越多媒体声称这种神经网络很快就会取代程序员。您认为这种说法有依据吗?

Bjarne:我不太确定。我也很怀疑人工智能是否真的能够取代我最关心的编程类程序员,但我认为可靠性和最佳性能不太容易被标准化和平均化。AI不是我的强项,但TensorFlow和类似的库都有C++的身影,这也就意味着——不论好坏,起码我已经尽了自己的一份力。

Evrone:在过去十年中,我们看到许多语法糖(对语言的编译结果和功能没有实际影响、却能更方便程序员使用该语言的语法)被添加到主流语言中。似乎通过“臃肿的语法”为开发人员提供更好的工具已成为一种趋势,您对此如何看待?

Bjarne:只要能减轻程序员的负担,即便是“臃肿的语法”也无伤大雅,我更愿称之为“让简单的任务变得更简单”。我认为,关键思想是让程序员能直接在代码中表达基本思想。例如,用C语言风格的循环来表达容器上的简单循环没有任何优点或好处,最好使用range-for或算法。在大多数情况下,这些方法都能直接表达意图,只有在特殊情况下才需要考虑复杂的循环变量,例如在访问容器的元素时,不是挨个访问,而是隔一个访问一个。想法越直接,编写、阅读和维护代码就越容易,并且通常优化也越简单。

因此,我不认为“应该只有一种表达方式”是一种理想的做法,这种思想会导致有些情况很难表达,而有些情况确实需要大费周折才能表达出来。此外,经过长年累月的优化,语言本身也会发生变化。从这些角度来看,编程语言与自然语言并没有什么不同。

3.开发人员该如何突破困境?

Evrone:如今人们普遍认为,使用现代框架比应用数学知识更重要,您能在这方面给程序员一些建议吗?

Bjarne:程序员在数学上付出的努力永远也不会白费。数学是训练我们大脑的最佳方法之一,尤其是与计算相结合时,我们很快就会意识到自己的错误;数学也教会了我们一丝不苟,不要轻信过于简单或错误的想法。

在很多领域中,数学知识都是必不可少的,例如科学计算、某些图形形式和许多金融软件。但对大多数人来说,数学的关键领域是概率和统计:你的代码速度够快吗?能扩展吗?某些事件的发生概率是多大?影响是什么?

当然,也有许多应用程序不需要数学,但在构建基础设施或大规模部署应用程序时,容量和能耗的成本不容忽视,此时数学知识的不足就可能会带来危害。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值