什么是“真正的工程师”?对我来说真的很有趣,看看这对你来说是什么。土木工程师是真正的工程师,是计算机工程师、机械工程师、化学工程师还是“真正的工程师”?根据你的说法,什么时候有人真的是工程师?
首先,程序员和你说的软件工程师不一样。其次,没有程序员“给自己”一个软件工程师/架构师/开发人员/什么的头衔。头衔取决于工作,你申请那些工作,你不给自己。除非你是自由职业者。每个头衔/工作都涉及不同类型的专业知识/任务/角色/职责,这就是为什么有几个术语的原因。第三,软件工程师和“真正的”工程师之间没有区别。顾名思义,软件工程师就是工程师。它与机械工程师、电气工程师、土木工程师、航空航天工程师、农业工程师、化学工程师、生物医学工程师等没有什么不同。最后,软件架构师与架构无关,只需谷歌即可。 *掌心*
我觉得我可以在一定程度上自信和客观地回答这个问题。我是一名特许建筑师,我以设计建筑为生,并且已经这样做了 30 多年。然而,我在很小的时候就对计算机感兴趣。我在 15 岁左右开始“编程”。我没有构建很多完整的应用程序,当然也没有商业化。我所做的大部分工作都是编写脚本。我创建了实用程序脚本以使我的 CAD 工作更轻松。大约 15 年前,我开始参与软件开发。我在软件论坛上与一个人取得了联系,他希望有人帮助开发 SketchUp 的渲染引擎。我编写了渲染引擎预设脚本(而不是编程本身)并设计了用户工作流程和界面。这最终演变成一个成熟的商业应用程序。我为此做了同样的事情,并且从那以后一直这样做。我还提供客户支持和一些文档。它是在我的业余时间完成的。我和十几个程序员一起工作过。我还有几个其他的程序员朋友,所以我喜欢认为我对他们的工作以及行业(某些部分)如何运作有合理的把握。有一些相似之处。基础是分析问题、机会和限制,明确定义功能、优先级以及人们与最终产品交互的方式,并尝试在易用性、效率和有效性方面得出最佳结果。两者都涉及设计和开发。时间、成本和了解与最终产品交互的人的行为都非常重要。广泛的经验和横向思维对于实现最佳结果非常有益。您需要花时间详细分析和理解需求和上下文,并将它们分解为单独的任务/操作/操作。软件设计的某些方面涉及工作的不同领域/方面之间的协调。它可以是一个协作的努力,以获得真正的好结果。完美的功能和高效的美丽最终结果可以使一切变得不同。虽然有许多显着差异。a) 建筑业受到了更多的监管。它涉及不同学科团队的协调,他们的教育是高度结构化和规范的。最终产品是由其他人制造的,因此架构有大量的合同组件。这些最终可能会改变最终产品。b) 建筑专业人士的角色受到专业审查。我们有代表行业的专业团体,我们有行为守则,我们必须持有专业赔偿保险。这强制执行最低标准并确保能力。如果我们的工作有缺陷或做得不好,人们可以起诉我们。相比之下,软件行业就像狂野的西部。它与我们必须努力的专业学科完全不同。软件可以(通常有效地)由孩子们在他们的卧室里构建,根本没有经过正式培训。c) 创建软件对智力的要求更高,报酬也更高。在我的职业生涯中,我设计了一些复杂的建筑,并与一些非常棘手的问题作斗争,但没有什么比尝试处理复杂的代码或脚本部分更让我头疼的了。一些与我共事过的程序员不会因为我作为一名运营设计办公室的特许建筑师所赚取的收入而起床。d) 架构在竞争优先级、法规、变量、常量和冲突方面要复杂得多。如果说开发软件就像对付一个不合作的少年,那么设计建筑就像对付一个吃糖的 4 岁孩子。e) 软件仍然是作为实现功能目的的特定手段而创建的。建筑物主要是投机商品。为软件付费的人关心质量。我相信一些参与软件开发的人会争论这一点,但与创建建筑物相比,它是有效的。但是,编程与软件架构可能有很大不同。后者可能涉及从不同的应用程序中获取构建块并编写代码将它们链接在一起。由于许多软件使用“模块化”方法,两者之间的界限变得有些模糊。我认为,因为坐在卧室里的任何人都可以称自己为程序员,所以使用“软件架构师”或“软件工程师”等头衔可以使该角色具有一定的专业水平,以提升合格的经验丰富的个人,以认可他们的资格和经验.与建筑行业相比,他们是“专业人士”,因为他们不是业余爱好者,但不是专业人士,因为他们的角色不受知名专业组织的管理或监督。以医学专业为例。这当然不是贬义的。我遇到的每一位程序员/软件工程师都是一个非常有能力、有才华的人,他们可以很容易地在一个既定的职业中工作,只是他们的工作范围超出了公认的集中管理组织的职权范围。
人们给自己起名是为了让自己听起来更重要,对自己和他人来说更令人印象深刻。雇主给员工冠冕堂皇的工作头衔,让他们对自己和客户来说听起来更重要和更令人印象深刻。有软件工程师和软件架构师。但是,当人们编写代码时,他们是在进行编程,而不是架构工作。当人们在不应用科学原理和不关注设计的情况下编写代码时,他们就不是在做工程。架构师绘制大图来定义可以满足要求的解决方案。他们和工程师开发解决方案替代方案、创建模型和原型、评估标准,并从中选择或指导选择,为组件做出与购买决策,并详细设计解决方案。工程是“创造性地应用科学原理来设计或开发结构……或单独或组合使用它们的工作;或在充分了解其设计的情况下建造或操作相同的结构;或预测其在特定操作条件下的行为; 所有方面都考虑到预期的功能、运行的经济性以及对生命和财产的安全。”信息技术架构是制定有条理的信息技术规范、模型和指南的过程,……遵循正式和非正式的信息技术解决方案、企业和基础设施架构流程。美国劳工部有标准职业分类代码。这些包括:15-1211 计算机系统分析师说明性示例:应用程序分析师、数据处理系统分析师、信息系统分析师、系统架构师15-1241 计算机网络架构师15-1243 数据库架构师15-1251 计算机程序员说明性示例:应用程序程序员、计算机语言编码器、IT 程序员、系统程序员15-1252 软件开发人员说明性示例:计算机应用程序工程师、计算机系统工程师、移动应用程序开发人员、软件应用程序架构师、软件工程师、系统软件开发人员15-1253 软件质量保证分析师和测试员说明性示例:应用程序测试员、软件质量保证技术员、软件质量控制专家、软件质量工程师、软件测试工程师15-1254 网络开发人员说明性示例:Intranet 开发人员、Web 应用程序开发人员、Web 架构师17-2061 计算机硬件工程师