软件本身是一套指令或程序,会告诉计算机需要做什么。它独立于硬件,支持计算机进行编程。软件有三种基本类型:
系统软件可提供操作系统、磁盘管理、实用程序、硬件管理和其他运行必需品等核心功能。
编程软件为程序员提供文本编辑器、编译器、链接器、调试器等工具以创建代码。
应用程序软件(应用程序或 app)帮助用户执行任务。这其中包括办公室工作效率套件、数据管理软件、媒体播放器和安全程序。应用程序也指网络和移动设备应用程序,例如用于在 Amazon.com 上购物、在 Facebook 上进行社交,或在 Instagram 上发布图片的应用程序。
潜在的第四种类型是嵌入式软件。嵌入式系统软件可用于控制通常不会视为计算机的机器和设备,如电信网络、汽车、工业机器人等。这些设备及其软件可作为物联网 (IoT) 的一部分进行连接。
软件开发主要由程序员、软件工程师和软件开发人员执行。这些角色相互影响、相互交叠,角色之间的动态关系在不同的开发部门和群体中也大相径庭。
程序员或编码人员通过编写源代码,对计算机进行编程,以执行特定任务,例如合并数据库、处理在线订单、路由通信、进行搜索或显示文本和图形。程序员通常负责解释软件开发人员和工程师的指令,并使用 C++ 或 Java 等编程语言来执行这些指令。
软件工程师运用工程学原理构建软件和系统,以解决问题。他们使用建模语言和其他工具,设计解决方案。这些解决方案通常可以普遍适用于各种问题,而不仅仅是解决某个具体实例或客户的问题。软件工程解决方案遵循科学方法,且必须能在现实世界中发挥作用,就像桥梁或电梯一样。随着微处理器、传感器和软件的加入,产品变得更加智能,工程师的责任也越来越大。越来越多的产品依赖于软件来实现市场差异化,而且软件开发也必须与产品的机械和电气开发工作相协调。
软件开发人员的角色没有工程师那么正式,他们可以密切参与特定项目领域的工作,包括编写代码。同时,他们将推动整个软件开发生命周期 - 包括跨职能团队合作,将需求转化为功能、管理开发团队和流程并进行软件测试和维护。
软件开发工作并不局限于编码人员或开发团队。科学家、设备制造商和硬件制造商等专业人员也会创建软件代码,尽管他们的主业并不是软件开发人员。这项工具也并不局限于软件或半导体等传统信息科技行业。事实上,据布鲁金斯学会(链接位于 ibm.com 外部)称,这些企业“占软件开发公司数量的一半以下”。
其中的重要区别在于定制软件开发与商业软件开发的不同。定制软件开发是为特定用户、职能或组织设计、创建、部署和维护软件的过程。与此相反,现成的商业软件 (COTS) 是为满足广泛的需求而设计的,并可以将其打包进行商业营销和分销。