software-strategy-book/Ch1-5-SoftwareIndustry.tex

110 lines
37 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

% !TEX root = main.tex
\section{概述}
软件产业是战略性新型产业的重要组成部分,在推动传统产业升级转型、促进经济结构调整和发展方式转变、拉动经济增长和扩大就业、变革人类生产生活方式等方面发挥着日益重要的作用。
随着软件从依附于计算机硬件的程序逐步发展为独立的产品并且门类逐渐丰富与软件产品、服务相关的组织和团体在协作和竞争中逐渐形成产业链、产业圈其重要性已经国民经济中显现。2018年我国软件和信息技术服务企业数超过3.7万家从业人数达到643万人软件业务规模包括软件产品、信息技术服务、嵌入式系统软件达到6.3万亿元\cite{baobiao2019}。据预测2019年全球信息技术产业规模将达5万亿美元其中软件和信息技术服务业占比将达32\%物联网软硬件、云计算、大数据等新兴领域将占17\%\cite{ITIndustryOutlook2019}
软件学科与软件产业相互促进、共生共荣。软件产业的发展推动着软件学科的进步,软件产业的繁荣与分化对软件学科的演进与细化提出了更高的要求。同时,软件学科服务于软件产业,支撑软件产业的发展和壮大。软件学科从理论和实践上对软件产业的繁荣发挥着越来越重要的作用。
本章将概述软件产业概念以及软件产业的生态构成,回顾软件产业的形成、发展的历程,接着从软件技术与软件产业的互动的视角阐述软件产业生态不同阶段的特点和不同的侧面,分析软件产业随着应用场景和应用领域的细分所形成的不同产业生态格局,揭示软件学科在软件产业发展中的推动作用和软件产业对软件学科演进的需求牵引。通过软件产业生态不同阶段和侧面的讨论,揭示软件产业的发展趋势,以及软件学科对支撑软件产业和国民经济发展的重要作用,力图为软件学科更好地服务于产业和经济发展需求提供有用的信息。
\section{软件产业和软件产业生态}
软件产业是为有效地利用计算机资源而从事计算机程序编制、信息系统开发和集成及从事相关服务的产业\cite{research1996}。软件产业\index{软件产业}通常分为软件产品业和软件服务业两大部分。因此也有学者将软件产业定义为“与软件产品和软件服务相关的一切经济活动与关系的总称”\cite{furonghui2017}
软件产业这一概念的外延非常广泛。在工信部中国电子信息产业发展研究院编著的中国软件产业发展蓝皮书系列中软件产业细分为基础软件产业、工业软件产业、信息技术服务产业、嵌入式软件产业、云计算产业、大数据产业、信息安全产业等。中国软件行业协会的软件产业研究报告中将软件产业分为软件产品和软件服务而软件产品进一步分为系统软件、支撑软件和应用软件软件服务则涵盖了与软件相关的服务内容。国际数据公司IDC将软件产业细分为应用解决方案Application Solutions、应用开发及部署软件Application Development and Deployment Software和系统基础软件System Infrastructure Software。从更广泛的意义上来说无处不在的软件产品和服务越来越深刻地影响着众多传统产业和新兴产业并随着技术的发展和应用领域的扩展不断细化社会分工软件在其他产业中的重要性也日益显现并使得软件产业与其他产业呈现出融合的态势。
软件产业涵盖了软件企业、软件产品和服务、软件从业人员(特别是开发者)众多要素,他们之间相互影响、相互依存、相互竞争。在软件产业产生与发展过程中,软件企业及其所生产的产品、所提供的服务之间的供需关系形成了软件产业链,相关或者相似关系形成了软件产业的若干子领域,或产业圈。这些不同的产业链、产业圈以及相关的参与者之间或互补、或竞争,从而构建起了错综复杂的产业生态。
软件产业生态\index{软件产业生}是软件企业、软件从业人员以及各层次、多种类的软件产品与服务的共生体。软件产业生态,从软件产品和服务的相互依赖性来看,从上游到下游,基本可以分析为系统软件、支撑软件、应用软件等层次。应用软件中,又可进一步细分出工业软件(包括企业管理信息系统等软件)、个人软件(以个人使用为目的的软件)。软件产业链上不同种类的软件及其开发者、开发企业形成了相互关联的多个子产业圈。下游的软件子产业很大程度上受到上游软件子产业的制约,而另一方面又在一定程度上促进上游软件子产业的发展。例如,处于软件产业链上游的操作系统等系统软件是下游应用软件运行的基础,因此围绕操作系统等系统软件和各个业务领域的需求所研发的一系列应用软件,与所对应的操作系统形成相互依赖、相互促进、相互制约的产业生态圈;而随着应用软件的普及使用,基于特定操作系统的应用软件也可能由用户市场驱动发展出支持其他操作系统的版本,从而扩展原有的生态范围。由此可见,各类应用软件、操作系统等软件以及相应的开发商、用户共同构成了复杂且演化的生态系统。软件产业生态的主要参与方及其相互关系如图\ref{fig:fig1-5-1}所示。
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{fig1-5/fig1.png}
\caption{软件产业构成}\label{fig:fig1-5-1}
\end{figure}
\section{软件产业发展历程概览}
软件产业脱胎于计算机产业的发展和进步,与软件技术相互影响、相互促进。软件产业的形成与发展遵循产业分化和进步的一般规律。图\ref{fig:fig1-5-2}展示了软件产业发展历程的概貌。
\begin{figure}[ht]
\centering
\includegraphics[scale=0.8]{fig1-5/fig2.png}
\caption{软件产业发展历史概览}\label{fig:fig1-5-2}
\end{figure}
早期的计算机软件往往附属于计算机硬件。直到20世纪50年代软件还主要以项目的形式进行定制化开发。这些软件开发项目往往由政府主导并服务于国防等关键部门并且只有少量大型服务企业研制。当时计算机行业的大多数高管不相信软件产品会有重要的市场\cite{DBLP:journals/annals/Johnson98}
20世纪60年代随着计算机硬件能力的提升软件的规模日益庞大开发过程日益复杂出现了软件危机。软件的重要性和独立性也开始逐渐显现。例如1961年开始研发的OS/360操作系统软件耗费了超过5000人年的工作量软件成本甚至超过了IBM System/360大型机硬件。60年代中期出现了一些具有特定用途、可以被售卖给不止一个客户的程序具有一些产品化的特性但销售量小仅能看作是软件产业的萌芽。而与此同时软件开发和管理中的大量现实问题促使业界思考软件开发的独特之处。1968年软件工程概念提出标志着对软件及其开发方法的研究进入了一个新的阶段也预示着软件开发向工程化发展。1969年计算机企业巨头IBM宣布了软件可作为独立于硬件单独售卖的商品而存在\cite{DBLP:journals/annals/Johnson98}。在此期间出现了强大的企业解决方案提供商例如专业的数据库公司研发数据库等通用型软件以弥补计算机制造商自带软件的不足但整体规模仍然不大。这种状态几乎持续到20世纪70年代末绝大多数软件应用程序仍是在主机或微机上按需定制的。在这一阶段软件厂商已经开始发展起来并且开始认识到大规模复杂软件开发中的一些问题推动了软件工程理论的发展。
20世纪80年代随着微型计算机的大规模普及大量软件得到了广泛的使用软件企业以此为契机得以迅速发展开启了以软件为销售对象的商业模式\cite{furonghui2017},也由此掀起了以数字化为主要特征的第一次信息化浪潮\cite{2018建设数字中国}。在这时期,软件真正开始形成一个独立的产业,不仅有大量的软件开发企业和开发者,还出现了更加广大的软件产品市场和用户,并且越来越独立于特定的计算机硬件,逐步形成独立的产业。
从20世纪90年代中期开始以美国提出“信息高速公路”建设计划为重要标志互联网逐渐实现了大规模商用迎来了以网络化为主要特征的第二次信息化浪潮\cite{2018建设数字中国}。软件从以单机应用为主逐渐呈现出网络化交互特征。大量带有社会化特征的软件开始蓬勃发展,形成了以互联网为基础、以服务化为特征的产业生态。
当前,随着以智能化为主要特征第三次信息化浪潮\cite{2018建设数字中国}的到来,软件产业正在发生新的变化。新型的融合化应用场景越来越丰富,基于云计算、大数据的智能化应用软件和企业蓬勃发展,基于软件的产品和服务日益多样化精细化,逐渐向传统行业和新兴行业渗透,呈现出“软件定义一切”的融合化态势。
在后续的论述中,我们将以软件产业与软件技术互动为主线,从不同阶段和视角回顾软件产业及其生态的发展,探讨软件产业对软件学科的需求以及软件学科对软件产业的支撑。
\section{不同阶段和视角的软件产业生态}
\subsection{软件产业与软件技术的互动}
由软件产业发展历程可以看到,软件产业的发展与软件技术的进步是相互影响、相互促进的。
当人们意识到软件可以是独立于硬件存在的单独产品时,针对不同目的、具有不同功能特点的软件也逐渐发展出专门化细分的软件技术领域,相应的软件产品也逐渐形成独立的门类。逐渐细化的各类软件产品,极大丰富了软件产业的内容结构。
随着互联网软硬件技术的发展和普及,软件产品从拷贝安装的应用模式,逐渐转向通过网络按需获得的服务模式。软件的应用场景和用户群体的多样化趋势,扩大了软件市场,催生了一批以在线软件服务为主要业务的软件企业。这些企业和各类新型应用需求,反过来又促进了服务化软件技术的创新和发展,使得软件产业显示出服务化特征。
随着软件在各个不同行业中的广泛使用,各类企业与软件相关的投入与产出都普遍增加。无处不在的软件在各个业务领域中的重要性日益显示,并正在迅速融入各个领域的核心业务中,推动着各个领域的技术创新和发展。
在软件产业和软件技术的发展过程中,软件的复杂性和软件开发的困难也越来越被人们所重视。在不同的产业阶段,如何高效地开发高质量软件成为永恒的话题,不断推动着软件技术的进步和软件产业的发展。从软件开发的角度而言,软件开发方法、工具和环境经历着不同的变化。软件开发者,以及以软件开发工具和环境为主要业务的软件企业,一起构建了独特的产业生态,与软件技术的共同发展。
可见,软件产业从早期由产品化构建起产业生态,到后期逐渐发展为以服务化为特征的产业生态,以及近年来以融合化为特征的产业生态,软件技术的发展和变革无所不在。由软件开发方法、环境和工具推动的软件开发产业生态是软件技术发展的重要推动要素。本节回顾具体的软件产业发展历史,以及以开发者视角所见的软件产业生态,分析软件产业与软件技术的互动与演变,并揭示软件产业与传统产业的融合化发展新趋势。
\subsection{以产品化为特征的软件产业生态}
正如传统工业部门在生产力发展过程中不断分化一样,软件也经历了产品门类不断细分的过程。软件从硬件中剥离出来之初,并没有具体的门类细分,从硬件资源管理到具体应用功能都包括在一个混沌的整体中。随着软件需求的不断增长,软件应用的数量不断增多,人们发现有一些共性功能是几乎所有软件的运行都必须具备的,因此就将这些共性分离出来,包装成早期的操作系统,而功能各异的应用功能则在操作系统之上开发运行,形成各类应用软件。后来,人们发现一些应用软件中仍然存在不少逻辑上高于操作系统、同时又存在于多种应用中的共性部分。这些共性部分又进一步被分离出来,有些被单独包装成产品,产生了数据库软件以及其他用于支撑软件运行交互的所谓中间件。而上层的应用软件也在实际应用中针对不同的业务需求不断细分,形成了各类不同的应用软件,孕育了各自的软件开发企业和应用市场。可见,随着软件技术的发展,软件产品经历了共性沉淀、结构细分的过程,而此过程中,每一个细分领域出现了专门的软件技术领域和产品,而产业结构也逐渐丰富。
本小节以操作系统产品、办公软件产品、中间件产品、工业软件产品为典型代表,概述以产品化为特征的软件产业生态产生与发展过程。
操作系统是构建现代软件产业生态的重要基石。20世纪60年代操作系统软件开始逐渐从计算机硬件中独立出来出现了产品化萌芽。例如OS/360操作系统能运行在一系列用途与价位不同的IBM System/360大型机上具有了现代操作系统的独立性和产品化的特征但仍然依附于特定厂商也并未形成产业。1969年贝尔实验室开发开放源码的Unix操作系统得到了广泛的应用。之后基于Unix的源代码大量类Unix系统被研发出来可用于多种计算机硬件。市场上形成了多种独立的操作系统软件产品。例如加州大学伯克利分校研发的BSD以及此后的FreeBSD、NetBSD、OpenBSD等衍生产品。20世纪70年代后期IBM公司推出的个人电脑PC催生了面向个人的软件使用场景为软件产业的发展提供了广阔的空间80年代微软通过与IBM公司的合作成功研制了面向个人计算机的桌面操作系统MS-DOS成为当时在IBM PC上最常用的操作系统也带来了大量的软件应用场景推动了第一波信息化浪潮促进软件产业的发展和壮大。同期MacOS在苹果公司Macintosh计算机上也得到了广泛的应用。1983年嵌入式实时操作系统RTOSVxWorks由美国WindRiver公司研发具有高性能的内核以及友好的用户开发环境以其良好的可靠性和卓越的实时性至今仍被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中。20世纪90年代微软公司自行研发新操作系统Windows通过图形化界面来替换其原有的字符界面为主的DOS系列操作系统。同期芬兰裔美国软件工程师Linus Torvalds基于Unix研发了Linux操作系统由于其轻量级微内核的设计和良好的可移植性目前已经发展为国际主流操作系统之一并形成了多种变体版本。
当前操作系统软件产业在不同操作系统领域呈现各自的发展特点。在服务器操作系统领域Linux、Unix和Windows是最常见的操作系统软件产品形成能力互补的同时也存在多个角度的竞争。在桌面操作系统领域Windows占据最大的市场份额但是近年来Mac OS和Linux的份额在不断增加竞争态势显著。在移动智能终端操作系统领域Android被华为、三星等众多手机和其他终端厂商使用而iOS则在苹果公司经营下形成了相对封闭的发展模式两者形成了各自的产品生态特色。在嵌入式操作系统领域VxWorks、Windows Embedded、嵌入式Linux等系统软件产品广泛用于工业控制、终端设备等领域我国国产工控实时操作系统SylixOS也在在国内关键系统市场逐步扩展份额开始形成对VxWorks等国际产品的替代。云操作系统、智能穿戴操作系统等产品的软件产业规模总体较小仍有很大的发展空间。各类操作系统具有不同的使用平台和应用场景在某一细分的领域往往存在几个产品共同形成市场竞争同时也存在市场互补。产品的多样性以及标准化等特性为操作系统产业乃至整个软件产业的繁荣提供了重要的保障对其他各个子产业建立了重要的平台支撑。操作系统与计算机硬件密切相关在很长一段时间操作系统软件与硬件往往共同销售并且预装在硬件上。随着操作系统产品的逐步成熟以销售许可的方式对产品进行售卖逐渐形成另一种典型的软件产品商业模式。
办公软件是一种重要的服务于日常信息处理的共性应用软件产品\footnote{在我国,办公软件也被归入基础软件。}。由于办公软件产品的普及各类信息的记录与处理有了便捷高效的平台。其中最为知名的办公软件包括文字处理、电子表格、演示等。早期的办公软件国外有Word Prefect、Lotus123等而国内则有WPS等都具有广泛的部署和深刻的商业影响。随着信息处理的需求越来越大人们对办公软件的易用性要求也日益提升推动者各厂商对软件产品的设计不断改进。在操作系统进入图形化“视窗”时代后相应的办公软件也开启了“所见即所得”WYSIWYG的新阶段大大提升用户体验并反过来对操作系统的效率和稳定性提出新的要求。办公软件与操作系统一样也在产品逐渐成熟和商业模式逐步清晰的背景下进入按许可进行销售的软件产品商业模式。
中间件是一种重要的基础软件。中间件与操作系统、数据库系统并称为三大类系统软件但相比于操作系统和数据库中间件产品出现得更晚。一般认为中间件是网络环境下处于操作系统等系统软件和应用软件之间的一种起连接作用的分布式软件。1968年出现的将应用软件与系统服务分离的IBM CICS交易事务控制系统可以看作是中间件产品的萌芽。它在面向最终用户的应用功能与面向机器的系统服务之间提供了中间层的封装使得各个层次的关注点更加集中。到20世纪90年代互联网的出现使网络应用和分布式应用登上历史舞台而其中涉及通信、协同等源于异构性的大量共性问题复杂性越来越高需要专门的软件产品来处理。一般认为ATT公司贝尔实验室于1990年推出的用于解决分布式交易事务控制的Tuxedo系统是中间件产品诞生的标志是一种交易中间件也是最早的中间件。此后消息中间件、应用服务器中间件、应用集成中间件企业服务总线ESB等、业务架构中间件业务流程管理BPM等等各类中间件产品迅速发展起来。典型的中间件厂商包括国外企业IBM、Oracle、BEA等开源产品组织Apache、JBoss、JOnAs等以及国内企业金蝶、东方通、中创、普元等形成了相互竞争、相互补充的繁荣的生态格局。可见中间件产品的发展过程也是软件技术相关领域日益复杂和细分的结果。
工业软件是一类典型的面向领域的应用软件是支撑传统工业企业信息化、提升传统工业企业管理水平的重要软件产品簇。工业软件按涉及的工业业务领域可分为研发设计类软件和业务运营管理类软件。早在20世纪60年代美国的大型企业就会采购昂贵的计算机设备进行商业信息的处理。但是由于当时计算机硬件和软件之间耦合紧密软件往往是作为计算机售后的一种服务提供因此无法形成独立的产业生态圈。60年代末70年代初随着系统软件的出现通用计算机系统开始普及由此面向工业生产及其信息化的独立软件开发商开始逐渐出现。直至80年代随着更便宜的个人电脑和通用操作系统的普及企业信息化的门槛得以大幅降低软件技术开始惠及更多的行业。随着工业生产和研发复杂性提升研发领域如计算机辅助设计CAD、辅助分析CAE、辅助制造CAM、辅助工艺规划CAPP、产品数据管理PDM、产品全生命周期管理PLM等涌现了大量的商业化的软件产品为相关业务领域带来了显著的生产力优势很快在各个行业得到普及。在业务运营和管理领域早期的软件更多集中于管理信息系统MIS重点在于以数字化的形式来记录企业管理过程中产生的原始数据以及简单的业务流程。为了更好利用以手工为主的企业既有流程企业资源规划ERP等软件产品诞生逐渐形成了以计算机软件为中心的企业级管理系统。它不仅仅是对既有业务流程的自动化而是包含了诸如财务预测、生产能力、资源调度等更具有价值的软件功能同时对企业经营管理方式产生了深刻的影响。大数据和智能化时代的到来正在将业务运营管理方面的软件产业水平提升到一个新的高度。
由此可见,以产品化为特征的软件产业代表着早期桌面化的市场需求,软件企业通过软件销售的形式向各类用户提供商用的软件产品。由于软件产品复制的边际成本非常低以至于可被忽略这一完全不同于传统产业的特性,知识产权保护成为软件产业中的重要企业战略决策\cite{RePEc:unm:umamer:1995006},并且持续促进着软件技术的发展。同时,大量用户的特殊需求要求软件企业提供大量的定制功能,因此咨询与实施成为软件产品部署的重要方式,同时也促进企业采用支持可变性建模的开发方法开发面向特定领域的系列软件产品,使得产品化的软件生态更加丰富。随着云计算、移动计算等技术的发展和普及,一些以销售软件产品为主的软件企业开始向云化、服务化转型。软件产业逐步开启以服务化为特征的新阶段。
\subsection{以服务化为特征的软件产业生态}
服务化是互联网技术的产物。互联网软硬件的发展,使得依赖于拷贝安装的软件产品转变为通过网络、按需索取成为可能。软件功能进一步细分为前端以人机交互为主和后端以业务逻辑处理为主两大部分。随着大量的业务逻辑迁移到后端,对后端的计算、存储能力提出了更高的技术要求,逐步发展出了云计算技术与平台;而互联网的广泛可达能力,带来了巨量的普通用户,形成了丰富的互联网应用。
在以服务化为特征的软件产业生态中,软件的核心价值主要以网络服务的形式呈现。作为产业生态的主体,软件企业大量采用云计算技术提升用户服务能力;同时,软件的用户能够在各类终端上通过网络按需访问所需要的服务。由于软件的服务化、远程化、轻量化带来了具有良好的伸缩性和互操作性,因此,服务化的软件极大地推动了软件产业生态的繁荣。从企业而言,软件的部署和运维得到良好的控制;从用户而言,轻量化的运行提升了使用体验。受限于篇幅,本节以社交类软件和云计算服务为例介绍具有典型服务特征的新型软件产业生态。
社交类软件体现了人和人之间的连接。这一天然的人际链接的需求在互联网普及之前只能通过传统的社交方式来完成。互联网的发展使得社交活动发展到一个完全不同的高度这也催生了一大批以社交为主营业务的软件公司。社交类软件最早以即时消息服务IM的形式出现例如国外的ICQ、AIM、Skype等国内的QQ早期称为OICQ。由于和社交关系深度绑定社交软件的盈利模式非常多样同时这类软件也具有极强的粘性一旦占据优势地位就非常难于被其他软件所替代。
互联网模式的变革也为新的社交软件形态的产生带来了新的机会例如Web2.0时代的到来在线交流变得更加便捷也催生了诸如Facebook、Twitter、国内的微博等社交类网站的兴起。它们不再局限于通讯录中的固定的联系人而是使得互不相识的人际互动变得更加频繁甚至还出现了以陌生人社交为主要业务软件产品以及面向职业人士的LinkedIn等软件产品。移动互联网的兴起是另一次变革的浪潮由于智能手机的用户普及率高且便于随身携带等特点通过智能手机随时在线使用社交媒体软件成为可能。这催生了新一代的社交类产品如微信、Telegram、Line、WhatsApp等的繁荣。围绕这些应用软件形成了大量外围软件服务涉及电子商务、在线支付、招聘择业、娱乐游戏、社会信息服务等众多领域几乎涉及了社会生活的方方面面。可以说在新型软件技术的支撑下相关软件产业生态已经影响到当今社会的主要生活方式。
云计算服务是新型服务化软件背后的重要技术支撑提供了大规模并行化定制化的服务能力。其中大规模和并行化处理能力往往来自以虚拟化技术Virtualization为基础的云计算服务而定制化能力则更多依赖于21世纪初发展起来的平台即服务PaaS概念。就虚拟化软件而言其本身以产品化形式出现但对外提供服务化能力将计算机的各种实体资源如CPU、内存、磁盘空间、网络适配器等进行抽象、转换后以虚拟设备的方式呈现出来并可供分割、组合为一个或多个计算机环境。自20世纪60年代以来虚拟化能力随着桌面计算和服务器架构的日益发展不断发展完善面向不同的底层硬件资源和上层应用需求出现了以KVM、VirtualBox、VMware ESX、Xen等多种虚拟化软件产品进而出现了用于虚拟环境管理的OpenStack、Amazon EC2等产品。基于虚拟化技术许多厂商如Amazon、微软、Google、百度、阿里巴巴、华为等提供了不同层次的在线服务包括基础设施即服务IaaS、平台即服务PaaS、软件即服务SaaS。基础设施即服务提供在线计算资源和基础设施比如Amazon、华为、阿里等厂商的服务器租赁等服务。平台即服务提供在线的应用开发和发布解决方案提升应用开发和运行的灵活性比如Google App Engine、微软Azure、Force.com等。软件即服务是在线化的软件形态面向最终软件用户以在线服务的形式提供面向领域的软件功能比如SalesForce的CRM系统、Cisco的WebEx等。不同厂商在推出相应的云计算服务同时往往会提供IaaS、PaaS、SaaS中的一层或多层服务这也建立了围绕不同软件厂商的产业生态。而不同软件厂商之间的软件产品间形成竞争和补充关系进而也形成了更加复杂的层次化软件产业生态。
在软件服务化的趋势下,不论是传统行业还是新兴行业,软件的随处可用、随需而变、按需提供的特性,大大扩张了软件产业的范围,使得软件与人们的生产、生活更加密切接触,成为社会经济生活各个环节中不可或缺的重要组成部分。进而,随着软件能力的提升和应用范围的扩大,小到日常生活、大到城市治理,多元融合的软件开启了以融合化为特征的软件产业阶段。
\subsection{以融合化为特征的软件产业生态}
第三次信息化浪潮的推进使得智能化、融合化逐渐成为软件产品和服务的新趋势。从无处不在的计算到软件定义一切以融合化为特征的软件产业生态已经开始渗透到社会生活的方方面面。在这新型的软件产业生态中软件产业链已经不仅涵盖传统运行于计算机硬件上的软件还进一步覆盖了智能感知设备甚至人。人、机计算机、物智能感知设备融合是新型软件产业生态中的典型场景。得益于小型微型终端设备、智能终端设备的普及新型物联网应用促使软件开发商、硬件制造商、服务提供商、系统集成商等多种角色共享智能化、融合化的软件市场份额。例如在智能家居场景中各类智能家居设备通过软件定义的方式接入智能家居总控软件用户能通过在智能手机中安装远控软件实现对家中设备的远程查看、管理和控制。与生活密切相关的空调、电视机、电饭煲、电灯等传统电器产业为软件产业提供了巨大的潜在发展空间。小米、华为等企业已经在相关领域做出了成果丰硕的探索和尝试。又如近年来以国内饿了么、美团为代表的从线上到线下O2O的服务模式以共享单车、共享汽车为代表的共享经济模式无不体现了软件与各行业融合的全新产业生态。
灵活多变、快速定制、多源融合的产业生态对软件本身带来了新的挑战。快速开发灵活可伸缩的软件产品,确保提供高效稳定的软件服务,促使软件开发人员和研究人员对软件的技术架构进行不断的探索创新,也进一步丰富了软件产业生态中生产者和消费者的构成,给软件产业的持续发展带来蓬勃生机。
\subsection{开发者视角的软件产业生态}
软件开发者是软件产业生态的重要参与者。围绕开发者,软件产业生态经历了从产品到服务、从单机到集群、从闭源到开源多个阶段。与产品视角和服务视角所见的软件产业不同,以开发者为中心的软件产业围绕软件开发工具、方法和服务,形成了一种推动软件产业本身发展的重要动力。软件开发工具软件既是软件产业中用于软件产品开发的工具,同时也是构成软件产业重要组成部分的一类软件产品,具有典型的两面性。因此,本节将从软件开发工具形成的软件产业生态的角度,回顾开发者视角的软件产业历史,分析不同阶段软件开发技术对软件产业发展的支撑。
软件开发环境\index{软件开发环境}经历了单机集成开发环境、支持协同的软件开发环境以及云开发环境等多个阶段,形成了单机集成开发环境\index{集成开发环境}和云协同开发环境\index{协同开发环境}融合的庞大产业。20世纪80年代以前软件开发环境主要是针对特定的硬件平台因此此时开发工具相关的软件还没有形成固定的产业。随着高级编程语言的出现和普及各类集成软件开发环境IDE逐渐发展起来形成了具有领域特点的产业雏形。在高级编程语言和集成开发环境的支撑下软件开发效率大大提升促进了软件产品的繁荣。20世纪80-90年代宝蓝Borland、微软Microsoft等公司推出了各自的开发工具软件形成了多种开发工具软件竞争的产业局面。随着新的操作系统和中间件的变化开发工具产业也在发生着适应性的变化。例如以C和Pascal起家的宝蓝公司在20世纪90年代末到21世纪初为了应对Java语言的广泛使用推出了JBuilder系列开发环境随着Linux的不断普及推出了Kylix随着.NET平台的广泛使用推出了支持.NET的开发工具Delphi 8以及多个后继版本直至2006年由于对服务化编程模式支持不足、定价过高等多种原因Delphi才在竞争中渐渐失去有利地位被Embarcadero收购继而由Embarcadero控制的Delphi开发环境工具为了满足服务化、跨平台的软件开发需求仍然推出新的版本通过面向移动开发和跨平台特点与微软Visual Studio .NET等工具软件竞争。可见软件技术的进步推动着软件开发工具产业的持续发展而开发工具产业生态的兴盛也支撑着软件技术的不断提升与改进。
与此同时开源集成开发环境随着Java等语言的兴起而不断发展形成以开源和协作为特色的软件产业生态并派生出特有的商业模式。Eclipse是一个典型的例子。Eclipse最初由IBM公司主导开发并于2001年开源随后转由非盈利组织Eclipse基金会管理至今。Eclipse项目架构设计灵活其开源引起了广泛的关注并得到上百家大型软件企业的参与与贡献。围绕Eclipse这个开源集成开发环境开源社区的开发者和参与开源社区贡献的软件企业纷纷为该产品开发插件并得到集成和推广。在此基础上Eclipse衍生出了MyEclipse等商用版本以及IBM Rational Software Architect等多种工具软件。此类工具面向软件开发者的不同开发需求提供不同层次的解决方案和开发环境。这类软件生态往往以开源为核心通过良好设计的、具有可扩展性的软件体系结构构展现了软件的良好生命力并且在开源环境下不断发展同时采用合适的开源许可证允许衍生出商业产品并通过商业产品的应用与开源版本实现协同的演进。
随着软件产品日益复杂开发人员的协同工作更为重要。在协同开发环境下涉及到不同的开发团队、不同的开发资源如何协调的问题。例如对协同开发的软件代码需要有相应的版本控制软件。在版本控制领域除了经典的ClearCase、Perforce等商业工具之外还产生了CVS、SubVersion等开源免费工具。由于软件开发的社会化协作程度越来越高分布式版本管理系统逐渐替代中央控制的版本管理系统成为主流。其中的典型代表是git和mercurial。社会化编程的兴起又对版本控制之外的社会化协作产生了新的需求催生了一大批诸如GitHub、Gitlab、Bitbucket、Coding等国内外的开发者社区及协作服务提供商。持续集成需要自动化构建工具的支持其中既有Bamboo等商业的持续集成工具也有Jenkins等开源免费的工具同时还存在以免费为主体、但具有某些收费高级功能或是面向开源社区免费、但面向商业应用收费的产品如Go、Travis等。此外在配置管理、自动化构建和测试、容器和服务平台、日志管理及监控和告警等领域都出现了许多具有竞争力的产品。
开发运维一体化DevOps运动的兴起则是在前述实践基础上进一步引发的更为深刻的技术和文化变革。开发和运维不再彼此独立而是建立了更流畅、更紧密的协作关系。从工具链角度不仅仅是发布活动配置、监控及最终用户反馈等环节也融入其中。因为持续集成、持续交付和开发运维一体化的工具链的端到端的特点基本上囊括了软件开发中从开发到集成交付、从基础运行环境配置到软件配置管理等各个子领域的多种工具的集合也促进了相关子领域的各工具软件产业的繁荣以及生态的兴盛。从开发者角度而言大量的开发工具和开发模式为开发者提供了多种提升开发效率和质量的技术途径同时也带来了更多的技术选择成本和学习成本。如何促进相关软件产业生态良性发展辅助开发人员更专注于需求提升开发效率和交付能力降低学习成本是一个重要的研究问题。
\section{结束语}
软件产业生态的建立、发展和繁荣已经经历了超过半个世纪。回顾这五十多年的软件产业发展历程软件产业生态的建立与软件技术的发展密不可分。随着技术的进步各类软件产品、软件企业、软件从业人员之间的竞争与合作持续发展逐步渗透入人类生活的方方面面。“软件定义一切”和“一切皆服务XaaS”为软件产业创新发展扩展了新的空间。新一代技术催生新的软件产业细分促进软件产业向其他各个产业的渗透形成基于软件的产业融合。同时传统软件企业在云计算技术的推动下加快自身的服务化转型全球软件即服务落地明显加快。软件产业的服务化、融合化特征日趋显著成为软件产业的新增长点也成为软件技术和软件学科发展的新契机。
随着越来越多行业对软件和软件技术需求的增长,软件产业将继续发展和细分,并进一步与人类社会生产生活紧密融合。软件产业的细分与服务化、融合化转型,给软件学科的研究带来了新的挑战,需要有符合产业可持续发展要求的研究内容和成果,认识并补足软件产业生态化发展的短板,从而支持和促进软件产业的持续健康发展。