我坐在垫子前面,闲聊技术和美食。在此之前,我以他在Twitter上的烹饪照片而闻名,这让我羡慕郊区居民和他们的75,000 BTU炒锅。但是现在他是我新项目的测试对象,以查看它是富有成果还是浪费时间。
“目前,我正在为社交媒体管理平台开发微服务。”
“地质工程。大量露天开采,一些地下隧道工作。水电工程。土堤大坝是因为它们与地雷一起出现。”
他给我讲了一个有关他以前工作的故事。他的公司被雇用来分析不列颠哥伦比亚省的一个洞穴。块状洞穴是一种采矿项目,您可以在矿床下方挖隧道以使其不稳定。沉积物慢慢塌陷并将材料泄漏到隧道中,然后像Mat所说的那样“你只是印钱”。这里的大问题?该街区洞穴在竞争对手公司的有毒废物倾倒场下四分之一英里处。 “如果发生地震,废料会淹没矿井并杀死所有人吗?”他必须证明它是安全的。与他现在所做的工作不同。
至于另一个区别? “我的个人博客比大约1亿美元的采矿项目具有更好的安全性。”
软件工程是“真正的”工程吗?我们很多人自称为软件工程师。我们应该得到那个头衔吗?我们只是假装工程的想法吗?这是一个重要的问题,与所有重要问题一样,它经常在网上引发争论。一方面,您有一些人说我们不是工程师,因为我们不符合“工程标准”。这些人指出诸如《即将到来的软件启示录》之类的东西来证明我们没有将它们结合在一起。他们说,要想获得称职工程师,我们需要诸如认证,许可和严格设计之类的东西。
在马蹄铁的另一端,我们有像Pete McBreen和Paul Graham这样的人,他们说我们不是工程师,因为工程无法应用于我们的领域。工程师从事具有很多前期计划和严格要求的可预测项目。软件是动态的,不断变化的,不可预测的。如果我们尝试将工程实践应用于软件,那么软件的价格将是1970年的10倍,而且还停留在1970年。
很长时间以来,我一直拒绝称自己为软件工程师,并以其他人的名字来称呼他为poseurs。当时读的是一篇关于工程的短篇小说,这使我质疑我的核心假设。这是《无处可去的桥梁》,这是无代码守则的故事之一。作者认为,桥梁构建技术不适用于软件,因为软件客户可以更改他们的要求,而软件的重要性有时可以使其自身逆转。
真正工程师世界的可预测性是令人羡慕的事情。但是,我们的世界始终处在变化之中,物理定律每周都在变化。如果我们不能迅速适应不可预见的情况,那么唯一可预见的事件就是我们自己的毁灭。
从那时起,我意识到与所有这些论点有关的每个人都有一些事情。
在这些论点中,我读过的人中没有一个人是一个“真正的”工程师。充其量,他们在教室里接受过经典培训,但是我们都知道那看上去与现实不符。在这场辩论中,除了刻板印象之外,没有人可以合作。以前,其他人已经注意到我们头脑中的工程与现实之间的差异,最明显的是Glenn Vanderburg。他读了一些有关工程的书,以找出区别。但是我想走得更远。
如果我想知道软件开发如何与“真实”工程进行比较和对比,那么我就必须与“真实”工程师进行交流。但是考虑到这一点,我意识到了另一个问题:“真正的”工程师可以告诉我他们做了什么,但是他们却不能告诉我他们的工作与我的有何不同。正如我们在没有任何证据的情况下对真实工程进行全面的陈述一样,他们也可能在不了解软件的情况下对软件进行全面的陈述。即使他们在日常工作中使用一些软件,也不同于在工作中开发软件。只有同时完成软件开发和“实际”工程的人才能如实地谈论它们之间的差异。
这就是我着急寻找的:曾经是专业工程师,然后成为专业软件开发人员的人。我称这些人是跨界的,是两个世界之间的混合体。我采访了关于常见软件误解的17个交叉点,两个世界如何相互联系,我们是否可以如实地称呼我们从事的工程,以及不同领域之间可以互相学习和学习的东西。
我想在这里谈论很多,远远超出了一篇博客文章所能容忍的范围。我将文章分为三个部分,涉及我的三个核心主题。第一部分是关于“工程”一词的。是我们做的工程,可以诚实地称自己为工程师吗?
因此,首先要遵循一些基本规则:“软件工程”是一个实际领域。大多数人会同意,在航天器上运行的软件算作“实际工程”。辩论是关于其他领域的。网站建设人员是工程师吗?嵌入式硬件呢?我在研究中发现,捍卫“工程师”这个称号的人很少连贯地定义工程师是什么,通常将其归结为“工程师解决问题”。反对标题的论点倾向于更发达,关于超越标题的论点也是如此。
对“软件工程”的强烈反对来自两个地方。首先,有网守。起初,我们自称为程序员和“开发人员”,但自1985年以来,越来越多的人开始使用“软件工程师”的称呼。这种“标题膨胀”是导致强烈反对的原因之一:人们在不遵循某种形式的标准的情况下将其用作标题。
反弹的另一面来自90年代和00年代初期的新软件运动。诸如极限编程和敏捷之类的运动拒绝将标准项目管理技术应用于软件开发。对他们来说,工程学代表了旧的做事方式,与新的软件开发方式不兼容。软件工程是过去,失败的终结,而手工软件是未来。
这两种反弹都来自工程学的内涵。就看门人而言,这是他们认为我们尚未获得的积极意义。就手工工艺而言,这是他们认为我们不应该得到的负重行李。两者都是议程驱动的观点,它们基于他们希望软件如何发展的观点。这对于宣传很有帮助,但并不能帮助我们确定软件的当前位置。他们的议程基于他们不了解自己的参考点。没有人支持或反对软件工程,因为工程学曾担任过工程师。
让我们从人们对是否在工程中包含软件的普遍争论开始。大多数人对工程学有一个非正式的概念,但没有一个严格的定义。像色情一样,人们在看到色情内容时就会知道它是什么。当我要求人们明确列出使某项工程技术成功的因素时,以下是最常见的回答:
第一质量太宽泛:几乎所有人类职业都需要使团队中的事物变得复杂。它没有捕获“工程”。第二个特征过于严格:并非所有工程形式都会导致物理过程。特别是工业工程很少这样做。第三质量将在下一篇文章中讨论。
剩下三个要讨论的地方。这三个词都用来表示软件无法进行工程设计。 “与真正的工程师不同,我们不使用任何数学。与实际工程师不同,软件无关紧要。与真正的工程师不同,我们没有获得许可。”就像我们将看到的那样,这些都没有。
我可以直接解决这一问题。声称工程学涉及很多硬数学,而软件涉及的数学很少。这里的困惑来自我们对数学的误解。机械工程师使用的大部分数学都是连续数学。这是我们在连续域(例如实数)上工作的地方。微积分,三角函数和微分方程之类的东西都属于此类。这是美国大多数人在高中学习的东西,将其编纂为他们认为的“数学”。
在软件中,我们不使用这些东西,这导致我们不使用数学的观念。但实际上,我们使用离散数学,只处理非连续数字。这包括图论,逻辑和组合学之类的东西。您可能没有意识到自己正在使用这些功能,但是确实有。它们只是在软件中被内部化,以至于我们不认为它们是数学!实际上,大多数计算机科学都可以看作是数学的一个分支。每当您简化条件运算或通过算法提高性能复杂度时,您都在使用数学。仅仅因为没有积分并不意味着我们没有数学。
这与其余工程学保持一致。不同的分支以不同的方式使用不同种类的数学。工业工程师所关心的事情与机械工程师所关心的完全不同。仅仅因为我们使用不同的数学分支并不意味着我们没有在从事工程。
我不确定是什么首先使我对这个想法感到厌倦。可能是与现任设计冰川学传感器的前机械工程师Mike的对话。在交叉之前,他的最后一个项目是从事分类医疗器械工作的团队的一部分。大部分进展顺利,但随后出现了一个大障碍:
最让我们感到悲伤的是手柄,它是一根弯曲的金属丝,周围缠绕着一些塑料。是的,让电线正确弯曲,然后将塑料粘贴到这片闪亮的阳极氧化铝电线上。 […]那是在项目中花费了三个月的时间。
这并不是说这项工作并不重要。这确实意味着工程师在低后果或非安全性至关重要的事情上花费了大量时间。回想起来,这不应该让我感到惊讶。世界是广阔的,我们的产业是巨大的。是的,有人需要设计桥梁,但是有人也需要设计我们在日常生活中使用的所有小物品。就像许多软件一样,很多工程都涉及低风险,低后果。
如果要制造蓝牙扬声器的机壳(例如我桌上的扬声器)或为737的起落架进行组装,则两者之间存在巨大差异。您正在使用某些相同的工具,但是方法截然不同。 -内森(机械)
«但是仍然有些事情会导致生命损失!»是的,软件也是如此。 Intrado软件中的整数溢出导致数百万人的911停机几小时。一种偏见的算法不公平地将人们送进了监狱。就像“真实的”工程一样,还有大量的软件不会杀死人,但会导致数百万美元的损失。从亚马逊到无法玩的游戏,这一切可能都是。
这是我最常听到的主张:许可。做工程和当工程师是有区别的,就像人们在家中不做医生一样练习医学。也许可以进行软件工程,但没有许可证,我们不是软件工程师。在加拿大,除非获得认证,否则您甚至都不能称自己为“软件工程师”!
至少那是美国人民所说的。我与之交谈的几个欧洲人对美国制度说的完全一样。每个人似乎都认为自己的系统最坏,别人的最好。与我交谈的工程师中大约有一半没有执照,但仍被同行认为是专业工程师。他们没有“认证”,但是他们有技能。
在美国,您不需要执照即可从事任何类型的工程。您需要许可证才能成为“主要工程师”,也就是正式签署有效计划的人。但是,在总工程师职位下工作的工程师不需要经过认证,而且通常不需要经过认证。实际上,其中许多人甚至都没有经过工程师的正式培训。
这是根据许可证来决定工程的问题:许可证是一种政治和社会结构,而不是自然的事实。社会出于政治和技术方面的原因而采用许可。为此,让我们讨论一下美国的许可历史。
直到1906年,美国才有一个州要求任何项目都必须获得许可。怀俄明州是第一个实行许可政策的州,这完全是因为灌溉项目使预算不断增加。他们对经过认证的工程师进行理论分析,可以对项目成本进行更好的估算。所有五十个州花了40多年才加入。
这一切都意味着许可不是联邦政府的一部分:这是各州的要求。除其他事项外,许可证不一定在各州之间转让。如果您在德克萨斯州获得执照,则必须经过一个程序才能在加利福尼亚州称为“社区”执业。
尽管许可是成本超支的一部分,但由于完全不同的原因,许可如此迅速地扩张。法规是用鲜血书写的。当缺乏规范杀死人时,田地就变得规范了。在使用任意程序大规模实现这一目标之前,我们不太可能看到相同的软件许可要求。在软件导致人员死亡的地方,例如Therac-25和飞机事故,我们看到了更严格的规定。这是否会导致对软件工程师的许可要求更广泛,还有待观察。
您可能会辩称,不给我们许可证是不道德的。这是我很同情的一个论点。但这是一种规范性的论据,而不是积极的论据。通过说“我们应该获得许可”,您是在说世界应该如何。您正在尝试回答“我们应该坚持更高的标准吗?”这个问题。但这不是这里的问题。我现在不在乎我们应该去哪里;我只想知道我们现在的位置。我们是否为工程师与我们是否为优秀工程师无关。
总结:许可证之所以存在,是因为我们是社会的一部分并且具有法律要求,而不是因为许可证对于进行工程意味着什么至关重要。因此,尽管您可能希望使软件获得更多许可,但就许可问题而言,这并不会改变我们工作的本质。
这使我们回到了起点:没有任何可以指出的特质,并说“这是工程学,不是。”这是维特根斯坦游戏的一个标准问题:人类构造并不能准确地归入精确的定义。相反,诸如“工程”之类的东西是一系列相关的概念,在这里我们根据某事物与该家族中其他事物的相似程度来判断某事物是否属于。换句话说,“工程”就是“工程师的工作”。换句话说,如果有足够多的工程师说这是工程的话,那便成为工程。
考虑化学工程。化学工程不同于机械,土木或电气工程。化学工程师经常使用实验和迭代来创建大规模生产产品的过程。但是没有人会不同意它是工程学。化学工程始于1800年代后期,然后才获得州许可的工程师。如果化学工程现在开始,人们将拒绝称其为工程。他们拒绝是错误的。
一旦意识到这一点,我的面试过程就会发生一些变化。我没有问他们对某些工程主题的看法,我只是问他们指出空白。 “您认为软件工程实际上是工程吗?”
那不是我期望的答案。我以为我们不是工程师,实际上离工程师还很远。但是话又说回来,我从来不是一个“真正的”工程师。我不知道成为一名“真正的”工程师会怎样,因此无法将软件工程与其他形式进行比较。我没有经验。这些人做到了,他们认为软件工程是真正的工程。
从某种意义上说,甚至产品所有者和项目经理都是工程师[…],每个人都是某种工程师,是某种工程师。 -凯特(化学)
与“软件”工程相比,使用“实际”工程没有任何意义。展望未来,我将改用术语“交易”工程。
我将以略有不同的方式回应。并非每个软件开发人员都是软件工程师,就像并非每个从事建筑工作的人都是工程师一样。工程师是一组非常具体的技能。 […]软件[工程]是技能加理解力,所有流程和生命周期以及后果以及应注意的所有事物,并且应避免。 -黎明(机械与化学)
也就是说,许多交叉点还增加了一个附加条件:软件工程是真实的工程,但是许多编写软件的人并没有从事软件工程。这不是他们的问题,而是我们所在的领域的问题:我们没有足够丰富的词汇来谈论这些开发人员的工作。并非每个从事电力工作的人都将成为一名电气工程师。许多将是电工。这没关系。电气工程是电气专业领域中非常狭窄的技能,很多人在该领域还具有其他重要技能。但是我们可以互换使用“程序员”,“软件工程师”和“软件开发人员”之类的东西。软件工程师和软件开发人员有什么区别? 1个
有人提出“软件工匠”一词。该术语来自Pete McBreen撰写的《软件工艺:新命令》一书。他在书中指出,软件是一种工程,具有更多自由形式的创意和灵活性。我们不是线工人,而是工匠,艺术家,对我们的手工艺和各州的灵活性感到自豪的人。正如他所说:
软件开发与未知有关。软件的生产过程非常容易-只需复制磁盘或CD。软件工程的隐喻之所以失败,是因为我们理解生产是一项机械任务,远胜于我们了解设计是一项智力任务。 -软件工艺
很多人问我,为什么我这么关心这个项目。软件是否是“真正的”工程,为什么如此重要?我们为什么不能只说“软件就是软件”?因为这些误解。人们对工程的外观有刻板印象。由于软件看起来不像是刻板印象,因此他们认为我们与工程技术完全不同。工程学科没有什么要教我们的。我们正在突破原始的道路,没有更广泛的历史来指导我们。
相反,如果我们在进行工程设计,那么我们将具有里程碑意义。 我们可以有意义地比较和对比我们作为软件工程师所做的工作与其他人作为传统工程师所做的工作。 我们可以调整他们的见解,并注意他们的陷阱。 我们可以利用我们的社会知识来开发更好的软件。 我相信McBreen所说的关于软件的一切都是相当合理的,它可以预测事物有多难,以及它是如何强烈地个人创造的。 他弄错的是,假设工程不是这种方式。 工程学比他想象的要丰富得多,更具创造力和艺术性。 但是,当然,他的观点并不完美:毕竟,他不是传统工程师。 这是我的最后决定。 这是我的信念 ......