答案吗?这取决于你问的是谁!
这些角色之间并没有正式的区别,公司使用自己的经验和知识来定义符合他们需要的描述。更让人困惑的是,区域差异也可能存在,即教育方面的明显差异。但是,可以评估和分析各种数据来源,以便从中得出结论。
根据计算机科学学位中心的说法,软件开发者和软件工程师的角色是不同的:
软件工程是指应用工程原理来创建软件。软件工程师通过连接客户的需求和适用的技术解决方案来参与软件开发生命周期。因此,他们系统地发展过程以提供特定的功能。最后,软件工程意味着使用工程概念来开发软件。
另一方面,软件开发人员是程序背后的创新驱动力。软件开发人员负责整个开发过程。他们是那些与客户合作创造理论设计的人。然后,他们让计算机程序员编写正确运行软件所需的代码。计算机程序员将与软件开发人员一起测试和解决问题。软件开发人员在软件开发生命周期的每个阶段都提供项目领导和技术指导。”
Udacity也认为存在着强烈的差异:
软件开发人员和软件工程师这两个术语,与普遍的看法相反,是不可互换的。开发人员知道如何编写代码,并可能拥有构建有意义的产品所需的技术技能。软件工程师遵循一个理解需求的系统过程,与涉众一起工作,并开发满足他们需求的解决方案。开发人员倾向于单独工作。软件工程师是大团队的一部分。”
那么这在实践中意味着什么呢?让我们更详细地探讨其中的差异。
软件工程师技能和职位描述
软件工程师是能够管理复杂系统的高度熟练的软件开发人员。一个人不仅能够构建一个功能齐全的应用程序,而且有足够的经验,知道如何以一种容易重构、自我文档化、从而更容易调试的方式构建它。
他们将在各种项目中扮演领导者、顾问和个人贡献者的积极角色。他们必须在识别和实施新的IT应用方面提供分析建议,以帮助客户和公司实现战略目标。他们必须能够管理资源,协调开发任务和监督技术项目计划。在整个软件开发生命周期中,他们经常与IT、运维和开发人员合作
他们知道,在一开始就考虑周全可以节省几天的工作时间,也可以避免日后的头疼。他们不是致力于编写最聪明的代码,而是致力于让代码变得显而易见。他们知道最好的代码是你永远不需要写的代码。
软件工程师应:
- 有技术专长,有广泛的项目工作经验
- 精通模式设计,创建弹性和容错系统
- 使用自动化测试工具,如小黄瓜,黄瓜或Ansible
- 了解如何创建和维护IT架构、大规模数据存储和基于云的系统。
- 构建可扩展的部署管道,以支持持续集成和持续交付
- 他们必须能够有效地独立工作,并与远程团队一起工作。
- 高级软件工程师必须监督复杂的系统分析、设计和开发程序。
软件工程师的角色通常包括:
- 研究、设计、开发和测试他们的软件,以及通过网络编译和分发软件
- 修改现有的软件是为了解决缺陷,采用新的硬件或改进其性能。
- 分析用户需求,评估软件需求,包括设计可行性和成本/时间限制。
- 为客户提供产品规格、设计等方面的咨询。
- 协调系统软件的部署和安装
- 监督是技术人员和工程师的工作
软件开发人员技能和职位描述
软件开发人员不仅要负责编写代码,他们还必须审查当前的系统,提出改进的想法,包括为此所需要的努力。软件开发人员将与分析师、最终用户/市场营销人员和设计人员密切合作。
软件开发人员还必须确保他们的代码在您投入使用之前通过测试它,使用可控的和真实的情况来工作。他们必须有一个完美的眼睛,以妥善解决bug和修改程序,以提高运行效率。
最好的软件开发人员是有创造力的,并且有专门的技术来提出一个创新的想法来解决客户的问题,并且有足够的经验在问题出现之前发现很多问题。
通常遵循Scrum、XP或看板等开发生命周期方法或交付框架的软件开发人员。
软件开发人员必须具备:
- 优秀的分析技能,因为他们需要不断地将需求与软件能力进行比较。
- 他们必须熟悉计算机语言,以便有效地使用计算机程序,如Java, c#, c++, Python
- 有使用GitHub等开源工具的经验
- 良好的反馈和沟通能力,注重细节,因为小错误可能导致大问题
- 注重细节将帮助他们在不同的开发阶段管理同时进行的项目。
- 即使是他们不熟悉的语言,也能理解代码的逻辑。
- 软件开发人员必须不断地监视他们所做的更改,包括解决缺陷,以确保高质量和一致性。因此,他们必须不断地在分配的工作、管理截止日期和时间表之间转换。
总结
总结一下软件开发人员和工程师之间的主要区别:
- 开发人员执行。他们的才能往往集中在一个单一的领域。而不需要“大图”。因此,软件开发人员主要关注的是开发代码,这是软件开发周期的一部分。
- 工程师将工程原理应用到软件开发中进行设计和计划。总是有“大局观”,在很多领域都有人才。工程师可以扮演开发人员的角色,但工程师的核心关注点在于架构。
- 最后,软件工程和软件开发之间的主要区别是后者监督工程,而前者关注于创建功能性程序。
任何人都可以成为软件开发人员。如果您了解少量的编程概念,那么您就有了成为软件开发人员的基础。他们编写的代码没有任何性能和可伸缩性分析。这个元素的大部分是由软件工程师完成的,这使得这个角色不同于软件开发人员。
如果你是一名软件开发人员或工程师,你总能学到一些新东西,因为很多人会根据项目和客户的不同在这两种角色之间切换。