软件开发和软件工程师的区别在哪里?答案取决于你问谁!两者并没有官方说法的区别,而是公司根据自己的经验和知识来定义的。并且,评判过程中更让人困惑的是,地区差异,教育程度也会被界定为区别。
不过,还有一种方法,我们可以通过对各种数据来源进行评估和分析得出结论。
根据计算机科学学位中心(Computer Science Degree Hub)的说法,软件开发人员和软件工程师是两种不同的角色:
软件工程是指:应用工程原理来创建软件。软件工程师通过连接客户的需求与适合的技术解决方案,参与软件开发的生命周期。所以,他们系统地开发来提供特定功能。总的来说,软件工程是运用工程概念来开发软件的。
另一方面,软件开发人员是程序创造性背后的驱动力。软件开发人员负责整个开发过程。他们要和客户合作,来创造设计理论。然后,让程序员编写运行软件所需的代码。程序员会和软件开发人员一起测试、解决问题。另外,软件开发人员在软件开发生命周期的每个阶段都需要提供项目领导和技术指导。
Udacity也认为,两者之间存在明显差异:
与人们普遍看法相反,Udacity认为,软件开发人员和软件工程师这两个术语不可互换。开发人员知道如何编写代码,并且可能具备构建产品所需的技术技能。而软件工程师遵循的是理解需求这个系统性的过程,他们要与利益相关者合作,开发满足他们需求的解决方案。如果说,开发人员更倾向于单独工作,那软件工程师则更多是团队作战。
那么在实践中呢?接下来让我们更详细地探讨其中差异。
软件工程师的技能和岗位描述
软件工程师是高度熟练的软件开发人员,能够管理好一个复杂的系统。他们不仅能够构建一个功能齐全的应用程序,而且有足够的经验知道如何用易于重构、自我记录且更易于调试的方式来构建它。
他们会在各种项目中扮演领导者、顾问和个人贡献者的角色,发挥积极的作用。而且,他们必须在识别和实施新的IT应用方面提供分析和建议,来帮助客户和公司达到战略目标。他们还要能够管理资源、协调开发任务、监督技术项目计划。所以,在软件开发生命周期中,他们要经常与IT、运维和开发人员协同工作。
他们知道在前端就预先考虑、策划可以节省很多天的工作时间、缓解未来的头痛。软件工程师不是要编写最聪明的代码,重点是让代码显而易见。因为他们知道,最好的代码是永远不需要重写的代码。
软件工程师应该:
- 具有技术专长,并有广泛的项目经验
- 精通模式设计来建立有弹性和能容错的系统
- 使用Gherkin、Cucumber或Ansible等工具实现自动化测试
- 了解如何创建和维护IT架构、大规模数据存储和基于云的系统。
- 构建可扩展的部署管道,支持持续集成和持续交付
- 他们必须能够独自高效工作,并能与远程团队有效合作。
- 高级软件工程师必须监督复杂的系统分析、设计和开发程序。
软件工程师的角色通常包括:
- 研究、设计、开发和测试他们的软件,并通过网络编译、分发软件
- 修改现有的软件来解决缺陷、适应新硬件或提高性能。
- 分析用户需求,评估软件需求,包括的设计可行性和成本/时间限制。
- 与客户探讨规格和设计。
- 协调系统软件的部署、安装
- 监督项目是技术人员和工程师的工作
软件工程师的技能与岗位描述
软件开发人员不仅要负责编写代码,还必须审查当前系统,提出改进想法,以及包括为此需要付出的努力。软件开发人员还要和分析师、终端用户/营销人员和设计人员密切合作。
软件开发人员必须要在可控的真实情景下对代码进行测试,确保他们的代码能够正常工作,然后才能上线。这就要求他们必须有完美的眼光,正确地解决程序的错误和修订,提高运行效率。
好的软件开发人员要有创造力,而且要有技术上的专业知识,提出创新想法来解决客户问题,并且经验丰富,能够预见很多尚未出现的问题和风险。
软件开发人员通常会遵循开发生命周期方法或交付框架,如Scrum、XP或Kanban。
软件开发人员必须具备:
- 出色的分析技能,因为他们需要不停地对需求和软件功能进行比较。
- 他们必须熟悉计算机语言,以便有效地使用计算机程序,比如Java、c#、c++、Python等。
- 有使用GitHub等开源工具的经验
- 良好的反馈和沟通技巧,要非常注重细节,因为小错误可能会导致大问题。
- 注重细节, 因为有助于管理不同开发阶段的同步项目。
- 理解代码的逻辑,即使在遇到不熟悉的语言的情况下。
- 软件开发人员必须持续地监控他们所做的更改,包括解决方案的缺陷,确保高质量和一致性。所以,他们必须不断地在分配工作、管理截止日期和时间表之间转换。
小结
软件开发人员和工程师之间的主要区别:
开发人员主要在执行上面。他们的开发才能往往集中在一个领域。并不需要“大局”。所以,软件开发人员主要关注的是开发代码,这也是软件开发周期的一部分。
工程师要把工程原理应用到软件开发中,进行设计和计划。所以,他们要时刻关注“大局”,拥有多方面才能。工程师也可以承担开发人员的角色,不过他们的核心重点是架构。
总之,软件工程和软件开发之间的主要区别在于,前者负责监督工程,而后者专注于创建功能程序。
任何人都可以成为软件开发人员。即使你只懂一点编程概念,那你也拥有成为软件开发人员的基础。他们是在没有任何性能和可伸缩性分析的情况下编写代码的。而这些元素更多是由软件工程师完成的,这也是软件工程师和软件开发人员的不同之处。
如果你是软件开发人员或工程师,总会有新的东西需要你去学习,很多人会在项目和客户两种角色之间进行切换。
原文作者:Claire
翻译作者:Lea
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://shecancode.io/blog/software-developer-or-engineer-whats-the-difference