软件语言的核心任务是建立通用的抽象机制,包括抽象的表示和抽象之间的关系,为问题空间、解空间和平台空间建模。软件语言包括程序设计语言、各类建模语言以及编程模型等。其中程序设计语言用于描述软件的计算行为,提供基础的软件抽象。一方面,程序设计语言需要提供更有效、有力,更符合人类思维方式的语言设施,以降低软件开发的难度、提高软件制品的质量;另一方面,这些语言设施又需能被高效地实现以保证软件的执行效率。软件理论旨在构建正确、高效软件系统的理论和算法基础,包括可计算性理论、算法理论和程序理论等。软件运行支撑的核心任务是建立解空间向平台空间的映射方法并构建平台空间抽象的计算实现。运行支撑系统包括操作系统、编译系统、中间件和数据库管理系统等,它们负责驱动下层计算资源有效运转,为上层应用提供共性服务,从而将计算平台的概念从硬件扩展到软件层面上。
软件构造方法的核心任务是建立问题空间抽象到解空间抽象的映射方法,构建解决方案,完成特定应用目标。其关键问题包括如何理解所面对的问题空间、如何理解当前需要软件来解决的问题并以此设计可能的解决方案,以及如何高效高质量地开发出能满足需求的软件等。软件构造方法包括软件开发的技术、管理等方面,形成了软件学科的软件工程分支的主要内容。软件度量与质量评估的核心任务是将基于软件抽象的制品与服务及其构造、运行过程作为观察对象,度量、评估和预测其质量与效率等指标。它通过定性和量化的手段发现软件模型、开发和运行的规律,并评价解决方案对应用目标的满足程度。
这四个子领域是密切联系、相互作用的,贯穿其中的是软件范型①。每一个范型为软件工程师(或程序员)提供一套具有内在一致性的软件抽象体系,具化为一系列软件模型及其构造原理,并外化为相应的软件语言、构造方法、运行支撑和度量评估技术,从而可以系统化地回答软件应该“如何表示”、“怎样构造”、“如何运行”及“质量如何”的问题[1]。软件范型的变化将牵引构造方法、运行支撑、度量和质量评估的一系列变化,带动软件学科的发展。
四、软件学科的重要地位
软件学科在整个计算机学科中占有举足轻重的地位。从 1966 年首届图灵奖至 2019 年的 54 次颁奖中,属于软件领域的有 37 次(约占 68.5%),其中以程序设计语言、编译和操作系统为主的有 22 次获奖,还有 4 次数据库获奖。
从目前我国人才培养一级学科划分看,软件学科横跨了计算机科学与技术、软件工程、网络空间安全等三个一级学科,特别是与计算机软件与理论二级学科和软件工程一级学科关系密切。与国际本科计算教育学科划分相比,软件学科横跨ACM/IEEE Computing Curricula 的五个学科,即计算机科学、计算机工程、软件工程、信息技术、信息系统。
随着信息技术及信息化的快速发展,软件学科也逐渐成为一门基础学科,并向其他学科渗透。基础学科是指某个拓展人类可认识改造的世界疆域之不可替代的知识体系,具有独特的思维方式与方法论,为其他学科发展提供不可或缺的支撑。首先,软件是将物理世界拓展为信息-物理-社会融合世界的主要手段;其次,“软件定义”赋能的计算思维有可能成为继实验观察、理论推导、计算仿真、数据密集型科学之后的综合性的科学研究手段,尤其是为以信息-物理-社会融合系统为对象的科学研究提供赖以运作的理论基础和实践规范;最后,以软件知识为主体的计算机教育已经成为包括我国在内的多个国家的国民基础教育课程体系的主要内容之一。
第二节 发展历程与发展规律
一、软件学科发展历程
以程序化的系列步骤表达解决方案是人类思维的基本形式之一。但直到20 世纪 40 年代末存储程序式电子计算机出现以后,现代意义上的软件才真正出现。粗略而言,软件的发展历程可分为如下四个阶段。
(一)第一阶段
从存储程序式电子计算机出现到实用高级程序设计语言出现之前为第一阶段(20 世纪 40 年代末到 50 年代中期)。在此阶段,计算机处理能力有限,应用领域主要集中于科学计算与工程计算。编制程序所用的工具是低级语言。系统软件主要提供程序载入、汇编等功能。程序开发无系统方法,强调编程技巧。
(二)第二阶段
从实用高级程序设计语言出现到软件工程提出之前为第二阶段(20 世纪50 年代中期到 60 年代后期)。在此阶段,计算机处理能力迅速提高,应用领域扩展到商业数据处理等领域。人们开发了操作系统以充分利用系统资源。为了适应大量数据处理问题的需要,数据库及其管理系统开始出现。Fortran、COBOL、ALGOL 等高级语言大大提高了程序设计的效率。但软件的复杂程度迅速提高,研制周期变长,质量难以保证,出现了软件危机。为此,人们提出结构化程序设计方法,并开始了程序正确性和软件可靠性的理论研究。
(三)第三阶段
从软件工程提出到基于互联网的软件服务广泛使用之前为第三阶段(20 世 纪 60 年代后期到 90 年代后期)。计算机系统的处理能力继续增长,向嵌入式和局域网或基于广域网的企业计算延伸;应用领域扩展到社会生产生活的诸多方面。以系统化、工程化的方法开发大型软件逐渐成为主流,软件开发方法和技术迅速发展,对象化、构件化等方法获得广泛应用。分布式应用和分布式软件得到快速发展,出现了软件中间件。关系数据库管理系统高速发展,获得很大成功。软件知识产权得到重视,基于软件产品形态的软件产业迅速发展。
(四)第四阶段
从基于互联网的软件服务广泛使用到现在为第四阶段(20 世纪 90 年代后期以来)。随着互联网和万维网的普及以及物联网、移动互联网的兴起,软件的应用范围向泛在化发展,全面融入人类生产生活的各个方面。软件的核心价值日益以网络服务的形式呈现。云计算、大数据和人工智能技术的进步推动了服务化的软件产业的繁荣。软件技术呈现网构化、泛在化和智能化的发展趋势。与此同时,开源软件运动取得巨大成功,软件和软件技术的可获得性极大提升,对整个软件生态产生了重要影响。
二、软件学科发展规律
纵观软件学科的历史,可以发现其发展的外在驱动力始终来自计算平台的发展和应用范围的扩张,而内在驱动力来自其核心问题的解决,追求更具表达能力、更符合人的思维模式的编程范式,追求更高效地发挥计算机硬件所提供的计算能力,不断桥接异构、凝练应用共性并沉淀计算平台,同时更好地满足用户对易用性的需求。这是由软件学科的方法论学科本质所决定的。换言之,如何深入软件开发所涉及的问题空间、平台空间和解空间,并在其间有效协同,是软件学科的“元”主题,而随着问题空间和平台空间的拓展,如何以更好的软件抽象帮助驾驭软件开发的复杂性,即尽量避免引入附属的复杂性,更好理解和应对本质的复杂性[2],是学科发展的“元”规律。不同层次的抽象(集中体现在软件语言等表达设施)、抽象的计算实现(集中体现在系统软件)和使用(集中体现在软件工程)组成了软件学科的主体内容,而体系化的软件范型迭代更新则展现了学科发展的脉络。下图展示了在应用范围扩张和计算平台发展驱动下主要软件范型的发展历程。
例如,结构化软件范型是由于 20 世纪 60 年代计算机基础能力(计算、存储与外设)的快速发展和软件危机的出现而导致人们对基础的程序设计方法与语言的科学思考而产生的。它以结构化的程序抽象较好地协调了软件开发的平台空间与解空间,解空间和平台空间匹配较好,但问题空间和解空间差别大。随着计算机的应用范围从计算与数据处理向各类行业应用延伸,软件应用的问题复杂性迅速提升。而对象化(或称面向对象)软件范型进一步发展了从宏观角度控制复杂性的手段,如数据抽象、信息隐蔽、多态等,并强调将问题空间纳入软件设计的范畴,提出与问题结构具有良好对应关系的面向对象程序抽象与支撑机制,从而协调了软件开发的问题空间和解空间。同时,在平台空间也发展出中间件和容器等技术以支持对象抽象在网络化计算平台的实现。除了通用软件范型的迭代更新,软件学科中的各类专门抽象也随着平台空间和问题空间的发展而发展。例如,关系数据库以关系模型抽象很好地平衡了来自平台空间的性能需求和来自问题空间的易用性需求,取得巨大成功;但非结构化、海量数据的应用问题出现后,数据库不再采用严苛的关系模型,转而使用更为灵活的键值对结构、文档模型、图模型等更契合问题空间的抽象,同时给出这些抽象在大规模分布计算平台上的高效实现。
三、我国的软件学科、教育与产业
中国计算机软件事业发展始于 20 世纪 50 年代中后期。起步阶段,主要是面向国家战略急需,迅速填补程序开发、算法设计、系统软件等方面的空白,自力更生地为国产计算机研制配套的操作系统、编译系统和应用软件。改革开放后,中国软件界不断扩大国际交流与合作,在跟踪学习中迅速发展,全面融入世界。除在国产超级计算机上配备操作系统、高级语言编译系统和应用系统等软件,我国在程序理论、算法理论等方面取得一批基础性的成果,在大规模综合性的软件工程环境、软件自动化技术、软件中间件等方面取得一系列成果。
进入 21 世纪以来,在面向互联网的软件新范型、软件运行平台、群体化软件开发平台及大数据计算和应用平台等方面,中国取得有国际影响力的成果。
近十年来,在软件学科顶级国际期刊和学术会议上,中国学者开始大量发表研究成果,学术水平逐步得到国际学术界的认可。从计量指标来看,中国学者的论文、引文的数量及国际合作的规模呈现持续增长的态势,在主要会议和期刊上发表论文的占比渐增,部分指标已经位于世界前列。但是,我国软件学科在不同子研究领域的发展很不平衡,软件理论和语言等基础研究比较薄弱;以操作系统、编译环境、数据库系统、开发运维环境为代表的基础性软件设施和生态方面的自主构建能力还不能满足我国信息化进程的重大需求。
自 20 世纪 80 年代初以来,我国的软件教育,尤其是软件工程教育,迅速发展,先后开展了开设软件工程系列课程、试办软件工程专业、培养软件工程 硕士研究生等一系列建设工作。2001 年,国家开展示范性软件学院的建设,全国共有 37 家(首批 35 家)重点高校试办示范性软件学院。2010 年,教育部软件工程专业教学指导委员会编制了《高等学校软件工程本科专业规范》,以指导我国软件工程专业建设。2011 年,国家增设软件工程一级学科。截至目前,我国已有三百多所高校成立了软件学院或开设了软件工程专业,形成本、硕、博多层次成系统的软件工程教育体系。2019 年,软件工程专业教学指导委员会推出了中国软件工程知识体系 C-SWEBOK。2019 年,教育部出台的《2019 年教育信息化和网络安全工作要点》指出,要在中小学阶段逐步推广编程教育。
随着软件基础性的地位日益突出,国家对软件人才培养的数量和质量提出了更高的要求。在发展软件学科的专业教育之外,也需大力推进软件通识教育,并积极利用在线教育等新兴技术促进软件教育的发展。基于软件学科发展的技术和人才积累,我国的软件产业伴随着改革开放的东风起步。1980 年 6 月,国家电子计算机工业总局颁布试行《软件产品实行登记和计价收费的暂行办法》,中国软件登记中心、软件工程国家工程研究中心(北京)和中国软件行业协会先后成立,推动软件产业的形成和发展。此后,随着计算机的日益普及带来的需求增长、国家法律法规和产业政策的不断完善,我国软件产业迅速壮大。尤其是进入 21 世纪以来,其发展尤为迅猛。据国家有关部门统计,软件与信息技术服务业产值从 2000 年的 560 亿元增至2019 年的 7 万亿元,且近年来保持每年 10%以上的增速。根据工业和信息化部公布的数据,2019 年我国软件产业从业人数达到 673.2 万人。尽管面临国际软件企业巨头的竞争,但是国内软件企业通过自主创新,逐渐探索出符合中国国情的发展道路。近年来,国内龙头软件企业在软件研发投入和产出上持续增长,技术水平不断提高,市场影响力日益扩大。
在迅速发展的同时,我国软件产业也存在一些问题。在总量上,我国软件产业占电子信息产业的比重约为 30%,显著低于发达国家的 50%~70%,仍有巨大的发展空间。我国软件产业基础薄弱,在操作系统、编译系统、软件开发环境、数据库管理系统等基础软件和电子设计自动化(electronic designautomation,EDA)、计算机辅助工程(computer aided engineering,CAE)等核心工业软件领域有待摆脱受制于人的局面。我国软件企业科技创新和自我发展能力不强,数据和知识的确权、保护及共享水平亟待提高,产业链和产业生态有待完善。考虑到软件产业自身的发展规律和当前的国际政经竞合形势,我国软件产业的进一步发展和升级亟须软件学科在原创技术和人才供给方面提供更有力的支持。