可以将软件开发视为工程学吗?如果不是,那么要成为合格的工程学科缺少什么?与此相关的是Stack Overflow上有关程序员和软件工程师之间差异的问题。
卡尼基·梅隆大学设有软件工程学院,该学院规定并维护CMMI标准。这会把开发变成工程吗?
可以将软件开发视为工程学吗?如果不是,那么要成为合格的工程学科缺少什么?与此相关的是Stack Overflow上有关程序员和软件工程师之间差异的问题。
卡尼基·梅隆大学设有软件工程学院,该学院规定并维护CMMI标准。这会把开发变成工程吗?
Answers:
是软件开发工程吗?如果没有,那么要获得资格就缺少什么?
是的,软件工程是一门工程学科。
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(或任何其他过程框架或方法论)只是一个工具-使用它不会使您神奇地从开发人员升级为工程师。但是,在我看来,不遵循某种程序是项目不是工程项目的标志。
另外,您对软件工程课程/证书有何看法?
它只是与其他人一样多的价值。有有用的课程,有没有用的课程。有很有价值的证书,而且这些证书不值得在其上打印纸张。有很多因素,从谁认可或认可该课程,或者谁向您当前的工作行业颁发证书,到您当前的工作以及您想去的地方。
来自典型的工程背景,但从事软件开发工作,我看到了两个世界之间的巨大相似之处。除了对工程的确切定义之外,我在实践中看到开发软件与开发物理产品并没有太大的区别。至少我认为应该没有太大不同。
无论是设计飞机还是软件应用程序,您都需要:
我在另一个答案中的某个地方读到,设计软件是不同的,因为在开始编程之前您并未设计所有内容。实际上,在某种程度上,设计物理产品时也是如此。设计,原型制作和测试是一个迭代过程。
同样,当软件项目规模扩大时,定义清晰的子系统,组件和接口也变得越来越重要,这也类似于设计复杂的产品(例如飞机)。
这就是为什么我认为开发软件属于工程技术。
我认为确实存在诸如软件工程之类的东西。
工程涉及将科学知识系统地应用于解决问题的方法。今天要解决的问题的复杂性与电气工程师创建电路的过程或化学工程师设计制造工艺的过程或机械工程师创建设备所解决的问题没有什么不同。
还有一种应用现有计划(在这种情况下为开发)的动手方法,这一事实与在其他领域中其他人(例如建筑工人)执行那些计划的事实很相似。
的确,大多数开发人员也承担软件工程任务,而且我们的教育通常不是编程,而是软件工程。因此,我们会弄脏双手,而土木工程师则不会。
但是,应用编程语言和程序的能力并不能使工程师成为一名工程师:我遇到了很多对自己当前代码之外的复杂性和问题缺乏真正了解的开发人员。
关于您有关CMU的问题:应用标准或惯例(例如CMMI)不会自动将一个人的工作变成工程学。但是,存在进行科学研究以提供新实践的组织这一事实再次表明存在诸如工程学的事物。
不,这不是工程。我们不是那么科学,我们也不必通过任何这些状态工程测试。实际上,由于缺乏测试,在某些地方称自己为软件“工程师”是非法的。
恕我直言,“软件工程”一词的创建是为了更好地描述开发人员的工作范围,而不仅仅是成为“程序员”(它具有某种机械过程的色彩,几乎没有思想或创造力)。
就个人而言,我更喜欢将开发人员比作“工匠”,这是由务实的程序员提倡的。
从历史上看,人们一直试图将软件创建与制造相提并论。我认为Jack Reeves在他的文章《什么是软件设计》中抹黑了这个想法。
从Wiki:
工程学
软件工程是在软件的开发,操作和维护以及对这些方法的研究中应用系统,规范,可量化的方法的应用;即工程学在软件中的应用。
软件开发
软件开发是产生软件产品的一系列活动。软件开发可能包括研究,新开发,修改,重用,重新设计,维护或产生软件产品的任何其他活动。[1]
特别是软件开发过程的第一阶段可能涉及许多部门,包括市场营销,工程,研发和总管理。
因此它们非常相似,也可能意味着相同的意思。
从Dictionary.com: 恩·GI·NEER·ING /ˌɛndʒənɪərɪŋ/
–名词1.在发动机,桥梁,建筑物,矿山,船舶和化工厂的建造中实际应用纯科学知识(如物理或化学)的艺术或科学。
我会说,创建软件是数学和计算机科学的实际应用,并且视应用而定,可能是任何其他数量的纯科学的应用。
[编辑] FWIW,我不称自己为软件工程师,而是软件开发人员,因此我对此不承担任何个人责任。
是软件开发工程吗?
不会。成为工程师意味着您的项目遵循因果时间表-您遵循建筑规范,因此您的建筑物不会倒塌(或者至少不会因此而受到指责)。编写软件时,您可以遵循所有遵循的准则(有很多不同的准则可供选择!),它仍然可能会挂起/崩溃/给出错误的答案(除非您参与编写可验证程序的范围非常小) -无效的功能语言)。
我认为工程师(机械,结构,软件)是根据所理解的需求以及对什么以及如何应用材料来适应需求的理解而设计产品的人。
例如,您可能经常会看到结构工程师查找不同强度的钢并应用物理规则来计算所需的材料以及应如何实施。结构工程就是一个很好的例子,因为在构建之前,您总是会得到要构建的蓝图(规格)。软件并不总是这样。
对我来说,软件工程师和程序员的不同之处在于,工程师能够为编写任何代码之前将要生成的内容建立规范,而程序员要么只是根据其他人的规范编写代码,要么就是其中的一个狂野的西部程序员,他们编写的代码没有规范。同样,工程师也有他的学位。
我将建筑工人和结构工程师之间的区别比喻为程序员和软件工程师之间的区别。
需要说明的是,我只有大学文凭,所以不能称自己为工程师。
我不认为“工程”一词最适合描述软件开发,原因有两个:
它传达了许多源自传统工程学科(例如工业,土木,海军或机械工程)的旧观念,概念和所谓的“黄金法则”。我说的是劳动分工,生产过程,质量标准中的规则……这些通常仅微不足道地适用于软件。
它无法以令人满意的方式描述什么编程比其他学科具有更多的功能(而且我相信它还有很多很多不同的地方),以及与传统技术相比,开发人员每天必须面对哪些新挑战。工程领域。软件的虚拟性和非物质性在其中起着重要作用。
长期以来,软件开发一直被视为“只是另一门工程学科”。考虑到我们自评估以来就知道的软件项目的失败率,现在是时候该将开发视为一种全新的动物,将代码视为一种非常特殊的材料,并将应用程序生命周期视为一种完全不同的生产周期,并且应该绝望地尝试给他们应用旧食谱。
不可以。软件工程不是工程。我认为,差异在于所涉及的创造力。例如,在土木工程中,几乎没有创造力。这是一件好事。
要建造一座桥,您需要制定一组规范(我需要从河的这一侧到另一侧获得这种数量的汽车)。
由此,我可以得出:
然后,我必须让设计获得批准并由第三方(另一家公司)检查,以确保我正确地进行了计算。
然后,当桥梁实际建造时,工作将由合格人员以标准方式进行。他们将做以前已经做过数百次,也许数千次的工作。
不要误会我的意思,每个土木工程项目都是不同的,但是似乎每当我开发一个新的应用程序/网站时,事情都会有所不同。
是的,我想开发是工程的一个子集:
Code Complete将“构造”定义为编码和调试(和注释)的代名词,同时还具有事先进行的详细设计以及之后的单元测试和集成测试的含义。第1章,欢迎使用软件构建(PDF),首先列出了整个软件开发生命周期中的许多主题(包括问题定义,软件体系结构,纠正性维护等),然后说:
如图所示,施工主要是编码和调试,但也涉及详细的设计,施工计划,单元测试,集成,集成测试和其他活动。如果这是一本关于软件开发各个方面的书,那么它将以平衡的方式讨论开发过程中的所有活动。因为这是一本施工技术手册,所以它偏重于施工,只涉及相关主题。如果这本书是狗,它会n在建筑上,在设计和测试中摇尾巴,在其他开发活动中吠叫。
软件开发是工程。
关于软件工程为何不符合工程师标准的其他观点:
有人说工程师从事为公共利益设计“事物”的工作-ICBM,坦克等是否属于公共利益?有些人会说“是”(好的进攻就是好的防守),其他人会说“不”。但是,我认为没有人会不同意设计下一代坦克瞄准系统的人是工程师。公共利益可能是主观的。无论如何,大量软件对公共利益都是有好处的,因此无论如何都没有意义。
其他人则说工程师设计他们没有建造的。我已经看到一些“机械工程师不焊接”的类型注释。我认为,机械工程师产生蓝图-详细设计,一些其他工具。如果机械工程师产生了一个蓝图并将其馈送到CNC机床上,这是否会使它们不再是机械工程师-因为是由机械代替人来实现?我认为源代码是提供给执行该实现的机器的详细蓝图,但我看不出这与将MechE提供给CNC机器的代码有何不同。现在我们有了3d打印机,这是否意味着机械工程师的终结?他们现在是机械开发商吗?
许可是我看到的另一个主题。目前只有少数司法管辖区许可软件工程师。(到目前为止)美国没有软件工程师的广泛许可(我认为只有德州才这样做)。有些人以此为理由声明不应将软件工程称为工程学。适用于软件工程师的PE即将面世。但是从更哲学的角度来看,仅仅是因为某些州立法者选择(或不选择)称呼软件开发工程对现实没有影响。