软件开发!=软件工程 你真的希望如此吗?

端着咖啡,你大步走向书房,只余脚步声回响在空荡的走廊里。跨过门槛,停下来咯哒一声打开头顶上的节能灯,放在书桌中央的笔
记本电脑一下子映入你的眼帘,明亮的屏幕上图表正在发出诱惑的光芒。放下咖啡,你决定最后再研究一次,看看还有什么错误或误算是先前被遗漏的。不断地熬
夜,熬夜,但最后,终于让你获得了客户的认可。

喝一口依然还滚烫的咖啡,你决定最后一次检查客户需求。用早餐的位置?有了。四个浴室,其中一个要在天花板上安装花洒淋浴头?有了。三车车库以及宽

敞的院子?有了。一切准备就绪,各就各位。最后的审查让你充满自信:想必客户定会满意,施工也马上可以开始。合上笔记本电脑,抓起它走出房门,兴冲冲地想
要展示给客户看。

正如你所预期的那样,客户很满意!他对院子的大小很满意,他和他的家人也很喜欢你设计的游泳池和早餐位置。但是美中不足的是….

“你能让它飞起来吗?”

这是工艺,而不是工程

上面的故事显然是荒谬的:只要是思维正常的人都不会要求让房子飞起来,因为我们都见过房子,它们都是不会飞的。然而,这样的情景却经常在软件开发上

重演,一遍又一遍。客户要求的东西——他认为是合理的,但对我们开发人员而言可能是完全不可能的——至少目前为止我们清楚这是不可能的事情。现在的软件开
发很少有章程,双方协定的标准就更少了。我们能做的,通常就是,创建的东西尽可能地符合客户的期望。

几年前,有一个关于软件开发是否可以被 称为软件工程的大辩论,这源于一篇名为《Software Engineering: An Idea
Whose Time Has Come and Gone?》的文章,作者是Tom
DeMarco。DeMarco认为,短命的软件工程已经死去,这对于所谓软件“变革”的创建并不重要。

DeMarco的论文认为由于缺乏测量力度(和“软件”一词所代表得深度和广度),软件工程已经走向了灭亡。但是我看到的是一种截然不同的现象:软件工程从未存在过。

首先郑重声明,我赞同DeMarco先生的主要观点。软件开发不是工程,因为在传统的工程中输出是有把握的,且可被反复衡量和控制的。
DeMarco的著名论据“你无法控制你不能衡量的东西”是对此理念的完美总结:如果你不能衡量你将要实施的变化的影响,那么让我们怎么相信你能控制它们
呢?

这一点,在我看来,正是我们不能将软件开发称为“工程”的首要原因:我们不能衡量将要实施的变化的影响。当然,我们可以执行单元测试,集成测试——

我们能想到的所有测试,但我们依然无法准确估计当我们实施所有潜在的变化时,它们对现有系统所造成的影响范围。我们现在根本没有足够的工具来做到这一点,
并且据我所知,我们一直以来就没有这样的工具。

我认为软件开发可以当作一门手艺。“工艺”一词或许能够更好地描述我们开发人员的实际工作。

工艺和工程之间的主要区别是,后者使用已经广为人知且公认的知识来解决问题,而前者使用的是更专业的知识,懂这些知识的人不如前者那么多,甚至这些
知识可能是不成文的或并不为大众所认同。因此,我们可以得出软件工程一说根本不存在的观点,因为没有足够普遍都接受的知识来证明它可以叫做“工程”。

那么“软件工程”可以存在吗?是否有用?

软件工程这说法是否可行?

假设将软件开发的整个领域转换到工程学科是可能的。然而,我们真的想要这么做吗?

在我看来,创建有用的软件需要具备一定层次的艺术技能,有的形式的创造并不能用数学和工程精确地表现出来。创造力能让我们面对从未见过的问题时,也能想出新颖的解决方案。但是如果我们不小心,它也会让我们搬起石头砸自己的脚。

对我而言,将软件开发制定为工程学科会消弭大量的创造自由(当然并非全部),从而阻碍我们从多方面思考来解决当前问题。

另一方面,利用工程策略可以显著提高例如标准规格、可测试性,以及项目管理等理念。此外,它提供的公共知识池,可作为使用来源用于参考解决方案,使它们更容易交叉引用。

既然这样,那么共享和控制所有知识是否值得我们失去一些创造的自由?我认为这不值得,哪怕上述权衡真的可以实现。软件可用于所有基本的事情,与其说

伟大的多元化思维自由是我们解决问题的阻碍,倒不如说它是福音。如果硬是将软件塞进工程领域,那么就会有太多的变量,太多的问题,太广泛的问题范围需要考
虑。对所有软件开发使用工程策略将会是一场灾难。

这篇文章开头的故事,就是一个当我们将软件开发与工程作比较时,常见但不正确的假设:即将软件设计比作是盖房子。这严重偏离了事实。房子是有形的,

受到物理定律如重力的约束,并且我们已经拥有了上千年的筑造历史,知道如何建筑适宜居住的房子。而软件是没有这些条件的,因此这样的比较说好听点是天真,
说难听点就是误人子弟。

总之,软件开发永远不可能是软件工程。

我们的专业是一门手艺,我们是工匠。软件开发是一个过程,作为程序员的我们吸取关于项目的专业信息和设计内容,然后实施满足客户需求的解决方案。它是艺术,它充满了创造性;它不是工程,它也不需要成为工程。这应该成为我们的共识。

你有什么看法?你认为软件开发成为软件“工程”是一个值得追求的目标,还是一项不可能完成的任务?欢迎分享你的评论,请畅所欲言!

作者:王国峰

来源:51CTO

时间: 2024-12-02 08:45:23

软件开发!=软件工程 你真的希望如此吗?的相关文章

软件开发-软件工程哪种方向比较好

问题描述 软件工程哪种方向比较好 求大神指导啊 有移动互联软件开发方向的 还有应用开发方向 就分析指导啊 解决方案 这些"方向"主要针对的是软件工人,都不太好. 解决方案二: 软件工程师要考什么证书

AppScale带给云软件开发新的希望

本文讲的是AppScale带给云软件开发新的希望,[IT168 资讯]迄今为止,云领域的软件开发一直受到很大程度的关注.当许多早期的开发者,如Zimky和Coghead都半途而废,平台即服务(PaaS)市场却取得了突破性的进展.Google App Engine在这方面有着明显的领先优势,坚实稳定的基础托管服务提供商Ruby on Rails也用实力证明了自己. 这些成功也推动新开发商去寻求云计算的增长点,其间的差异化是显而易见的,而最根本的区别在于他们在PaaS市场的占有量. 以AppScal

软件开发中最顶级的 17 个平台和工具

当你在决定使用哪些软件或平台来完成日常工作时,会存在很多选择.所以,我决定写一个我们在开发部门常用的软件开发工具列表,希望能对其他所有人都有所帮助. 新的软件需要一些时间来适应,习惯和理解.我们都经历过一种情况--我们不是真的满意,但不得不重新开始使用另一个工具.承认吧:这真的不是什么棒棒哒的感觉! 如果你打算继续阅读这篇文章,很可能是因为你知道软件开发工具的重要性,以及它们将如何提高团队的效率和生产力.在这个列表中,你会发现我们在Apiumtech使用的伟大的编程工具.而且它们不光是编程工具,

我是一个软件专业的小白,我想从事软件开发行业,我对这些不了解,软件工程具体的一个阐述?

问题描述 我是一个软件专业的小白,我想从事软件开发行业,我对这些不了解,软件工程具体的一个阐述? 我是一个软件专业的小白!我是一个软件专业的小白,我想从事软件开发行业,我对这些不了解,软件工程具体的一个阐述? 解决方案 软件工程是研究和应用如何以系统性的.规范化的.可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科.它涉及到程序设计语言.数据库.软件开发工具.系统平台.标准.设计模式等方面. 在现代社会中,软件应用于多个方面

《实践者的研究方法》—— 第2章 软件工程 2.4 软件开发神话

2.4 软件开发神话 软件开发神话,即关于软件及其开发过程的一些被人盲目相信的说法,这可以追溯到计算技术发展的初期.神话具有一些特点,让人觉得不可捉摸.例如,神话看起来是事实的合理描述(有时的确包含真实的成分),它们符合直觉,并且经常被那些知根知底的有经验的从业人员拿来宣传. 今天,大多数有见地的软件工程师已经意识到软件神话的本质--它实际上误导了管理者和从业人员对软件开发的态度,从而引发了严重的问题.然而,由于习惯和态度的根深蒂固,软件神话遗风犹在. 管理神话.像所有领域的经理一样,承担软件职

《精益软件度量——实践者的观察与思考》—第1章1.1节精益软件开发的度量体系

第1章 度量谜题 精益软件度量--实践者的观察与思考 "我们所能拥有的最美好的经历是感受到神秘,它是触发所有真正艺术和科学起源的基本情感." 艾尔伯特·爱因斯坦(1879-1955) 按照IEEE的定义,"软件工程是将系统化.规则,以及可控的体系方法,应用于软件设计.开发.操作和维护:换言之,即工程理念在软件中的贯彻."1看上去很美,不是吗?当我们看到一个又一个软件开发组织,特别是大型的组织,特别是拥有辉煌历史的组织,把过程可控作为主要的管理目标时,一次又一次地惊讶

对软件开发道路的一点思考

上个周末软件学院组织学生去北京参观一些IT公司,我也在赴京的队伍中.我们一共去了三天,其中路上消耗了一天,所以实际在京时间只有两天.而在这短短两天时间里,我们先后参观了中国软件与技术服务股份有限公司.文思创新软件技术有限公司以及中国科学院计算技术研究所三所单位. 回来以后结合这次的参观和我之前一些零碎的想法,整理以后决定写这篇文章,也算是对之前的一些感悟作个总结吧.另外要强调的是,下文并不一定适合其它行业的同学. 一.对软件专业学生自身的要求 1.不要执着于高报酬 诚然,每个人都希望能有一份好工

软件开发-这个项目需要多少钱才能开发?

问题描述 这个项目需要多少钱才能开发? 我是基层气象局的工作人员,我希望找公司开发底层数据库.但是我真的搞不懂,现在的软件开发项目到底需要多少钱! 我把自己想的东西列了一下,有没有人可以指点下,需要多少钱.如果可能的话,还想知道需要多少时间. 我自己99年毕业的通信工程专业,数据库还懂一点,应当可以配合开发人员的. XX县数据共享平台任务书 一. 数据的汇集 a) 实现从省市自动站数据库自动获取.归集XX县所有测站的实时观测资料 b) 从省局数据库导入XX县本站及中尺度站的历史资料(资料来源由X

“以终为始的软件开发”的那些事 : Myths and Truths

本文根据中生代技术群分享整理而成,具有多年软件研发经历的刘朋为大家分享ATDD,TDD,BDD的那些事,为大家分享"以终为始的软件开发"经验. 文章正文 我分享的主题是TDD,但是其实涵盖的领域会更宽泛.于君泽在前几期里面分享了"以终为始的架构设计",其实我的TDD分享并不会仅仅拘泥于TDD,或者说我更想和大家讨论一下"以终为始的软件开发",这个题目也许更为恰当. 所以,我其实想讨论的是:作为软件开发研发团队,当我们从客户(或者客户代表Produ