您如何解释软件工程比其他工程领域更加专业?[关闭]


9

我与一个坚持认为任何优秀软件工程师都可以使用任何软件技术进行开发的人员一起工作,并且对特定技术的经验与开发优秀软件无关。他的类比是,您不必了解正在制造的产品,也不必知道如何构建生产该产品的装配线。

从某种程度上来说,赞美是“如果您擅长,您就擅长于一切”,这也是一种赞美,但是在某种程度上,它也使专业变得轻描淡写,如“ Codemonkey,使用吊索码”。没有某些软件框架的经验,您可能会很快遇到麻烦,这很重要。

我试图解释一下,但是他没有买。关于此的任何不同观点或想法都有助于解释我在一件事上的经历,并不能转化为所有事物?


7
如果您要投反对票,您至少可以评论一下原因吗?特别是因为您的输入可能有助于重新表达/重新定位问题。
Spencer Kormos 2012年

11
首先,这是一个咆哮,而不是一个问题,第二个它是一个有缺陷的假设咆哮,这需要被否决关闭。

6
@JarrodRoberson我认为这里有一个合理的问题。它要求一个好的解释,而这要求解释为什么有人认为软件工程比其他工程领域更加专业。
maple_shaft

7
@SpencerK您的问题是“一些随机的家伙做了一个不好的类比,我该如何回应”,好吧,这并不是一个真正的问题。只需提供可靠的证据和/或证明他的立场的参考资料,您就不需要在这里证明自己了。
yannis 2012年

5
-1,因为我不同意您的前提。软件工程不比其他工程领域更加专业。它们可以高度专业化也可以泛化。一个好的机电工程师可能不是一个好的生物医学工程师。另一方面,好的电工可能会同时在房屋和汽车上工作。
zzzzBov 2012年

Answers:


23

但在某种程度上,它也使该行业变得无足轻重,例如“ Codemonkey,去吊索代码”。

我反而相反。优秀的软件工程师将具有概念化,架构和设计与技术无关的高质量软件的能力。这种情况的另一端是.NET或仅Java或PHP的“ codemonkey”,擅长给出方向或规范并利用该工具来实现软件。

软件工程师不必一定要精通所有工具,但是应该对其中的大多数,它们带来的功能以及最适合给定项目的功能有很高的了解。 。我希望代码猴子只会精通他们在特定工具方面的专业知识。

我不会相信不知道如何完成技工工作的福特工程师。

尽管如此,软件工程仍然是这些领域之一,在许多情况下,我们预计我们将同时成为工程师,建造者和机械师。


8
我还要强调了解概念和原理而不是语言和工具的重要性。
奥德

+1我的其中一个烦恼是说“我是C#开发人员...”的人。然后,只需喝些助剂,并接受MS的任何福音。十年的编程我已经学习了11种编程语言,并且每一种都对我用其他语言编程的方式进行了重大改进。学习软件工程!不是两年后就会消失的平台。
蒂莫西·鲍德里奇

+1供福特工程师参考。我以前从未以这种方式考虑过软件工程师与程序员。
大林Seivewright 2012年

程序员是工程师的子集,而不是相反。
Spencer Rathbun 2012年

11

我在某种程度上同意与您一起工作的人。优秀的软件工程师应对设计和软件生产的一般原则。实际的语言和框架是细节。

但这并不是要轻而易举地选择新的语言和框架。总是有一条与之相关的学习曲线,但重点是曲线,而不是优秀软件工程师的垂直墙。

优秀的软件工程师在多种不同的工具和技术方面拥有广泛的经验。如果他不这样做,他怎么能为工作选择最好的工具?为了把旧的陈词滥调推向一个知道如何使用锤子的人,每个问题都像钉子一样。即使您不是螺丝刀方面的专家,也要对它们有个通行的了解,这样您才能认识到螺丝钉不只是一个有趣的指甲。


“一位优秀的软件工程师应对设计和软件生产的一般原则。” 生产嵌入式控制系统和Web应用程序几乎完全相同,对吗?
Marcin 2012年

@Marcin:是的,有些原则是。我的意思是,例如,使用C或汇编器设计嵌入式系统时,即使工具不同,也采用了相同的原理。
JeremyP 2012年

这些工具没有什么不同,它们处理非常相似的问题域。这就是为什么这完全没有帮助的原因。
Marcin 2012年

1
@Marcin:您显然不是用汇编语言编写的,还是没有用C语言编写的。我向您保证,尽管有一个普遍的误解,但C不是汇编语言,并且这些工具中的编程与C和Ruby中的(例如)编程一样。
JeremyP

1
@Marcin,当然,保龄球只是敲掉所有销子的问题。真是小菜一碟。尽管Web编程和嵌入式编程可能共享一些高级原则和最佳实践,但真正支配日常工作的是控制这些实践的实施的约束。尽管您最终可能会像嵌入式工程师一样对Web程序员进行再培训,反之亦然,但它们并不是可替代的。
查尔斯·格兰特

5

TLDR版本:其他工程学科需要了解他们正在使用的材料(例如,架构师需要知道他们在设计中使用的材料可以承受多少负载)。我们用于软件工程的语言和框架有一定的局限性,我们需要熟悉它们才能有效地针对它们进行设计和开发。

我们的工作分为两个不同的阶段。首先是概念设计。那是高层和低层的系统设计(例如,使用UML)。从理论上讲,高层设计可以与实现无关(尽管有时高层设计必须考虑数据库平台,现成的中间件等具体细节)。低级设计有些棘手。您可以设计业务逻辑的细节而无需将基础结构细节放入其中,并且从理论上讲,这些可以与平台无关。

第二阶段是实际编程。虽然有些人将编程视为一种构造,但其他人(包括我)则认为编码仍然是一种设计学科(在PPP中,鲍勃·马丁(Bob Martin)提到了一篇文章,作者对此效果提出了很好的论据,但我对此没有理解)我是我,但我将通过该文章的链接来更新此答案)。实际的构造是在您点击编译时发生的,实际上是免费的。

就像架构师必须考虑到他所使用的建筑材料的抗拉强度和抗压强度一样,软件工程师也必须在编写代码时知道他们要开发的平台的功能。我认为,如果不同时考虑平台选择,那么低级系统设计就不会非常有效。


5

作为从软件工程学位课程毕业的人,我可以说您的同事是部分正确的。优秀的软件工程师专注于应用数学,统计学,计算机科学和领域经验来构建系统。软件工程师使用的方法通常与技术和语言无关,这些工具与基本原理无关紧要。

就是说,您的同事的类比是有缺陷的。了解领域问题对于任何工程学科都是必不可少的。如果您不完全了解要解决的问题以及要满足的人员,那么为他们的问题建立最佳解决方案将变得越来越困难。

归根结底,软件工程(以及任何工程学科)都涉及应用许多概念来解决问题。如果您经常使用相同的工具,那么您将变得更加熟练。您可以更容易地识别出那些工具可以解决的问题,使用这些工具的风险或陷阱,然后使用这些工具来构建解决方案。


基本原理可以有很大的不同。
Marcin 2012年

1
@Marcin不,他们没有。如果技术改变,计算机科学也不会改变。数学不会改变。统计信息不会改变。需求分析,系统设计,配置管理实践,验证和确认策略,质量原则也都没有...
Thomas Owens

实际上,“需求分析,系统设计,配置管理实践,验证和确认策略,质量原则”确实会在问题域之间发生变化。如果您不认识这一点,那么您可能会在一个您不知道的域中做非常非常糟糕的工作,因为您太自负了,无法意识到自己所不知道的。同样,适用的数学变化很大,但我敢打赌,您想像您也了解数学的所有知识。
Marcin 2012年

@Marcin我从事过从嵌入式系统到Web应用程序的所有工作。他们变化不大。良好要求的质量不会因领域而改变。用于设计系统的工具不会更改。您衡量和实现高质量系统的方式没有改变。
Thomas Owens

1
是的,您是对的,世界上每个软件项目都是相同的,并且您已经找到了如何管理每个项目的方法。您可能应该写一本书,解释编写和管理所有软件的一种真实方法。
Marcin 2012年

4

他的类比是,您不必了解正在制造的产品,也不必知道如何构建生产该产品的装配线。

几乎可以肯定这是不正确的。专业的生产工程师确实需要对他们所关心的产品有很多了解。

在任何情况下,机械工程课程的毕业生都是一个更好的类比:即使每个人都以相同的技巧开始(在机械和软件方面),但没有人是“机械工程师”,而是专门研究他们建造的东西。同样,软件开发也具有非常不同的子字段。

回到装配线的类比,每种产品的每个装配线都是不同的,并且不同类型的软件开发需要不同的方法-您不会像制作游戏一样来构建安全软件。


1
无论软件产品如何,相同级别的软件构造都是相同的。我们只称其为方法论而不是装配线,但从概念上讲,它们是同一件事。

1
@JarrodRoberson号。装配线不统一,方法通常不适用。
Marcin 2012年

2
我同意Marcin的观点,您必须具有某种产品的知识才能组合该产品的装配线。您必须能够准确地选择用于获得正确最终结果的工具。在软件中,方法论将是特定的工具或任务。如果您的一项任务是完成一项特定任务,那么您可能不需要全部知识。但是,那时您是操作员,而不是工程师。选择正确的方法论来形成装配线,使您像其他工程师一样成为一名工程师。它不再专业化或不同。
RJay75

2

学习曲线涉及不同的专业。我说的是嵌入式/实时编程,Web应用程序编程,系统/ OS编程,胖客户端编程,移动开发等之间的差异。

某一种编程专家的人可能由于不同的需求而无法立即过渡到另一种编程。当然,软件工程师具有这样做的基础,但是专门从事某项工作需要花费时间。


1

我同意您的同事提出的前提,尽管我会提出警告。

在对新技术进行了一些学习之后,优秀的软件工程师将能够在任何技术中构建好的软件。

一开始可能会有一些不明显的怪癖,但是好的软件工程师很快就会学到这些。

我认为他的真正意思是仅仅因为开发人员具有2年的C#扎实的经验,并不意味着有Java背景的更好的软件工程师,他从来没有做过C#,否则就不会来学习C#,并且很快成为比第一个人更好的C#开发人员。

换句话说,您不必折衷Java的工作,只是因为他在C#中“花了点时间”。


我认为这是给定的,但实际上与投资回报率有关。如果我想在6个月内发布一个C ++项目,我不会雇用具有Java经验的工程师。但是,如果您有一个需要在6个月内完成的Swing项目,则初级服务器端工程师可能仍然有资格。
Spencer Kormos

@SpencerK完全同意。这取决于您需要多快的投资回报率。如果您有更长的等待时间,那么更好的软件工程师应该“赢”。
ozz 2012年

另外,如果是你,那么要减去!
ozz 2012年

1
不,不是我。我不反对为什么不投反对票。我有比这更好的礼貌!
Spencer Kormos

1

恰当的例子:您认为对拥有专业经验至关重要的软件框架很可能 10年前就不存在,或者如果发生了重大变化。我们职业的本质使我们不可能专攻整个职业。根据您各自的技能水平,与从未使用过您特定框架的人员相比,您的专业化可以为您提供1-6个月的优势。之后,您就可以与之匹敌。


2
真?我认为您会期望安全工程师能够在6个月内完成并编写游戏代码,并且与经验丰富的专家没有区别。
Marcin 2012年

我同意Marcin,这不仅是编程语言或平台的知识。我曾在两个不同的领域工作过,并且在每个领域都花了几年时间:这需要一段时间,直到您熟悉一个领域内真正的专业和高产。当然,作为一名经验丰富的软件专家可以加快速度,但我认为需要2、3年而不是6个月。
乔治

1

我在一家直升机公司工作,这里的航空工程师会根据他们可以使用的飞机类型而有所专长。他们需要“类型等级”。从技术上讲,他们可以从事从Robinson R22到Jumbo Jet的任何工作,但必须经过转换培训。

我认为这与软件工程非常相似,只是“转换培训”对软件工程师而言是非正式的。


1

与画家交谈时,您能告诉他雕刻没有问题吗?

学习新的语言或特定领域的新知识类似于主要处理铅笔和墨水,学习绘画的艺术家(反之亦然)。这就是大多数其他答案在谈论的内容,朋友的部分正确之处-适用许多相同的概念。

但是教导画家如何雕刻3D对象或写小说(两种形式的艺术表达)完全是另一回事。这就是您的观点。

基于Web的软件与桌面软件需要完全不同的思维方式。应用于游戏和工作环境时,两者完全不同。我怀疑在OS或集成系统上工作还需要以不同的方式思考(但是我没有使用它们的经验)。我毫不怀疑,还有其他领域也需要不同的思维方式。

摘要和示例:

“艺术”包括雕塑,小说,漫画和绘画。技能重叠包括:

  • 身体形态和颜色理论:雕塑,漫画和绘画
  • 文字交流:小说和漫画

... 等等。但是如上所述,漫画家的第一部小说不太可能做得好。他们需要换个角度思考。

同样,在编程/软件工程的不同领域中也存在重叠,但是其中大多数差异太大,以至于无法直接使用。例如:

  • 算法:OS /集成系统,游戏以及您经常需要针对速度或内存进行优化的其他地方。网站开发很少
  • 设计:在Web开发中无处不在,但是在没有UI的集成系统中不是很重要。
  • 客户端/服务器软件:“不信任客户端”的心态,在某些领域中不一定存在(单人游戏和其他独立台式机软件,我承认现在这种情况很少见)。

我一直认为,编程和软件设计与科学或工程学一样,都是一门艺术。我想这是它们相似之处的另一个例子。
Izkata 2012年

哦,在有人用“算法”咬我之前,我正在谈论高级CS-y。斐波那契堆和Timsort是其中两个。(我几乎从未在那种算法复杂性的水平上工作过,所以我对该主题
一无所知

0

所有筑路工人都能在工作现场使用所有设备吗?答案是不。他们知道某些机器,并且很可能熟悉其他机器。对于软件工程师而言,情况也是如此,因为您每天都在与他们一起工作,所以会知道x种语言和框架,但是如果没有经过一些培训,就不应期望他们知道其他人的确切操作。就像雇用手提凿岩机工人并分配给他驱动水泥搅拌机的任务一样。

编程语言和框架只是软件工程师工具带中的工具。由于经验,您会比其他一些工具更了解。最终,最好的工具是了解计算的核心概念和原理。选择语言和框架只是选择要在哪个螺丝上使用哪个螺丝刀。


2
这是一个不好的类比,他们谈论的是工程技术,而不是建筑工人,即使他们在问题中混用了隐喻。为此,所有修筑道路的土木工程师都有望能够修筑任何类型的道路!就像任何将沥青拖到施工现场的自卸车司机一样,也应该能够驾驶任何类型的自卸车。

1
@JarrodRoberson我同意这是一个糟糕的类比,但是我不确定您的土木工程师的主张会更好。当然,任何土木工程师都应该能够阅读任何道路的计划。但是,如果您要建造一条跑道或一条冰路,是想雇用已经花了多年时间修建高速公路的人,还是想要一个在跑道或冰道方面具有特定经验的人?
Caleb 2012年

0

这种事情在我工作的地方经常发生。

我喜欢将我妻子的叔叔的职业与汽车修理工相提并论。

专门研究梅赛德斯,他可以将自己的知识应用到其他品牌的汽车上,而且他确实做到了-其中有些汽车非常稀有,但这并不意味着他可以立即修理X,因为您说它正在发出噪音。

我用几种语言编程,但这并不意味着我知道为什么每次更改选项卡时MacBook上的Safari都会重新加载页面(今天的怪异调用)。我将尝试找出原因,但由于计算领域巨大,因此我不知道要怎么做。

在这两种情况下,在花了一些时间研究我们各自的领域之后,我们可能都能得出答案,但是却不能在人们认为的十秒钟之内得出答案,因为“但您却与汽车共事”或“但您却与计算机共事”。

人们是否会向当地医生说这样的话(例如“我头疼我患有什么病?”)-我敢打赌他们这样做是因为大多数人真的不了解任何一项职业都比他们的即时期望值还多说的职业。

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.