BjörnStraustrup:编程问题

图片

2006年文章。

C ++编程语言的发明者BjörnStraustrup保护了自己的遗产,并讲述了大多数程序代码的问题所在。

在1980年代和90年代,BjörnStraustrup开发并实现了C ++编程语言,该语言普及了面向对象的编程,并影响了包括Java在内的许多其他编程语言。

C ++仍然是原型“高级”计算机语言(即保留自然的人类语言功能的语言),并且仍被数百万程序员使用。 PC和Internet时代的许多系统和应用程序都是用C ++编写的。 尽管如此,该语言仍然存在争议,主要是因为众所周知它很难学习和使用,并且因为Straustrup设计允许开发人员出于维护自由的目的而犯下严重的编程错误。

Straustrup在AT&T贝尔实验室工作了很多年,现在是位于休斯顿附近的德克萨斯农工大学工程系的计算机科学教授。

技术评论:为什么这么多软件如此糟糕?

比约恩·斯特拉斯特鲁普(BjörnStraustrup):从任何标准来看,有些程序实际上都相当不错。 想想Mars Rovers,Google和人类基因组计划。 这是优质的软件! 十五年前,大多数人,尤其是大多数专家会说,每个例子都是不可能的。 我们的技术文明取决于软件,因此,如果软件真的和最坏的声誉一样糟糕,那么我们大多数人将已经死亡。

另一方面,查看“典型”代码片段会让我哭泣。 结构令人恐惧,程序员显然没有考虑正确性,算法,数据结构或可维护性。 大多数人实际上并没有阅读代码。 他们只是看到Internet Explorer变慢了。

我认为真正的问题是“我们”(即软件开发人员)处于持续的紧急状态,竭尽全力来完成我们的工作。 通过反复试验,过度使用蛮力和多次尝试,我们创造了许多小奇迹,但这常常是不够的。

软件开发人员已成为从不可靠的部分创建足够可靠的系统的复杂技术的大师。 问题在于,我们常常不知道我们是如何做到的:系统只是“变成”了最低限度可接受的东西。 就个人而言,我更想知道该系统何时可以工作,以及为什么会工作。

技术评论:我们如何解决当前的困境?

BjörnStraustrup:从理论上讲,答案很简单:从长远来看,可以更好地教育我们的软​​件开发人员,使用更适合的设计方法并使用灵活的设计。 奖励正确,可靠和安全的系统。 惩罚马虎。

这实际上是不可能的。 人们奖励那些价格便宜,有漏洞并首次发布的软件开发人员。 那是因为人们需要新的小工具。 他们不需要任何麻烦,他们不想学习与计算机交互的新方法,他们不想拖延交货,也不想为质量买单(除非这很明显,但通常甚至没有)。 而且,如果用户行为没有真正的改变,软件提供商就不可能改变。

在重新编程从咖啡机到金融系统的所有程序时,我们不能止步十年。 另一方面,继续随机操作是昂贵,危险和令人沮丧的。 需要进行重大改进,并且只能逐步出现。 他们必须走在前面。 仅一项更改是不够的。

问题之一是“学术烟囱”会干扰:太多人正在推广灵丹妙药之类的领域。 更有效的设计方法可以帮助,更好的规范方法可以帮助,更好的编程语言可以帮助,更好的测试技术可以帮助,更好的中层基础架构,可以更好地理解应用程序领域,可以更好地理解数据结构和算法。帮助-等等。 例如,类型理论,模型开发和形式方法无疑可以在某些领域提供重要的帮助,但是它们只是作为一种解决方案而得到推广,以排除其他方法,每种方法都保证了拒绝大型项目。 人们宣传他们所知道的和所看到的; 还有什么? 但是只有少数人具备平衡需求和资源的技术成熟度。

技术概述: C ++的思想是程序员将更积极地工作以换取更有效的代码。 贝尔实验室希望使用一种语言,某些非常聪明的人会使用这种语言来编写在电子交换系统(ESS)等计算机上运行不是很快的代码。 今天,有许多快速计算机和许多软件开发人员。 这是否意味着它否定了C ++的全部本质?

BjörnStraustrup: C ++不是专门为大型交换设备设计的,而是为广泛的应用而开发的。 贝尔实验室(Bell Labs)拥有许多有趣的项目,这些项目涵盖所有规模,并使用几乎所有类型的计算机和操作系统。 但是,是的,贝尔实验室的普通程序员比大多数人认为的“普通程序员”要强大得多,并且可靠性和性能(按顺序排列)被认为比其他大多数地方都重要。

在许多我感兴趣的应用程序中,性能仍然是一个问题:接口的响应速度,应用程序的启动和关闭时间。 软件开发人员通过添加冗余(软件)的逐层抽象来抵消现代计算机硬件的惊人性能。 似乎我们面临着硬件线性加速的局限性,但是在许多情况下,我们可以在软件中赢得几个数量级。

但是,C ++确实变得“专家友好”,而普通软件开发人员的有效正规教育水平却下降了。 但是,解决方案不是将编程语言简化到荒谬的程度,而是使用不同的编程语言并培训更多的专家。 这些专家需要使用某些语言,而C ++是其中的一种。

技术回顾:回想一下,在设计C ++时,您决定交换软件效率,其安全性和可靠性以及运行时代码性能是一个根本性的错误吗?


比约恩·斯特拉斯特鲁普(BjörnStraustrup):好吧,我认为我没有进行这样的交流。 我想要优雅高效的代码。 有时候我明白了。 这些二分法(在效率和正确性之间,程序员的效率和时间之间,与高水平相比的效率等)是虚构的。

我真正要做的是开发C ++,主要是一种系统编程语言:我希望能够编写设备驱动程序,嵌入式系统和我必须直接使用的其他代码。 然后,我希望C ++成为开发工具的良好语言。 这需要灵活性和性能,以及表达优雅界面的能力。 我的观点是,要创建更高的级别,创建完整的应用程序,您首先必须购买,构建或借用提供适当抽象的库。 通常,当人们对C ++有疑问时,真正的问题是他们没有适当的库,或者找不到可用的库。

其他语言试图更直接地支持高级应用程序。

这行得通,但是这种支持通常是以专业化为代价的。 就个人而言,我不会开发仅能实现我想要的功能的工具-我为社区而努力。

技术评论:您如何解释C ++被许多程序员广泛批评但同时又被广泛使用的事实? 为什么这种语言如此成功?

比约恩·斯特拉斯特鲁普(BjörnStraustrup):答案很简单:只有两种语言:每个人都抱怨的语言和没人使用的语言。

用被认为糟糕的语言设计的有用系统要比被认为美丽的语言所能用的系统更多-还有更多。 编程语言的目标是帮助创建可以通过多种方式定义“良好”的良好系统。 我的简短定义是:正确,受支持并且足够快。 美学很重要,但首先,语言应该有用; 它应该允许这个世界的程序员简洁,廉价地表达现实的想法。

C ++成功的主要原因是它可以满足有限的设计目标:它可以直接有效地表达各种想法。
C ++并不是要真正做好一件事情,也不是为了阻止人们做被认为是“不好”的事情。 相反,我专注于通用性和性能。

我敢肯定,对于每个不喜欢C ++的程序员,都会有人喜欢这种语言。 但是,我的朋友去参加了会议,主题演讲者请听众举手示意:第一,不喜欢C ++的人,第二,不喜欢C ++的人。 第一组的人数是第二组的两倍。 对您不知道的事物表现出敌意通常被称为偏见。 此外,抱怨的人总是比支持者更大声,更自信-理性的人会意识到缺陷。 我想我对C ++问题的了解比对任何人都了解的多,但是我也知道如何避免它们以及如何利用这种语言的优势。

而且,当然,您并不希望失去与C ++竞争的语言的拥护者对此表示礼貌。 尽管我希望这最终会发生,但是软件开发并没有那么专业。 在这方面,科学是不同的:当一种新的工具,技术或理论获胜时,人们将其视为进步。 在软件方面,竞争对手和前任的贡献并未得到广泛的认可,赞赏甚至理解。

技术评论:在“ C ++的设计和演化”中,您认为Kierkegaard影响了您的语言概念。 这是开玩笑吗?

比约恩·斯特拉斯特鲁普(BjörnStraustrup):也许是个自命不凡的声明,但不是在开玩笑。 关于软件开发的许多想法都集中在团队,团队,公司上。 通常这样做的程度是,一个人完全沉浸在公司的“文化”中,而又不会追求独特的才能和技能。 公司实践可能会对具有卓越技能和技术主动性的人产生敌意。 我发现这种技术管理残酷而浪费。 Kierkegaard是个人反对“人群”的坚决支持者,并严肃地提出了美学和道德行为的重要性的问题。 我无法指出该语言的特定特征,而是说:“您看,这是19世纪哲学家的影响力,”但这是我不愿消除“专家级别”,废除“滥用”并限制仅支持那些应用程序的能力的根源之一。据我所知,它们将很有用。 但是,我并不特别喜欢基尔凯郭尔的宗教哲学。

技术评论:您最后悔的是什么?

BjörnStraustrup:我没有遗憾! 好吧,当然,我梦about以求地可以做些不同的事情和做得更好,但是说真的,我又该找谁呢,比如1984年的比约葡萄酒? 他也许没有我那么经验丰富,但是他也同样聪明,甚至更聪明,而且他比我更懂1984年的话。 C ++用于创建许多改善我们生活的系统,这对后来的语言和系统产生了重大的积极影响。 这是值得骄傲的。

Source: https://habr.com/ru/post/zh-CN412881/


All Articles