荐书 为什么优秀的工程师会编写出糟糕的软件?

 

在 The Problem With Software: Why Smart Engineers Write Bad Code 这本新书中,资深程序员Adam Barr解释了为什么会发生这样的事以及如何解决它。...



点击

上方“IEEE电气电子工程师学会”即可订阅公众号。网罗全球科技前沿动态,为科研创业打开脑洞。

照片来源:Randi Klett 


我们的生活受到软件故障的困扰通常它发生在个人层面,但有时其影响可能是国际范围的,如一个机票预定系统出现故障时。软件成为了现代生活中如此重要的一部分,但问题依然存在:为什么那么多的软件如此糟糕?这就是资深程序员Adam Barr在The Problem With Software: Why Smart Engineers Write Bad Code(麻省理工出版社2018年出版)一书中探讨的问题。IEEE Spectrum高级编辑Stephen Cass向Barr提了几个问题。

 Stephen Cass:那么,本书中所谈的软件问题是什么

Adam Barr:五十年前,1968年秋季举办的北约软件工程会议上,“软件工程”这个术语第一次被提了出来。每个人都认为软件工程不是真正的工程,而我们需要纠正这一点。第二年他们又召开了一次会议,试图解决这个问题。但行业界人士认为学术界飘在空中,而学术界认为行业人士忽视了真正的问题,只关注制作出软件。从那时起,这种分裂一直存在着。 所以,我们并没有得到一个由来自学术界的研究支撑的行业,这与人们对冠以工程学的东西的一般认识不同。本书的目标是提高认识,让行业界对与学术界进行更多对话感兴趣,反之亦然。

S. C.:这种分裂是如何体现在实际编写的代码中的

A.B.小型软件和大型软件之间存在差异。你在学校时在某个项目上做的小型软件,你与一两个人合作就可以开发出来了。而大型软件是兴师动众制造出来的,由多人共同开发,在其生命周期中参与人员不变这一点虽然很重要,但并不必要。......在你必须要做的事情上,两者真的大有不同。所以,像可维护性、可读性、安全性、可管理性等所有这些东西还没有学过,人们就进入了软件行业,他们不得不重新学习......像IBM等公司在上世纪70年代就开始研究这个问题,并在将软件转变为一个工程学科方面取得了一些进展。但这些基本上都被浪费了。个人电脑革命期间大量的人涌入软件行业,但基本上忽略了此前就出现的这种分裂。

S.C.:无论是消除GOTO语句还是敏捷编程人们似乎总是在寻找修复软件的灵丹妙药

A.B.在我写这本书的时候,我可以看到DevOps正在让人们有这样的感觉:“哦,这是一种能够治愈所有软件弊病的东西”。它们都很有用。消除GOTOs是件好事。敏捷开发有一些优点。DevOps在某些方面做得很好。但它们被大肆宣传为是最终的解决方案。我认为这是因为它们背后没有来自学术界的支撑......缺少的是辨别能力并说“在这些情况下,Perl是一种很好用的语言。在那些情况下,Perl是一种糟糕的语言。”相反,人们会说,“哦哇!我自学了Perl并编写了这个20行的脚本。现在我将使用Perl来解决我遇到的每个编程问题。”

 S.C.情况怎样能变得更好向软件即服务的转变有帮助吗?

A.B.将软件作为一种服务来运行,消除了一些神话。因为你可以实际观察你的软件是否可维护、是否安全等等。如果没有这样的转变的话,你会感受到更多的痛苦,所以软件即服务有望给人们一些启发......对于软件开发人员,我担心的是,当你离开大学时,你没有像许多其他工程学科的学生那样真正体系化地学习相关知识就成功毕了业。所以在你进入软件行业后,你需要花费一段时间才会抹着门道,而这本是可以避免的。高等院校可以教授与行业更相关的知识,这样在你开始你的软件工程师职业生涯时就会更快地高效工作。

本文刊载在2019年1月期的印刷版IEEE Spectrum上,标题为“Why Do Good Engineers Write Bad Software?”。
点击

阅读原文

了解更多详情


    关注 IEEE电气电子工程师学会


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册