软件开发是一门工程学科吗?


16

可以将软件开发视为工程学吗?如果不是,那么要成为合格的工程学科缺少什么?与此相关的是Stack Overflow上有关程序员和软件工程师之间差异的问题

卡尼基·梅隆大学设有软件工程学院,该学院规定并维护CMMI标准。这会把开发变成工程吗?


Answers:


20

是软件开发工程吗?如果没有,那么要获得资格就缺少什么?

是的,软件工程是一门工程学科。

Wikipedia将工程学定义为“为了应用,创新,设计,建造,维护,研究和改进结构,机器,工具,系统,组件,材料而应用的数学以及科学,经济,社会和实践知识,流程,解决方案和组织。” 软件工程的结果是可以改善人们生活的软件系统,并且可以包含科学,数学,经济,社会或实践知识的某种组合。

就其在学术和专业上的观看方式而言,它有所不同。软件工程程序可以被ABET认可为工程程序。软件工程师可以是IEEE的成员。有些公司将软件工程视为一门工程学科,而另一些公司则不这样做-确实是一个折腾。

关于这个主题的最好的书是史蒂夫·麦康奈尔Steve McConnell)的专业软件开发:更短的时间表,更高质量的产品,更多成功的项目,更多的职业。它将软件工程视为一种职业,从手工艺发展为一种职业,软件开发科学,软件工程与软件工程之间的区别(将工程实践应用于软件与偶然构建软件的工程师一起进行案例研究)包括我的母校),认证和许可以及道德规范。

格伦·范德堡(Glenn Vanderburg)在2010年至2015年的许多会议上进行了一系列名为“ Real Software Engineering” 的演讲,以及两个相关的演讲“ Craft,Engineering和Essence of Programming”(2011年授予在RailsConf上作主题演讲)和“工艺与软件工程”(2011年在QCon伦敦举行)。我认为这些谈话是软件工程为什么是一门工程学科的非常全面的论据。

范德堡在演讲中简要提出的一个论点是杰克·里夫斯(Jack W. Reeves)在1992年(并于2005年再次回顾)关于软件设计是什么以及软件工程设计活动的输出代码如何的论点(这也是在C2 Wiki上讨论)。一旦您摆脱了规范和建模是软件设计的旧思想流派,而变成了将代码变成软件设计的思想,那么软件工程与其他工程学科之间的某些关系就变得更加显而易见。在您看到软件开发的经济学与许多其他学科大不相同之后,某些差异以及造成这些差异的原因就变得更加明显-建筑便宜(在许多情况下几乎免费),而设计则是昂贵的部分。

那[CMMI]会将开发变成工程吗?

否。CMMI是一个过程改进框架,可为组织提供有关在构建软件时有用的活动类型的指导。工程学科通常具有工程过程。拥有这样的过程对于成功完成高质量项目很重要。就是说,CMMI(或任何其他过程框架或方法论)只是一个工具-使用它不会使您神奇地从开发人员升级为工程师。但是,在我看来,不遵循某种程序是项目不是工程项目的标志。

另外,您对软件工程课程/证书有何看法?

它只是与其他人一样多的价值。有有用的课程,有没有用的课程。有很有价值的证书,而且这些证书不值得在其上打印纸张。有很多因素,从谁认可或认可该课程,或者谁向您当前的工作行业颁发证书,到您当前的工作以及您想去的地方。


9

来自典型的工程背景,但从事软件开发工作,我看到了两个世界之间的巨大相似之处。除了对工程的确切定义之外,我在实践中看到开发软件与开发物理产品并没有太大的区别。至少我认为应该没有太大不同。

无论是设计飞机还是软件应用程序,您都需要:

  • 进行设计
  • 定义子系统和组件
  • 制作原型
  • 指定并执行测试
  • 等等

我在另一个答案中的某个地方读到,设计软件是不同的,因为在开始编程之前您并未设计所有内容。实际上,在某种程度上,设计物理产品时也是如此。设计,原型制作和测试是一个迭代过程。

同样,当软件项目规模扩大时,定义清晰的子系统,组件和接口也变得越来越重要,这也类似于设计复杂的产品(例如飞机)。

这就是为什么我认为开发软件属于工程技术。


2
感谢您分享您的经验,许多“开发人员”对工程的真正概念并不了解。干杯!
LeWoody

7

我认为确实存在诸如软件工程之类的东西。

工程涉及将科学知识系统地应用于解决问题的方法。今天要解决的问题的复杂性与电气工程师创建电路的过程或化学工程师设计制造工艺的过程或机械工程师创建设备所解决的问题没有什么不同。

还有一种应用现有计划(在这种情况下为开发)的动手方法,这一事实与在其他领域中其他人(例如建筑工人)执行那些计划的事实很相似。

的确,大多数开发人员也承担软件工程任务,而且我们的教育通常不是编程,而是软件工程。因此,我们会弄脏双手,而土木工程师则不会。

但是,应用编程语言和程序的能力并不能使工程师成为一名工程师:我遇到了很多对自己当前代码之外的复杂性和问题缺乏真正了解的开发人员。

关于您有关CMU的问题:应用标准或惯例(例如CMMI)不会自动将一个人的工作变成工程学。但是,存在进行科学研究以提供新实践的组织这一事实再次表明存在诸如工程学的事物。


5

不,这不是工程。我们不是那么科学,我们也不必通过任何这些状态工程测试。实际上,由于缺乏测试,在某些地方称自己为软件“工程师”是非法的。


实际上,这取决于您的住所。在魁北克,除非拥有工程学学位,通过考试等,否则不能称自己为软件工程师
。– Kena

请提供证明。
汤玛斯·欧文斯

1
这是来自Ordre des ingenieurs常见问题解答。oiq.qc.ca/cgi-bin/...
科纳

2
取决于您在做什么。有一些软件工程学位符合P. Eng的资格。如果您要构建用于控制核电站的软件或将某人送往火星,那么您实际上可能需要成为一名工程师。
08年

大多数工程学会不认可SE的原因是政治上和经济上的:很少有大学会给出正式的软件工程学位。充其量,您可以辅修或修读硕士学位。
Uri

5

恕我直言,“软件工程”一词的创建是为了更好地描述开发人员的工作范围,而不仅仅是成为“程序员”(它具有某种机械过程的色彩,几乎没有思想或创造力)。

就个人而言,我更喜欢将开发人员比作“工匠”,这是由务实的程序员提倡的。

从历史上看,人们一直试图将软件创建与制造相提并论。我认为Jack Reeves在他的文章《什么是软件设计》中抹黑了这个想法。


但是制造只是工程领域之一。关于软件开发!=制造业的争论很有趣,但是与关于软件开发是否属于工程学的争论并不直接相关。飞机设计也不完全像制造业,但两者都是工程领域。
MarkJ 2012年

5

从Wiki:

工程学

软件工程是在软件的开发,操作和维护以及对这些方法的研究中应用系统,规范,可量化的方法的应用;即工程学在软件中的应用。

软件开发

软件开发是产生软件产品一系列活动。软件开发可能包括研究,新开发,修改,重用,重新设计,维护或产生软件产品的任何其他活动。[1]

特别是软件开发过程的第一阶段可能涉及许多部门,包括市场营销,工程,研发和总管理。

因此它们非常相似,也可能意味着相同的意思。


1
我的函数名称实际上包含“软件开发工程师” ...现在真的很困惑:s
fretje

4

从Dictionary.com: 恩·GI·NEER·ING /ˌɛndʒənɪərɪŋ/

–名词1.在发动机,桥梁,建筑物,矿山,船舶和化工厂的建造中实际应用纯科学知识(如物理或化学)的艺术或科学。

我会说,创建软件是数学和计算机科学的实际应用,并且视应用而定,可能是任何其他数量的纯科学的应用。

[编辑] FWIW,我不称自己为软件工程师,而是软件开发人员,因此我对此不承担任何个人责任。


3

在我看来,软件工程师和软件开发人员是两回事。

我将一名软件工程师视为负责计划的人员,例如开发将采用何种生命周期,进行需求/规格说明等。基本上,一名软件工程师负责处理大量文档。这可以由软件开发人员和/或项目经理来完成。

一个软件开发人员会更密切相关的程序员,但在如数据库管理等其他方面更多的技能..

值得一提的是建筑。还参与确定项目生命周期需要哪些硬件/软件的人。


我相信软件开发是软件工程的类别之一。
LeWoody

1

我将在此处使用“否”。我的兄弟是机械工程师,他将工程描述为“便宜的艺术”:

“工程师们更关心的是尽可能快地以最低的成本和最少的材料完成工作。

作为回应,我将软件开发(不是软件工程-它们实际上本质上是两个截然不同的领域)描述为“高效的艺术”:

“开发人员更关心的是尽可能快地以最低的成本完成工作,并尽可能减少重复。

区别在于这些句子的最后一部分。


对“工程”的概念有很好的看法,有趣而真实。

我会让他知道其他人也同意他-他应该很高兴。:D

2
至少在某些情况下,我必须不同意这一点。我知道为航空业和NASA工作的人会在廉价之前优先考虑很多物业。工程师擅长平衡需求。
Uri

在我看来,这听起来像是一个非常疲惫的意见。你能支持事实吗?
杰里米

等等...我很困惑。谁的意见听起来很厌倦?是我的还是我兄弟的?

1

是软件开发工程吗?

不会。成为工程师意味着您的项目遵循因果时间表-您遵循建筑规范,因此您的建筑物不会倒塌(或者至少不会因此而受到指责)。编写软件时,您可以遵循所有遵循的准则(有很多不同的准则可供选择!),它仍然可能会挂起/崩溃/给出错误的答案(除非您参与编写可验证程序的范围非常小) -无效的功能语言)。


2
我距35W桥有几英里之遥,该桥在一年半前发生了灾难性的故障。成为一名工程师并不意味着您就可以免于破产。
David Thornley,2009年

我会同意大卫的。我认为在软件和结构方面,您都可以遵循科学的“因果关系”方法。这并不意味着任何人都不会遇到问题。
杰里米

也许不同之处在于测试风险代码更容易?
kleineg 2014年

1

我认为工程师(机械,结构,软件)是根据所理解的需求以及对什么以及如何应用材料来适应需求的理解而设计产品的人。

例如,您可能经常会看到结构工程师查找不同强度的钢并应用物理规则来计算所需的材料以及应如何实施。结构工程就是一个很好的例子,因为在构建之前,您总是会得到要构建的蓝图(规格)。软件并不总是这样。

对我来说,软件工程师和程序员的不同之处在于,工程师能够为编写任何代码之前将要生成的内容建立规范,而程序员要么只是根据其他人的规范编写代码,要么就是其中的一个狂野的西部程序员,他们编写的代码没有规范。同样,工程师也有他的学位。

我将建筑工人和结构工程师之间的区别比喻为程序员和软件工程师之间的区别。

需要说明的是,我只有大学文凭,所以不能称自己为工程师。


1
在编码之前不一定总是有一个规范,我可以说编码是在设计产品。在软件中,制造最终产品的副本是微不足道的。
David Thornley,2009年

我认为在进行深思熟虑的设计之前进行编码会使设计发生,这是代码演变的副作用。设计可以在代码之前或之后进行。您可以进行设计,然后通过代码来实现设计,或者实现代码,然后在代码完成后才真正意识到您的设计是什么(通常您只需要看一下软件,就可以知道遵循什么顺序)。没有SOME规范,您将永远无法编码,因为您将无需编写任何代码。这并不意味着要编写规范。它可能只是在您的脑海中。
杰里米

您将设计与编写代码区分开来,而这不是两回事。编写代码是低级设计。“让设计发生副作用……”通常不是正确的说法:无论如何,设计都是发生副作用。这尤其适用于原始要求不明确,不确定或灵活的情况,这是该领域的正常状态。
David Thornley

1

我不认为“工程”一词最适合描述软件开发,原因有两个:

  • 它传达了许多源自传统工程学科(例如工业,土木,海军或机械工程)的旧观念,概念和所谓的“黄金法则”。我说的是劳动分工,生产过程,质量标准中的规则……这些通常仅微不足道地适用于软件。

  • 它无法以令人满意的方式描述什么编程比其他学科具有更多的功能(而且我相信它还有很多很多不同的地方),以及与传统技术相比,开发人员每天必须面对哪些新挑战。工程领域。软件的虚拟性和非物质性在其中起着重要作用。

长期以来,软件开发一直被视为“只是另一门工程学科”。考虑到我们自评估以来就知道的软件项目的失败率,现在是时候该将开发视为一种全新的动物,将代码视为一种非常特殊的材料,并将应用程序生命周期视为一种完全不同的生产周期,并且应该绝望地尝试给他们应用旧食谱。


0

是的,人们应该能够运用标准和原则来获得一个体面的产品。造成客户困难的原因是客户的思维方式(仅仅是代码-更改的成本不应该太多),将产品的功能编码为机器代码(用口语/书面语言编码)以及量化“质量”。您对质量的定义不是我的。

这也是可重复性。采取一组要求并将其交给两个团队。当您可以解决同一件事时(无需团队互相交谈),您就可以接近工程学了。

工程的其他领域也将受到处罚,并进行严格的审查和签字。问责制。


0

不可以。软件工程不是工程。我认为,差异在于所涉及的创造力。例如,在土木工程中,几乎没有创造力。这是一件好事。

要建造一座桥,您需要制定一组规范(我需要从河的这一侧到另一侧获得这种数量的汽车)。

由此,我可以得出:

  1. 我需要的道路车道数(使用政府定义的标准计算方法);
  2. 我需要支持的负载(使用政府定义的计算)
  3. 我需要用来支撑这些负载的材料(使用我可以从许多不同的供应商处获得的标准材料,或者使用非标准材料,然后我必须证明它们具有正确的属性)。

然后,我必须让设计获得批准并由第三方(另一家公司)检查,以确保我正确地进行了计算。

然后,当桥梁实际建造时,工作将由合格人员以标准方式进行。他们将做以前已经做过数百次,也许数千次的工作。

不要误会我的意思,每个土木工程项目都是不同的,但是似乎每当我开发一个新的应用程序/网站时,事情都会有所不同。


0

是的,我想开发是工程的一个子集:

  • 软件工程包括初始规范(“在这里我们需要哪种软件?”),可以说是在开发之前
  • “工程”还可能包括例如定义质量保证流程,该流程当然与开发有关,但也可以说超出了“建筑”本身的范围。

Code Complete将“构造”定义为编码和调试(和注释)的代名词,同时还具有事先进行的详细设计以及之后的单元测试和集成测试的含义。第1章,欢迎使用软件构建(PDF),首先列出了整个软件开发生命周期中的许多主题(包括问题定义,软件体系结构,纠正性维护等),然后说:

如图所示,施工主要是编码和调试,但也涉及详细的设计,施工计划,单元测试,集成,集成测试和其他活动。如果这是一本关于软件开发各个方面的书,那么它将以平衡的方式讨论开发过程中的所有活动。因为这是一本施工技术手册,所以它偏重于施工,只涉及相关主题。如果这本书是狗,它会n在建筑上,在设计和测试中摇尾巴,在其他开发活动中吠叫。


0

软件开发是工程。

关于软件工程为何不符合工程师标准的其他观点:

有人说工程师从事为公共利益设计“事物”的工作-ICBM,坦克等是否属于公共利益?有些人会说“是”(好的进攻就是好的防守),其他人会说“不”。但是,我认为没有人会不同意设计下一代坦克瞄准系统的人是工程师。公共利益可能是主观的。无论如何,大量软件对公共利益都是有好处的,因此无论如何都没有意义。

其他人则说工程师设计他们没有建造的。我已经看到一些“机械工程师不焊接”的类型注释。我认为,机械工程师产生蓝图-详细设计,一些其他工具。如果机械工程师产生了一个蓝图并将其馈送到CNC机床上,这是否会使它们不再是机械工程师-因为是由机械代替人来实现?我认为源代码是提供给执行该实现的机器的详细蓝图,但我看不出这与将MechE提供给CNC机器的代码有何不同。现在我们有了3d打印机,这是否意味着机械工程师的终结?他们现在是机械开发商吗?

许可是我看到的另一个主题。目前只有少数司法管辖区许可软件工程师。(到目前为止)美国没有软件工程师的广泛许可(我认为只有德州才这样做)。有些人以此为理由声明不应将软件工程称为工程学。适用于软件工程师的PE即将面世。但是从更哲学的角度来看,仅仅是因为某些州立法者选择(或不选择)称呼软件开发工程对现实没有影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.