欧易

欧易(OKX)

国内用户最喜爱的合约交易所

火币

火币(HTX )

全球知名的比特币交易所

币安

币安(Binance)

全球用户最多的交易所

C++之父BjarneStroustrup:程序员在数学上付出的努力,永远也不会白费

时间:2022-10-09 18:04:28 | 浏览:434

【CSDN 编者按】作者 | Evrone,已获作者翻译授权 译者 | 弯月出品 | 《新程序员》编辑部作为最初只是出于改进C语言、增加部分基于面向对象编程功能的C++,它的成功令C++之父Bjarne Stroustrup自身都感到意外:

【CSDN 编者按】

作者 | Evrone,已获作者翻译授权 译者 | 弯月

出品 | 《新程序员》编辑部

作为最初只是出于改进C语言、增加部分基于面向对象编程功能的C++,它的成功令C++之父Bjarne Stroustrup自身都感到意外:“C++的成功令人惊讶。”

不过,也是因为C++一直广受开发者喜爱,Bjarne Stroustrup多年来始终坚持在开发一线——目前71岁的他仍在积极参与C++开发工作。经常有受益于C++的开发者说,C++改变了他们,但殊不知,C++改变的,还有Bjarne Stroustrup自己。

(图片来自 Bjarne Stroustrup 个人主页)

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

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

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

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

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

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

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

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或算法。在大多数情况下,这些方法都能直接表达意图,只有在特殊情况下才需要考虑复杂的循环变量,例如在访问容器的元素时,不是挨个访问,而是隔一个访问一个。想法越直接,编写、阅读和维护代码就越容易,并且通常优化也越简单。

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

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

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

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

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

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

Evrone:有时作为开发人员,面对手头的编程任务,我们总是找不到合适的解决方案。您有没有遇到过类似情况,可否分享一些处理这类困境的建议?

Bjarne:当然遇到过。在面对新奇或重大难题时,每个人都需要付出巨大的努力,可能几小时、几天甚至更长时间,我们可能还会陷入困境,感到无助和沮丧。

这个时候,我们需要从逻辑层面来看问题。仔细想想你的目标是什么,或许是因为你努力的方向不正确,或许是因为你提出的要求不合理。也可以偶尔休息一下,想想别的事情,我一般会去跑步。放松下来以后,脑海中就会浮现一些有用的想法。

Evrone:业务环境时常要求我们在实现新功能时严格遵守最后期限。在您看来,开发人员要如何在代码质量和开发速度之间保持平衡?

Bjarne:这很大程度上依赖于管理结构和技术文化。我的个人意见(主要基于贝尔实验室的工作经历)是,如果你的组织内人才济济,就不必要求所有人都为下一个截止日期而努力。你需要一些关键人物为未来做策划、开展实验、构建下一个重要系统的第一个版本及后续版本。我认为,一个好的组织需要构建稳定的产品线,其中绝大部分都应在已部署并进入维护阶段的产品上进行革命性变更。不过显然,这种做法与常见的削减成本和发布颠覆性系统的思想背道而驰。

Evrone:许多人将您视为自己的导师,那么在您看来,一位优秀的导师应具备哪些品质?

Bjarne:愿意倾听并认真理解问题。在提供建议时要保持一定的谦虚,因为一般情况下,我们的理解都是不完整的。除此之外,优秀的导师必须给出具体建议,而不是一通模棱两可的废话。如果有人认真向你请教问题,你就应该给出严肃的答案助其进步。但老实说,提供建议也是一件很难的事。

不过教学相长,这也是我们进步的主要动力,一位优秀的导师会从学生身上学到很多东西。

预告C++的未来发展

Evrone:您能透漏一下在C++未来的版本中会出现哪些变化吗?

Bjarne:首先,社区必须适应C++20全新、强大并简化的特性,它在C++11的基础之上推出了很多提升。C++ 20有很多语言特性,还有标准库组件之类的,但在这里,我只介绍其中两个语言特性。

  • 模块:我们可以认为,import Mod可以访问由module Mod导出(exported)的接口。这种方式更加整洁,与之相比,#include则会泄漏实现细节和宏。此外,模块的编译速度也得到了大幅提升。例如,简单编译一段import std代码的速度比#import<iostream>快十倍(注意:std包含所有标准库,而<iostream>不到其10%)。std模块目前仍处于试验阶段,但经投票已被纳入C++23。

  • 概念:在C++20之前,所有模板都是不受约束的,也就是说,它们没有定义接口以供开发人员和工具查看模板的参数要求,但C++20中提出了“概念(Concepts)”弥补这一缺点。我们一直希望实现这种受约束的模板参数,只不过以前我不知道如何在不限制灵活性或增加运行时开销的情况下实现这个想法。现在我们可以检查模板的使用情况,在出错时得到改进后的错误消息,也可以重载函数模板,甚至提升某些方面的性能。

至于之后的版本,受疫情影响,很多功能的开发都被推迟了。我们希望能够在C++23中推出一些重要的功能,但很可惜,我最喜欢的一些功能未能如愿进入C++23。在这里,我只透露三点。

  • 静态反射:我们需要一种机制来根据程序中的类型在编译时生成代码,这不仅可以为我们提供运行时反射的灵活性,而且无需时间或空间成本。例如,我们可以针对一组固定类型,很容易地生成优化过的JSON阅读器。在这方面,我们已经付出了巨大努力。

  • 模式匹配:在许多函数式编程语言中,根据表达式与一组类型或备选值的匹配程度来选择操作,是表达备选操作最方便的方法之一。我们可以在C++中实现相同的功能,且在此过程中无需使用switch语句。我们有一个非常完整的设计和一个实验性的实现,所以我非常期待C++26。

  • 并发模型:多年来,我们一直在研究一个通用的并发模型,可惜我们发现的总是明显不太适合的用例,因此我们不得不再三推迟。但我希望C++26能有所突破。

最后,有一点需要记住:单凭一个功能并不能让编程变得方便、安全且高效。我们需要在类型系统中创建大量特性,同时,我们又不能破坏现有的数十亿行C++代码,因为兼容性和稳定性是非常重要的特性。

原文地址:
https://evrone.com/bjarne-stroustrup-interview

本文为 CSDN 翻译,转载请注明来源出处

END

《新程序员001-004》全面上市,对话世界级大师,报道中国IT行业创新创造

成就一亿技术人

相关资讯

程序员的日常丨你眼中的“程序员”是什么样子?别再被谣言误导了

在很多人眼里,程序员是一类高薪、“高危” 的职业。 他们穿着格子衫、顶着一碗超帅的光头,能修电脑、能黑网站、简直无所不能。 。 。但直到我自己当上程序员,才发现其实很多人都是对程序员的误解。除了外行的误解外,还有很多来自于程序员同行的误解。

程序员的日常:当一名程序员到底有多难?

多少次熬夜加班, 直至见到凌晨四点的太阳;多少个早晨洗漱的时候, 看到洗脸盆掉的全是头发;整天coding, debugging, 设计, 画图, 文档, 会议, 演示......看似充实饱和的工作, 又夹杂了多少苦涩与无奈; 程序员其实很

普通程序员与高级程序员的差别在哪?

同样都是敲代码,为什么别人一个月工资五万,你一个月却只拿五千?是单纯在找工作的时候运气不佳?还是因为技术水平有差别?那些被大众膜拜信仰的技术大神到底牛在哪里,现状已定,普通程序员是否还有机会逆袭?看完这篇文章,或许你能从中找到答案。从思维和

程序员是否可以作为终身从事的职业,以及程序员该何时考虑转岗

首先,当前程序员职业确实存在职业生命周期偏短的问题,原因是多方面的,包括工作量大、工作周期长、技术迭代速度快、岗位竞争压力大等因素,但是当前不少技术团队中,也有很多70后、80后的程序员,而且随着人工智能等技术的发展,以及IT互联网行业产业

“程序员图鉴”刷屏真实的程序员生活是怎样的?

中国码农千千万,北上深杭一大半。虽然所有的程序员都有着相似的气质,几乎每个人衣橱里都有差不多款式的牛仔裤、旅游鞋、格子衬衫,无论男女都有至少一个双肩包,但一方水土养一方人,每个地方的程序员都可以从茫茫人海中找到"老乡"。比如,北京的程序员大

程序员是吃青春饭的?一张图道尽程序员的发展方向

进入一个行业,开始一份工作,不论在最初的时候,你是因为喜欢还是被动接受,或多或少的都会成为你一段时间内为之奋斗的事业。边工作边迷茫也许是大多数人的常态,觉得这份工作不适合自己,可又不知道应该去做什么;喜欢着自己的工作,却又不知道怎么进一步提

程序员平均年薪70万、40岁后收入下滑?尽在2019程序员薪资报告

整理 | 刘静出品 | CSDN(ID:CSDNnews)学位高就能够拿高薪?我们的薪资与全球其他国家或地区的同行相比中间有多大的差距?Hired 近日发布的 《2019 年度薪酬状况报告》 解答了技术者们的诸多疑问。该报告聚焦于全球 13

程序员在21世纪如此吃香,那么怎么才能成为一名程序员呢?

程序员是21世纪比较吃香的工作。程序员工资高还不需要和复杂的社会打交道。那么怎么成为一名程序员?当程序员需要学什么?怎么成为一名程序员?【有明确的职场定位】怎么成为一名程序员?程序员也分为很多种,使用的软件和工作范围也不同。想当程序员,就要

程序员因工资低拒绝offer,HR:估计你一辈子就是个程序员

在职场中,我们应该追寻一种平等关系,也就是说公司看中求职者的能力,求职者希望公司给予自己满意的薪资和发展空间。因此,面试是选择和被选择的关系,拒绝和接受都是很正常的事情,而非一方的强人所难或是“王婆卖瓜”行为。近日,一名程序员在求职过程中由

程序员月入好几万?7年老程序员告诉你真实的情况

从业一开始,加班就是常态很多人都说这个程序员的工资比较高,其实这种背后的心酸,其实很少人知道。就拿我来说吧其实我工作了有七八年,记得刚工作那个时候,天天加班的话,就是白天睡觉,晚上加班,当时其实也没什么经验,就是只是凑人数嘛。当时我们项目经

学什么专业才能成为程序员?其实成为程序员,远不止计科和软工

在目前互联网行业,计算机领域都离不开编程,程序员也受市场的大量需求,而且目前程序员的薪酬普遍很可观,在北上广深等一线城市,程序员的薪酬基本都是上万,两三万一月的都有的是,甚至很多都直接讲年薪,程序员在目前还是比较吃香的职的业。那么我们学怎样

程序员分成五类,你是否是“完美型”程序员?不是但想是

程序有问题时不要担心。如果所有东西都没问题,你就失业了在我的编程生涯中,我碰到过很多奇奇怪怪的对手和同盟。我把这些编码战士们分成五类,有些人是你队伍中的好伙伴,有些人则是捣蛋者,让你的每一个计划都完不成。不管怎么说,他们在软件开发的诸神殿上

程序员必看:程序员到底可以分为几种?你又是哪一种呢?

不是每一个写代码的都是程序员。这里,我把程序员定义为以编程为生的人。我认为世界上存在四类程序员:科学家、码农、专家和工匠。下面我一一介绍自己的观点。科学家,与其说他们是程序员,不如说他们是数学家。他们发明了各种理论、算法和术语,教科书上那深

程序员年薪高达40万,为什么还有很多程序员单身,你知道原因吗?

网友一:我曾经招过的学生,后来进入了BAT的,各电商平台的,创业公司技术总监等等,现在很大部分都年薪都在30~40万,而且单身不少。因为我对他们比较熟悉,这里说说我的看法。单身的主要原因:1.工作忙碌,没时间谈恋爱。达到40万年薪的程序员工

为什么很多人不喜欢做程序员?甚至讨厌程序员?

要想成长为一名优秀的程序员,其过程是艰巨的,其道路是漫长的。不经过悉心栽培,花儿开不出鲜艳的花朵;不经过时间的历练,幼苗长不成参天大树。在软件行业更是如此。程序员必须具备的性格特点最基本的要求是能自主地编程。只有在经过多年的学习实践之后,我

友情链接

网址导航 SEO域名抢注宝宝起名网妈妈知道币圈郑恺影迷网海螺沟旅行攻略口红品牌网花卉绿植网小糊涂仙酒股票网手机租赁网袁大头银元收藏速比涛泳镜普吉岛旅游网宏宇瓷砖资讯网眼镜品牌网今日聊城五台山旅游攻略飞猪旅行资讯网长虹电视评测网
Java编程学习网-java零基础自学、java新手入门菜鸟必学、电脑编程入门自学、java安装教程详细、java新手编程入门、前端刷题网站、java开发工程师、前端刷题小程序、java入门基础知识、java新手代码大全、编程题库网站、java程序员刷题软件、编程入门自学网站、java题库网站、java新手刷题网站。
Java编程学习网 yaliandai.cn ©2022-2028版权所有