# Conflicts:
#	Ch1-2-ProgrammingLanguage.tex
This commit is contained in:
Xin Peng 2020-04-02 12:56:06 +08:00
commit 1a67c5abcb
9 changed files with 185 additions and 212 deletions

View File

@ -33,7 +33,7 @@
\subsection{软件}
人们通常把软件理解为计算机系统中与硬件相对的部分,包括程序及其文档,以及相关的数据。
但这只是软件的存在形式,其所表达和实现的实质内容是以计算为核心手段实现应用目标的解决方案。
但这只是软件的存在形式,其所表达和实现的实质内容是\emph{以计算为核心手段实现应用目标的解决方案}
不同于一般物品,软件是一种人工制品,同时也是一种纯粹的逻辑制品。
作为一种人工制品,其需以适应其所处环境的方式完成应用目标;作为逻辑制品,其困难不在于物理限制而在于逻辑构造。
@ -106,7 +106,9 @@
度量、评估和预测其质量和效率等指标。软件度量评估通过量化发现软件和技术的规律,并评价解决方案对应用目标的满足程度。
这涉及到软件语言、构造和运行诸多方面,通常也将其归在软件工程的主要内容之中。
这四个子领域是密切联系、相互作用的,贯穿其中的是软件范型。
这四个子领域是密切联系、相互作用的,贯穿其中的是软件范型%
\footnote{这里的软件范型对应的英文是Software Paradigm。
而为遵循习惯在本书中程序设计和程序设计语言的Paradigm译为“范式”。}
每一个范型为软件工程师(或程序员)提供一套具有内在一致性的软件抽象体系,具化为一系列软件模型及其构造原理,并外化为相应的软件语言、构造方法、运行支撑和度量评估技术,从而可以系统化地回答软件应该“如何表示”、“怎样构造”、“如何运行”以及“质量如何”的问题~\cite{Mei:2016:INS:3086926,}。软件范型的变化将牵引构造方法、运行支撑、度量和质量评估的一系列变化,带动软件学科的发展。
\begin{figure}[htbp]
@ -168,7 +170,7 @@
\subsection{软件学科发展规律}
纵观软件学科的历史,可以发现其发展的外在驱动力始终来自于计算平台的发展和应用范围的扩张,
而内在驱动力来自于其核心问题的解决,追求更具表达能力、更符合人的思维模式的编程范
而内在驱动力来自于其核心问题的解决,追求更具表达能力、更符合人的思维模式的编程范
追求更高效地发挥计算机硬件所提供的计算能力,不断凝练应用共性并沉淀计算平台,同时更好地满足用户对易用性的需求。
这是由软件学科的方法论学科本质所决定的。
@ -203,7 +205,7 @@
但面临非结构化、海量数据的应用问题后,数据库不再采用严苛的关系模型,转而使用更为灵活的键值对结构、文档模型、图模型等更为契合问题空间的抽象,
同时给出这些抽象在大规模分布计算平台上的高效实现。
\subsection{我国的软件学科与产业}
\subsection{我国的软件学科与产业}\todo{可能需要根据第17章更新本小节}
我国软件学科起步较早在几代科学家的不懈努力下取得了一系列的成果。例如在上世纪60 年代中期就自主研发了ALGOL等语言的编译系统70年代初研发了XT系列操作系统
80-90年代在银河系列巨型机上配备了操作系统、高级语言编译程序等系统软件。
在软件相关的基础研究方面,我国在程序理论、算法理论等方面取得了一批基础性的成果,提出了以时序逻辑作为软件开发的统一基础。
@ -249,9 +251,9 @@
\section{发展趋势与挑战问题}
\subsection{软件成为基础设施}
当前,计算的泛在化和软件定义一切的发展趋势使得软件成为信息社会的基础设施,软件学科也进入了一个新的发展阶段。
人类信息化发展有三条并行不悖的主线:以单机应用为主要特征的数字化、以联网应用为主要特征的网 络化和以数据的深度挖掘和融合应用为主要特征的智能化。当前,计算的泛在化和软件定义一切的发展趋势使得信息化进入了一个新的时代,即从数字化阶段发展进入了网络化阶段,并正进入智能化阶段。这也使得软件真正成为信息社会的基础设施,软件学科也进入了一个新的发展阶段。
所谓“计算的泛在化”是指计算变得无处不在而又无迹可寻。万物数字化、万物互联使得计算无处不在,形成了--三元融合的发展趋势。计算自然融入人类 生产、生活活动的环境和过程之中,无需关注,不着痕迹。
所谓“计算的泛在化”是指计算变得无处不在而又无迹可寻。万物数字化、万物互联使得计算无处不在,形成了人机物三元融合的发展趋势。计算自然融入人类 生产、生活活动的环境和过程之中,无需关注,不着痕迹。
所谓“软件定义”是指软件以平台化的方式,向下管理各种资源,向上提供编程接口,其核心途径是资源虚拟化以及功能可编程。而“软件定义一切”则将软件平台所管理的资源和提供的编程抽象泛化到包括计算、存储、网络、软件服务等在内的各类计算资源,包括各种数字化机电设备和可传感物体对象在内的各类物理资源,乃至可通过激励机制调配的人力资源。
软件的基础设施地位具体表现为两个方面。一方面,软件自身已成为信息技术应用基础设施的重要构成成分,以平台方式为各类信息技术应用和服务提供基础性能力和运行支撑。另一方面,软件正在 “融入”到支撑整个人类经济社会运行的“基础设施”中,特别是随着以互联网和其他网络(包括电信网、移动网、物联网等)的不断交汇融合,软件正在对传统物理世界基础设施和社会经济基础设施进行重塑,通过软件定义的方式赋予其新的能力和灵活性,成为促进生产方式升级、生产关系变革、产业升级、新兴产业和价值链的诞生与发展的重要引擎。从经济社会整体发展的角度,计算成为了人类与物理世界互动的中介,软件对人类社会的运行和人类文明的发展进步起到重要支撑作用。
@ -264,13 +266,13 @@
软件学科的拓展来自软件应用范围扩张、计算平台的泛化和软件方法技术本身发展三个方面的驱动。
从软件应用范围扩张的角度看,计算日益变得无处不在,--三元融合不断深入。
软件的角色也从负责应用过程中孤立、确定的信息处理环节,转变为负责定义并协同整个应用涉及的--各类资源,实现应用价值。
从软件应用范围扩张的角度看,计算日益变得无处不在,人机物三元融合不断深入。
软件的角色也从负责应用过程中孤立、确定的信息处理环节,转变为负责定义并协同整个应用涉及的人机物各类资源,实现应用价值。
软件作为应用解决方案,涉及的范畴扩展到各类物理设备、物品和人类的主观体验与价值实现;
因而软件学科无可避免地涉及到控制科学、系统科学以及心理学、管理学、经济学和社会学等范畴的问题,并以软件学科自身的方法论将其内化和拓展。
从软件依赖的计算平台泛化的角度看,计算平台从传统的集中式单机发展到并行与分布平台,到今天的“云-边-端”异构多态计算平台。
软件定义技术为这个--融合的平台提供可编程计算抽象。
软件定义技术为这个人机物融合的平台提供可编程计算抽象。
软件作为解决方案,在这个计算平台之上利用数据资源,协同人机物,实现应用价值;同时也通过在这个平台上提供服务,并进一步积累数据,不断拓展这个计算平台。
从软件方法技术发展的角度看,软件的基本形态从计算机硬件的附属品到独立的软件产品,转变到云化和泛在的软件服务,%,转变为无处不在而又无迹可寻的泛在服务。
@ -289,9 +291,9 @@
%体现在其前所未有的代码规模、软件处理的数据量、软件用户量和使用的多样性、软件通过网络形成的连接量和种类、涉及承载运行的计算和物理设备量和种类等方面,也体现在且其所处环境的具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。
%第三层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法。
所谓软件学科的系统观,有三层含义。
第一层含义是复杂系统。现代软件系统具有前所未有的规模和内部复杂性,且所处的环境具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。第二层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法,超越还原论。第三层含义是系统工程。软件学科的关注点应从为应用系统提供高质量的软件部件,上升到关注--融合的整个系统的价值实现。
第一层含义是复杂系统。现代软件系统具有前所未有的规模和内部复杂性,且所处的环境具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。第二层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法,超越还原论。第三层含义是系统工程。软件学科的关注点应从为应用系统提供高质量的软件部件,上升到关注人机物融合的整个系统的价值实现。
以系统观看软件学科发展,软件科学与自然科学、社会科学等各领域产生了千丝万缕的联系,信息物理融合、软件社会化、大数据时代的软件新形态使得软件必然成为技术-社会系统。人机物融合的软件系统,其复杂性本身就呈现在系统乃至系统之系统的层面上,综合性和系统性也愈来愈强%系统观要求软件科学体系需超越传统还原论的思维藩篱
以系统观看软件学科发展,软件科学与自然科学、社会科学等各领域产生了千丝万缕的联系,信息物理融合、软件社会化、大数据时代的软件新形态使得软件必然成为技术-社会系统。人机物融合的软件系统,其复杂性本身就呈现在系统乃至系统之系统的层面上,综合性和系统性也愈来愈强,必须作为视作复杂系统来认识对待。这就要求超越传统还原论的思维藩篱,发展作为复杂系统的软件的理论
%
近年来软件科学在系统观方向上进行了不少探索包括基于复杂网络来认识大规模软件系统的整体性质、基于多自主体Agent的软件系统和方法、复杂自适应软件与系统、群体化软件开发方法等。网络化和大数据催发了融合软件系统与系统论研究的切入点数据驱动的软件设计和优化初显端倪在一些特定领域获得很大成功。
%人们对于数据驱动的软件的设计,不再遵循传统的自顶向下、分而治之、逐步精化的经典还原论法则,而是一种基于输入输出的黑盒的数据描述,训练出深度神经网络,充当所需要的软件。这种%
@ -301,13 +303,13 @@
% 新的软件方法学的关键在于如何认识因果和相关。因果观是有前提的相对的相关性是绝对的。软件发展在人机物融合时代人在回路、“拟人化”计算Human Computation、人机共融等需要关于软件规律的元级方法论创新。在软件系统的建模方面软件将从单纯信息处理向“场景计算”发展这里的场景包括物理环境和社会环境。在软件系统的机理方面软件的语义将由传统的还原论形式语义方法向多尺度、可演化的抽象方向发展组合方式将从传统的静态组合方式向动态可演化的、具有涌现特性的方式发展建立软件微观行为与宏观行为的辩证统一。面向人机物融合的认知软件作为人工智能或者“智能+”的承载,将深化复杂自主系统的智能行为理论和方法,软件定义将成为人机物融合系统中学习赋能(型)资源的管理途径。
软件科学的发展也将促进系统论和系统学的发展。在软件定义一切的时代,软件成为复杂适应系统认知的载体和实验平台,而软件发展中形成的以形式化体系为基础的规则驱动软件理论,高性能计算之上建立的模拟仿真技术,与进入智能化阶段形成的大数据驱动的软件方法,为形成还原论和整体论的辩证统一奠定了良好的基础,软件走向人机物融合更是为系统论和系统学的发展提供了实践探索的大场景。
软件科学的发展也将促进系统论和系统学的发展。在软件定义一切的时代,软件成为复杂适应系统认知的载体和实验平台,而软件发展中形成的以形式化体系为基础的规则驱动软件理论,高性能计算之上建立的模拟仿真技术,与进入智能化阶段形成的大数据驱动的软件方法,为形成还原论和整体论的辩证统一奠定了良好的基础,软件走向人机物融合更是为系统论和系统学的发展提供了实践探索的大场景。尤其是,正如 Jim Gray所指出大数据将成为人类触摸、理解和逼近现实复杂系统的有效途径。
% 展望未来,多自主体形成的协同与自组织以及自适应结构和能力、网络化产生的大数据与数据语义的复杂网络,将是软件系统在传统规则驱动基础上走向人机物融合超大规模系统的基础。软件作为复杂系统乃至复杂巨系统,在软件定义时代,软件科学将与系统学共同发展,软件方法学将吸收系统论成果,并支撑系统论和系统学的发展。
\subsubsection{形态观}
% 随着计算机技术的发展和计算机应用的不断深入,软件的外在形态逐步从硬件附属物、独立的软件制品发展到网络化服务。与之相对应,软件开发范型也经历了无结构、结构化、面向对象、面向构件、面向服务的发展历程。
当前,软件的外在形态正在朝着泛在化和可持续成长的方向发展:在空间维度上,软件应用的范围越来越广,对于人类生活和现实世界的渗透力越来越强,呈现出泛在化的趋势;时间维度上,软件应用随着上下文环境及用户需求的变化不断适应和演化,呈现出持续成长的趋势。与此同时,软件开发范型也进一步向网构化以及数据驱动方向发展。
当前,在空间维度上,随着应用的范围越来越广、软件对于人类生活和现实世界的渗透力越来越强,呈现出泛在化的趋势;时间维度上,随着应用上下文环境及用户需求的变化不断适应和演化,软件呈现出持续成长的趋势。与之相应地,软件的范型进一步向网构化以及数据驱动的方向发展。
% \subsubsubsection{软件应用的泛在化}
% 计算和信息处理早已通过各种移动设备、嵌入式设备以及各种传感器渗透到了我们日常生活的方方面面,并通过各种通信技术实现了广泛的设备互连和信息互通。各种软件应用以嵌入式的方式实现预定义的信息处理和通信功能。
%
@ -322,18 +324,18 @@
%在软件定义一切以及人机物融合的发展背景下产生的软件应用的泛在化和持续成长的
这一软件形态的发展趋势对于软件学科的内涵发展将产生多个方面的影响。
首先,“软件定义+计算思维”将成为每个人解决现实问题、满足自身需求的新范式。未来的人类社会及日常生活的方方面面都将以软件定义的人机物融合应用的方式来实现。实现用户需求的应用软件将越来越多地以最终用户编程的方式面向应用场景按需构造。因此,最终用户必须具备基于计算思维的问题解决方案规划和构造能力。同时,这也要求我们为支持人机物融合的泛在服务软件提供通用的编程抽象(包括编程模型和语言),支持这种最终用户编程。
首先,“软件定义+计算思维”将成为每个人解决现实问题、满足自身需求的新范式。未来的人类社会及日常生活的方方面面都将以软件定义的人机物融合应用的方式来实现。实现用户需求的应用软件将越来越多地以最终用户编程的方式面向应用场景按需构造。同时,这也要求我们为支持人机物融合的泛在服务软件提供通用的编程抽象(包括编程模型和语言),支持这种最终用户编程。
其次,适应泛在化、专用化的计算设备和运行平台成为软件的普遍要求。大量的应用软件将从通用的硬件和平台迁移到专用的硬件和平台上,需要新的方法和工具支持来实现大范围的软件迁移和优化。针对通用目的开发的软件需要不依附于硬件的长期生长演化能力,并具备面向不同专用硬件和平台的高效定制和裁剪能力
其次,适应泛在而专用化甚至变化的计算设备和运行平台成为软件的普遍要求。大量的应用软件将从通用的硬件和平台迁移到专用的硬件和平台上,需要新的方法和工具支持来实现大范围的软件迁移和优化。软件平台需要具有预测和管理未来硬件资源变化的能力,能适应硬件、底层资源和平台的变化,乃至能相对独立地长期生存演化
再次,内生的持续成长能力将成为软件的基本能力。除了自适应能力外,软件将越来越多地具备支持自演化的持续生长能力。这种持续生长意味着通过各种智能化算法调整软件的算法和策略从而实现优化运行,而且还意味着软件通过各种生成以及合成能力不断增强自身的能力。因此,未来软件定义中功能与数据的界限将进一步模糊,越来越多的功能将通过数据驱动(代码也可以看作一种数据)的方式进行表示,并实现自演化和自生长。
再次,内生的持续成长能力将成为软件的基本能力。除了自适应能力外,软件将越来越多地具备支持自演化的持续生长能力。这种持续生长不仅意味着通过各种智能化方法调整软件的算法和策略从而实现优化运行,而且还意味着软件通过各种生成以及合成能力不断增强自身的能力。因此,未来软件定义中功能与数据的界限将进一步模糊,越来越多的功能将通过数据驱动的方式进行设计,并实现自演化和自生长。
最后,软件与人将在不断汇聚的群体智中实现融合发展。软件的覆盖面越来越广、渗透性越来越强,最终用户对于软件的依赖也越来越强。由此,软件所能获得的关于用户行为和反馈的数据越来越全面和丰富,并在此基础上形成越来越强的群体智慧。这种群体智慧注入软件后又将服务于每个最终用户,使得他们能够在各种应用场景中以更加智能化和个性化的方式满足自身的需求,从而使得软件在使用中越来越有“灵性”和“人性”。未来的软件学科及相关研究需要摒弃“人”与“软件”二元分离的思维定式,更加自觉地考虑人机共融,不仅考虑“人因”,更要考虑“群智”
最后,软件与人将在不断汇聚的群体智中实现融合发展。软件的覆盖面越来越广,软件所能获得的关于用户行为和反馈的数据越来越全面和丰富,并在此基础上形成越来越强的群体智能。这种群体智能注入软件后又将服务于每个最终用户,使得他们能够在各种应用场景中以更加智能化和个性化的方式满足自身的需求,从而使得软件在使用中越来越有``灵性''和``人性''。%未来的软件研究需要更加自觉的考虑人机共融,不仅考虑``人因'',更要考虑``群智''
%
\subsubsection{价值观}
软件在整个系统中角色定位日益从负责应用过程中的信息处理环节转变为实现应用价值的主要载体。
这就要求对软件质量的理解从以软件制品为中心的传统质量观转变为以人为中心的价值观。
这就要求对软件质量的理解从以软件制品为中心的传统质量观拓展、转变到以人为中心的价值观。
传统的软件质量观下,人们主要关注软件制品的正确性、高效性、易用性等外部质量属性和易维护性、易移植性等内部质量属性。这些质量属性一般是客观的。
软件的价值观是建立在传统的软件制品质量属性基础上,强调用户体验,强调软件系统的应用对人类价值的实现。软件通过一系列价值要素体现了主观的人类价值。
除了可以用经济价值衡量的软件质量以外,尤其需要强调软件的可信性、安全性、
@ -356,22 +358,19 @@
%软件作为信息化社会的的基础设施,其可信性对于整个社会系统至关重要。
%软件系统的可信性,要求在软件开发、运行、维护、使用等过程采取有效的措施和方法确认其满足人们的普遍要求和期望,它体现了新时代软件的价值取向。
软件系统的可信性,包括软件本身可信和行为可信两个方面。
软件本身可信,指的是软件身份可信和能力可信,即:软件开发过程提供可信证据(如内部质量和外部质量)进行自证。
软件行为可信,指的是软件行为可追踪记录、不可更改,即:软件运行过程提供监控以控制其对周遭的影响,使得包含该软件在内的整个系统的对外表现符合用户要求。
软件形式日趋多样,加剧了软件可信面临的挑战。
软件系统的可信性包括软件本身可信和行为可信两个方面。软件本身可信,指的是软件的身份和能力可信,即:软件开发过程提供可信证据(如关于软件质量的过程记录和评审、测试结果等),对软件及其组成成分的来源和质量进行自证;软件行为可信,指的是软件运行时行为可追踪且记录不可篡改,即:通过监控软件运行过程并控制其对周围环境的影响,使得包含该软件在内的整个系统的对外表现符合用户要求。软件形态日趋多样,自身以及运行环境的复杂性越来越高,加剧了软件可信面临的挑战。
%
% 2安全性
%
% 安全性要求软件为人类活动和生存环境提供必要的安全保障包括系统安全Safety和信息安全Security。系统安全是指能及时有效地避免给人员、设施、环境、经济等造成严重损害信息安全是指能有效防控各类信息的非法获取、传播和使用。
安全性,既包括了功能安全,也包括了信息安全。功能安全是指避免给人员、设施、环境、经济等造成严重损失。其安全性设计通过主动冗余、失效安全等机制,降低系统失效导致灾难性后果的概率。信息安全性防护防止信息以及系统软硬件设施被非法获取、传播和使用。
%软件信息安全保障失效的后果之一就是系统安全故障因此本书将两种安全性合二为一统称为安全性Safety\&Security。传统软件质量观将安全视作系统质量的一部分强调软件个体的安全性。随着人机物融合软件系统已融入人类社会并与人类无缝交互。换言之泛在计算平台上软件与软件、软件与人的交互无处不在软件个体可影响整个泛在网络计算平台的行为软件个体的漏洞等故障很容易扩散传播
软件作为基础设施,描述并掌控了很多关键领域的资源,其安全性威胁会给整个系统带来致命的威胁。因此,安全性这一质量属性随着软件成为基础设施的趋势而变得愈发重要。
%
% 4持续性
%
软件系统的安全性要求其为人类活动和生存环境提供必要的安全保障包括功能安全Safety和信息安全Security。功能安全是指能及时有效地避免给人员、设施、环境、经济等造成严重损害信息安全是指系统保护自身免于入侵及信息的非法获取、使用和篡改具体包括机密性、完整性和可用性三方面。
%本书将两种安全性合二为一统称为安全性Safety \& Security。传统软件质量观将安全视作系统质量的一部分强调确定边界之内的系统安全性。
在人机物融合的趋势下,%软件已经广泛并深入渗透到人类社会生活的方方面面,与人形成了密切的交互关系。换言之,泛在计算平台上软件与软件、软件与人的交互无处不在,软件个体可影响整个泛在网络计算平台的行为;软件个体的漏洞等故障很容易扩散(传播)。这些也导致了信息安全问题很容易转化为防危安全问题。
软件作为基础设施,参与并掌控了很多关键领域的资源,其安全性威胁会给整个系统甚至人类社会带来致命的威胁。因此,安全性随着软件成为基础设施的现状变得愈发重要。
%软件系统成为支撑社会经济运行的基础设施,需具有持续提供服务的能力。
% 软件系统提供服务的持续性sustainability指的是在持续不间断运行、维护和发展过程中面对各种突发异常事件仍能提供令人满意的服务的能力。
@ -382,12 +381,16 @@
%
%作为人类价值载体,软件行为体现了人类价值观;由于软件无迹可寻,导致人类价值观又通过软件影响人类社会。因此,
软件系统的行为应符合社会道德标准,不对个人和社会产生负面结果,这种规范称为软件系统的伦理观。社会道德定义了一定时间区域内人们行为规范,可具体表现为无歧视、尊重隐私、公平公正等,并最终在软件系统的具体行为中体现。因此,软件系统的伦理观,体现于软件行为的上述方面,并需要通过软件开发和运行的诸多机制进行支持。
软件系统的伦理是指系统的行为应符合社会道德标准,不会对个人和社会产生负面结果。社会道德定义了一定时间区域内人们行为规范,可具体表现为无歧视、尊重隐私、公平公正等,并最终体现于软件系统的具体行为。因此,软件系统的伦理,也体现于软件行为的上述方面,并需要通过软件开发和运行的诸多机制进行支持。
%
% 4持续性
%
%软件支撑的基础设施服务,为满足各类应用快速增长、新技术不断涌现的需求,需要具有开放扩展能力,即能集成各种异构的技术及系统,支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应以及调控机制,以及个性化服务的定制等。显然,这种开放体系架构常常引入系统设计的脆弱性和质量隐患,从而给持续提供服务带来挑战。
软件系统成为支撑社会经济运行的基础设施需具有持续提供服务的能力。软件系统提供服务的可持续性Sustainability指的是在持续不间断运行、维护和发展过程中面对各种突发异常事件仍能提供令人满意的服务的能力。软件支撑的基础设施服务为满足各类应用快速增长、新技术不断涌现的需求需要具有开放扩展能力即能集成各种异构的技术及系统支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应以及调控机制,以及个性化服务的定制等。
软件系统的可持续性Sustainability指的是在持续不间断运行、维护和发展过程中面对各种突发异常事件仍能提供令人满意的服务的能力。这是软件作为信息社会基础设施的必然要求。同时,为满足各类应用快速增长、新技术不断涌现的需求,软件系统需要具有开放扩展能力,即能集成各种异构的技术及系统,支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应以及调控机制,以及个性化服务的定制等。
% \subsubsubsection{价值观下,软件方法学的关键科学问题}
% 软件价值观强化了可信性、安全性、持续性等具有新时代特色的价值要素,这些价值要素与软件开发运行维护过程的交融将经历一个长期的阶段,其带来的关键科学问题在于四个方面:
@ -411,7 +414,7 @@
%
\subsubsection{生态观}
软件的开发、维护、运行及使用所涉及的三大类元素(包括软件涉众、软件制品和软件设施)彼此交互、互相依赖,逐渐形成复杂生态系统,需要用生态化的观点去理解和研究。
软件的开发、维护和应用所涉及的三大类元素,包括软件涉众(开发者、用户及企业和组织等),软件制品,以及软件设施(支持软件活动的软件设施),彼此交互、互相依赖,逐渐形成复杂生态系统,需要用生态化的观点去理解和研究。
%生态化是软件的强大渗透力的必然结果:一方面软件活动延伸到了个体、群体和社会;另一方面软件所涉及的各种元素之间存在越来越多的依赖性、相关性和相互作用。
% \subsubsection{软件生态系统}
% “人-机-物”三元融合的新型应用模式涉及到广大社会群体,涉及面广,分工精细,不仅需要术业专攻的各种企业和个体参与,也使得它们可以根据其本身特点和业务诉求参与到开发、应用及其支撑的各个环节,从而形成联合生态。
@ -422,60 +425,36 @@
生态系统可以从下述维度来刻画。
%
首先,多元素交互是软件生态系统的最典型特征,而且交互的元素具有深刻的社会性。元素关系主要体现为协作、竞争和混合并保持生态的平衡。系统中要素关系之间的平衡是秩序之本,非平衡是运动变化之源。
首先,多元素交互是软件生态系统的最典型特征,而且交互的元素具有深刻的社会性(例如核心参与者---开发者和用户---都是社会体)。元素关系主要体现为协作、竞争和混合并以生态平衡为目标。系统中要素关系(对立、独立或互补)之间的平衡是秩序之本,非平衡是运动变化之源。
其次,生态系统的关键元素是软件涉众、软件制品和软件设施,三者互相融合、依赖和影响。涉众之间、制品之间、设施之间存在各种依赖,网状的依赖形成各种供应链,而涉众、制品和设施之间因为彼此依存也存在各种影响。生态的要义在于供应链的形成和各种影响的相互作用需要抵达平衡。
其次,生态系统的关键元素是软件涉众、制品和基础设施,三者互相融合、依赖和影响。涉众之间、制品之间、基础设施之间存在各种依赖,网状的依赖形成各种供应链,而涉众、制品和基础设施之间因为彼此依存也存在各种影响。生态的要义在于供应链的形成和各种影响的相互作用需要抵达平衡。
第三,生态系统是由人类智能和机器智能交互并融合而实现的。人类智能体现为分布在全球的开发者和用户;机器智能体现为支撑分布式开发和使用的软件工具与基础设施,支持人们更好地协作、开发和无处不在的使用,并且在开发和使用活动中不断迭代增强。通过众多的个体认知的汇聚,以及商业和宏观调控角度的战略调控,人类智能和机器智能相互协作、补充,并向群体混合智能方向发展。
%生态系统是由群体智能和计算机智能交互并融合而实现的。群体智能体现为分布在全球的开发者和用户,计算机智能体现为支撑分布式开发和使用的工具和基础设施(计算机辅助支持和人机交互)。群体智能(体现了众多的个体认知的汇聚,并涵盖商业智能和宏观调控的战略智能等)通过计算机智能凝炼为代码和产品,计算机智能支持人们更好地协作、开发和无处不在的使用,并且在开发和使用活动中不断迭代增强。
% \subsubsection{生态观下的软件学科的关键科学问题}
软件从过去的个体作坊开发,到不同组织内或组织间人员混合参与的组织式开发,发展到了数以万计互相依赖的软件或项目形成的供应链和庞大的生态系统。其转变给软件开发带来了前所未有的创新水平。同时,规模指数级增长的软件或项目及其之间庞杂的依赖关系使得软件供应链的复杂度激增,进而给软件开发和使用及市场带来诸多挑战,包括:大规模代码和项目的供应链行为如何理解和利用?面临高昂的学习成本,个体开发者如何学习并加入复杂项目和生态?复杂生态中群体如何协作,协作行为如何发展?产业生态如何形成,如何实现可持续发展?等等。
%
软件从过去的个体作坊开发,到不同组织内或组织间人员混合参与的组织化开发,再发展到数以万计互相依赖的软件形成的供应链和庞大的生态系统下的社会化开发。其转变给软件开发带来了前所未有的创新可能。
%同时,规模指数级增长的项目及其之间庞杂的依赖关系使得供应链复杂度激增,进而给软件开发、运行和使用及市场带来诸多挑战。
相应地,生态观对软件方法学带来显著的变化。软件和软件学科需要从以往关注个体软件的构建和运维转变到关注有广泛社会参与的软件体系的构建、运维和成长,以及软件生态的平衡和可持续发展。同时软件学科跟其他学科的交叉性将更为凸显,社会学、经济学、组织学、生物学等学科的理论和发现可被用来研究海量软件活动数据隐含的软件生态网络,其发现反过来对其他学科的发展也将很有裨益。
% 第一,个体开发者学习成本进一步增大。
%首先因为软件之间广泛存在的依赖关系使得掌握一个新的软件需要学习别的软件。例如对某个软件进行调试需要学习的相关软件依赖包可能会很多。其次复杂依赖关系带来了新的问题涉及更多的学习内容。例如不同开源项目遵循相应许可证License的约束并且不同许可证之间存在兼容问题这就要求开发者在借鉴开源代码时需要了解对应的许可证。这其中的关键科学问题是
% 个体开发者如何学习并加入复杂项目和生态?
%
% 第二,群体协作更加复杂。%首先群体元素更为多样,其次不同元素围绕生态中的各种软件活动存在错综复杂的协作关系,最后协作行为并非恒定而是不断发展和演化的。例如供应链上的软件项目互相依赖,开发者需要跨越多个项目去实现目标功能,开发者之间的协作不再拘泥于单个项目。例如具有不同商业目标的公司需要各司其职,互补有无,还需要跟竞争对手建立协作,在商业利益和群体目标之间实现平衡。已有的群体协作机制大多聚焦对单个项目的支持,互相依赖的项目之间因缺少有效的信息沟通与集成机制使得群体协调的复杂度增大。总之,这其中的关键科学问题是:复杂生态中群体如何协作,协作行为如何发展?
%
% 第三生态可持续性受到的威胁持续增加。软件供应链上的节点是组成生态的关键元素它们互相依赖互相影响。一个软件的漏洞有可能使得其他依赖该软件的项目面临同样的危机。例如影响昭著的Heartbleed漏洞所涉及的OpenSSL项目中的两个文件至少存在于其他六千多个开源项目中。各大企业因为软件供应链的存在对软件溯源即追踪代码问题的来源有很大的需求投资也是可观的。然而软件供应链上节点间的依赖关系隐藏在开发活动数据中看不见摸不着但广泛存在这就使得软件生态的可持续受到更多潜在威胁。而生态的形成和可持续发展影响到软件甚至信息产业的革新和发展。这方面的关键科学问题是大规模代码和项目的供应链行为如何理解产业生态如何形成如何实现可持续发展
%
% 总之,尽管有数千万个软件和项目及超过一千亿的源代码文件,但人们对软件生态中供应链的形成和发展,及其可能带来的风险和挑战却知之甚少。随着软件生态系统的快速延展,各类供应链关系逐步显现,如开发供应、技术供应、以及产销供应等。供应链中数以千万计的个体开发者、软件项目、公司等围绕软件形成复杂生态的各种活动数据都被软件支持工具记录下来,可以方便的获取,这为公众或者企业自己更好地理解生态的形成和发展,以降低或消除上述生态中的依赖风险、识别其他可能存在的风险提供了一种很好的方法。利用社会学理论对海量数据可视化出来的软件供应链网络进行分析,可以允许我们从个体学习、群体协作、以及生态持续的角度去识别评估风险,进而地更好保障软件生态的可持续发展。
%
% 综上,生态观对软件方法学带来显著的变化和跨越,软件学科跟其他学科的交叉性将更为凸显。软件和软件学科需要从以往关注个体软件的构建和运维转变到关注有广泛社会参与的软件体系的构建、运维和成长,以及软件生态的平衡和可持续发展。
%
%
%
\subsection{学科研究的主要问题}
软件学科的学科内容主要涵盖软件语言与软件理论、软件开发方法、软件运行支撑、软件度量和质量评估四方面的内容,而软件范型贯穿其间,使之相互配合形成方法论意义上的有机整体。软件范型的变化将牵引软件技术体系的变化。而上述系统观、形态观、价值观和生态观的新视角将引起软件范型的变化,并辐射到软件开发、运行和度量各个层面方法和技术的变革,进而对软件的整体生态与教育方面产生深刻的影响。
软件语言与软件理论方面将着力解决适应人机物融合新软件范型的抽象建立这一基础性问题。软件理论的核心是从复杂系统的角度来建立构建正确、高效、可靠、安全软件系统的理论和算法基础,特别是需要应对大规模的数据与计算的算法理论,以及在异构多态的新硬件架构和量子计算等新计算平台下的程序理论等等。与软件理论紧密相关,软件语言应重点研究领域和应用问题表达和求解的新抽象,加强大数据时代语言对数据处理的支持,以及开发人机物融合的泛在混成系统的编译技术,在领域特定语言和语言工程、多范式程序设计范式融合、软件语言和实现的内生安全等方面奠定软件定义的形态基础
软件理论和软件语言方面将着力解决如何建立适应人机物融合的软件范型基础这一基本问题。软件理论的核心是从复杂系统的角度来建立构建正确、高效、可靠、安全软件系统的理论和算法基础,\wang{拓展可计算理论传统研究的内容范围,特别是需要应对网络环境下日益增长的大数据与持续计算的算法与计算复杂性理论,以及在新的硬件架构(异构多态)和计算平台(量子计算平台)下的计算理论和程序理论等等}。与软件理论紧密相关,软件语言\wang{将重点研究泛在计算各种抽象,构建领域特定的程序设计语言,探索语言演化和生长机制、以及基于“语言工程”的软件设计方法和支撑环境,共同奠定软件范型发展的理论和语言基础}
软件构造方法将面向人机物融合场景的“软件定义”,软件需要在万物互联的平台上开发、运行、并持续演进地提供服务,具有自主性、协同性、演化性、情境性、涌现性和可信性等诸多特性。这在软件构造的技术方法和组织模式上均需要新方法和技术,包括:复杂场景分析与建模、软件自适应与自成长、基于人机协作的群智化软件开发、数据驱动的软件自动化、安全可信高度智能的开发运维一体化等。
软件构造方法将\wang{研究人机物融合场景下的软件开发范型和技术体系,也即研究面向应用场景需求、如何“软件定义”人机物融合的“场景计算机”。
%它要在万物互联的平台上持续演进地面向场景提供服务,具有自主性、协同性、演化性、情境性、涌现性和可信性等诸多特性。
面向高效、高质量、低成本的目标,软件构造的技术方法和组织模式上需要应对复杂场景分析与建模、群智开发、人机协作编程、开发运维一体化等以一系列挑战,亟待新方法和技术的发展。}
软件运行支撑需要满足软件作为社会基础设施的规模、效能、持续、演进等诸多关键需求,并适应人机物融合的各类资源和应用场景的管理和实现。这将集中反映在未来的泛在操作系统与运行平台方面,需研究支持软件定义的新型运行平台架构、泛在资源的高效虚拟化和灵活调度、复杂软件系统持续适应演化的共性支撑、人机物融合过程中的安全与隐私保护等关键问题。
软件运行支撑\wang{将向支撑人机物融合、具有“资源虚拟化”和“功能可编程”特点的泛化运行平台发展,需要满足作为社会基础设施在规模、适应、演化、安全、效能等方面的诸多严格要求。未来的泛在操作系统与运行平台,需在软件定义的新型运行平台架构、泛在资源的高效虚拟化和调度方法、软件系统持续适应演化的支撑机制、人机物融合过程中的安全与隐私保护等关键问题上有突破。}
软件度量和质量评估是软件学科的科学观察、工程构造相交融的重要方面。未来的重要变化是在复杂系统和软件生态层面的科学观察,用以指导软件开发和运行技术层面的持续创新。以各类软件大数据为核心的度量抽象将揭示
软件生态如何形成、如何可持续发展的基本规律,进而理解并驾驭大规模代码和项目的供应链行为、支持个体学习并加入复杂项目和生态,改进复杂生态中群体的协作。数据驱动和规则驱动将在软件质量与安全保障上发挥重要的作用。
软件度量和质量评估是软件学科的科学观察、工程构造相交融的重要方面,\wang{其未来的重要变化是在复杂系统和软件生态层面的科学观察,并以此为基础推进软件开发和运行层面的持续发展。一方面,将通过有效的度量和分析,理解和利用大规模代码和项目的供应链行为,研究个体学习和群体协作,并探索软件生态的形成和可持续机制机理等。另一方面,在软件成为信息社会的基础设施后,软件质量评估和保障的需求不断增长、更为突出。以应用场景的价值牵引,带动软件质量和确保技术的发展成为重要趋势,未来突破的重点将在数据驱动的智能系统质量保障、 人机物融合场景下的系统可信增强、大规模复杂系统安全缺陷检测、物联网环境下的系统安全保障等方面。}
“数据为中心”是人机物融合时代的最为突出的特征,数据工程和数据管理是未来软件构造和运行支撑的共性沉淀。在数据工程方面,需要应对异构数据整理、数据分析和数据安全与隐私保护等挑战。在数据管理方面,需研究如何管理大数据、特别是如何利用新硬件混合架构来实现大数据的管理。
在软件成为基础设施的时代,%软件学科的发展呈现了纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局,
应用软件系统日益以面向领域的人机物融合的场景计算为主要呈现形式。
%这在人机物融合时代复杂多变的应用和开放平台上将更为显现。在不同的应用领域,
面对系统边界的可伸缩性、系统成分的异构性和系统模型的混成性,需研究各领域的环境建模及其软件定义方法、模型驱动场景感知和认知、异构资源的统一表示和封装、系统学习赋能机制及性能确保、异构模型的融合和验证以及空间分布系统的的时空一致性等关键技术问题。
%,在共性方法上发展领域特定方法,并反馈、沉淀于共性方法。
当前智慧城市、无人自治系统、以及软件定义卫星等新兴应用领域为此方面的研究提供了大场景。
软件学科的发展呈现了纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局。这在人机物融合时代复杂多变的应用和开放平台上将更为显现。在已有共性方法上发展领域特定方法,并反馈并带动新型共性方法的发展,是学科发展的有效途径。\wang{在人机物融合及软件定义一切的大背景下,以卫星、流程工业控制、智慧城市、无人自主系统等为代表的重大领域都蕴含着平台再造与整合的发展机遇,即以软件作为万能集成器对相关系统原有的软硬件和服务资源进行解构然后以平台化的方式进行重构,从而建立软件定义的融合发展平台。此外,高性能 CAE 软件系统等专用工程软件也是软件学科的重要关注点。在支撑实现高端装备、重大工程和重要产品的计算分析、模拟仿真与优化设计等重大应用价值外,其高效能、高精度、高定制的需求亦将推动软件技术的发展。}
软件学科的发展离不开软件教育体系、内容、方法、手段的变革。软件教育需要适应“软件定义一切”普及教育的需求,还要在顺应人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育上有新发展。
软件学科的发展离不开软件教育体系、内容、方法、手段的变革。\wang{软件教育需要构建包括顺应``软件定义一切''发展趋势的通识教育、针对人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育和继续教育的完整体系,并建设发展相应的教育理念、方法和伦理。}
%在此软件学科发展的新阶段,可以上述系统观、形态观、价值观和生态观的新视角,展望本学科的主要挑战和研究问题:
%\begin{itemize}
@ -496,38 +475,57 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{政策建议}
%\section{资助机制与政策建议}
%在当前人机物三元融合往纵深发展、软件定义一切成为大势所趋的新时代,往为促进我国软件学科和软件产业的健康
\subsection{学科发展政策建议}
我们比任何时候都需要更加重视软件学科建设,牢固确立软件学科的优先发展地位,准确把握新时代软件学科的发展方向。建议从加强软件基础前沿研究、升级软件高等教育体系和构建软件产业良性发展环境等维度规划我国的软件学科发展战略。
\subsection{加强软件基础前沿研究}
新时代软件学科面对的软件是人机物融合、泛在、可演化的复杂系统,这样的系统已经超出传统软件学科关注的以计算机为中心的软件范畴;为此加强软件基础前沿研究是现实而紧迫的。
\begin{enumerate}
\item 大力加强面向泛在计算的程序设计语言以及支撑环境、软件开发方法的基础性研究,以领域特定的程序设计语言的设计原理与高效实现为核心,以程序设计语言的演化和互操作性机理为重点,通过程序设计语言的基础研究,加大程序设计语言的支撑环境和工具链的开发,从而有效而深入地解决计算的泛在和多样性,软件的复杂性和软件的安全性等带来的新时代的挑战。
\item \textbf{加强面向人机物融合泛在计算模式的软件理论研究。} 新时代软件系统是持续演化、人机物融合、泛在的开放复杂系统。以互联网(物联网)上大量涌现的人机物融合的智能云服务系统为例,软件系统需要处理持续增长的网络大数据,融合离散计算与连续的物理空间,服务行为具有不确定性和持续演化性。此类软件系统已经超出了当前算法和程序理论的研究范畴。需要借鉴复杂系统思想、理论和方法,拓展与控制理论的交叉,研究开放的新型软件理论,为新时代软件学科提供理论支持
%
\item 推进对以“连接协调”为核心的新型软件体系结构下的新一代操作系统模型和机理的研究。研究如何为各类新型异构资源建立适当抽象,并按照应用需求进行灵活调度。研究操作系统和运行平台如何充分发挥其“元层”支撑作用,有效驱动和实现“信息-物理-社会”空间的协同持续演化。
\item \textbf{加强面向泛在计算的程序设计语言及其支撑环境研究。} 随着计算向各个领域的渗透,降低普通用户学习门槛成为面向泛在计算的程序设计语言关注的重点。需要结合各个行业领域的软件定义需求,以领域特定的程序设计语言设计原理和高效实现为目标,研究面向领域应用的新型程序设计语言理论、程序设计语言的演化和互操作性机理、程序设计语言的支撑环境和工具链等,提供共性和个性兼顾的编程支撑。
%
\item 推进以人为中心的软件价值与伦理的研究和规范。面向泛在计算场景下的软件价值,研究各种社会因素带来的突破使用质量的新的软件价值,并建立相关约束和规范,包括提示用户可能存在的风险,制定智能软件的质量标准、检测方法和实施办法等。
\item 推进对大规模代码和项目的供应链和生态行为的研究和分析。研究个体如何认知复杂项目和生态,群体如何高效高质地协作完成各类软件活动相关的任务,涵盖公司、个体开发者及用户在内的广泛社会力量如何围绕软件构建可持续性演化的生态系统等。%并进一步推进国内软件产业生态系统的建设。
%\item加强各个领域、各种形态、各种应用场景下的软件技术知识产权保护方法和措施的研究,建立公平、公正的环境,持续推动软件技术创新进程。
\item \textbf{布局基于软件定义方法的泛在操作系统原理和技术研究。} 需要研究以``连接协调''为核心的新型软件体系结构下泛在操作系统模型和机理、各类新型异构资源的抽象机制及其虚拟化技术、应用需求导向的按需高效资源调度、内生可信安全机制等,以及研究如何充分发挥泛在操作系统的``元层''共性基础支撑作用,有效驱动和实现``信息-物理-社会''空间的协同持续演化。
%
\item \textbf{探索以数据为中心的新型应用开发运行模式及其平台支撑。} 随着大数据应用的繁荣和数据作为主要资产定位的确立,围绕数据部署应用将成为一种主要的应用模式。需要研究异构海量数据的抽象和建模、多元(源)数据资源的互操作和调度管理技术及平台、以多元(源)数据为中心的应用快速开发和高效运行技术、以及相应的数据安全和隐私保护技术等。
%
\item \textbf{加强对大规模代码和项目的供应链和生态行为研究。} 开源、众包等软件开发社区模式已成为传统组织型软件开发模式之外的重要模式。需要以刻画和分析复杂的软件供应链模型为基础,研究个体如何高效认知复杂项目和生态、群体如何高效高质地协作完成各类软件开发相关的任务、软件涉众如何围绕软件构建可持续性演化的生态系统等。基于互联网群体智能的软件开发方法和支撑平台研究、基于软件工程大数据的软件自动化方法和技术研究、以及软件知识产权的甄别和保护技术也是值得关注的重点。
%
\item \textbf{重视软件技术研究和应用的价值取向和管理。} 鉴于软件的基础设施化的发展趋势,需要加强复杂人机物融合系统安全可靠确保、机器学习赋能软件的质量评估和风险防控等,同步发展软件确保工具环境、软件基础设施以及软件生态治理。需要推进以人为中心的软件价值观研究和规范,研究各种社会因素带来的超越软件使用质量的新型软件价值及其约束和规范、可能风险的防护和提示机制等,软件技术及其应用的伦理研究也应受到关注。
\end{enumerate}
\subsection{软件教育政策建议}
\subsection{升级完善软件学科高等教育体系}
软件不仅成为社会经济活动的基础设施,还将重塑人们的思维模式。在现代高等教育体系中,软件教育不仅仅是面向软件专门人才的专业教育,还应该成为覆盖全体大学生的通识教育。
\begin{enumerate}
\item 推行以“计算思维 + 创新思维”为核心的普及教育,包括软件学科核心认知能力的成长模型和规律及其知识体系、以计算思维为核心,融合创新思维的系统化认知能力培养方法和适应不同认知水平且贯穿终生的软件学科普及教育方法。
\item \textbf{布局面向全体大学生的软件通识教育。} 要通过以``算法抽象+编程思维''为核心的认知教育,帮助学生形成用算法和编程理解数字空间的认知能力;通过以``语言案例+编程案例''为核心的实践案例教育,帮助学生形成自主学习编程工具、解决现实计算问题的实践能力。要使大学软件通识教育与中小学的计算机基础教育相衔接;与当下大学开设的``大学计算机基础''通识课程融合衔接;还要与大学各类专业教育和未来终身学习相衔接
%
\item 推行以“多学科交叉融合知识体系+系统能力和解决复杂工程 问题能力培养”为核心的专业教育,包括建立面向多学科交叉融合的软件学科专业教育的知识体系和软件学科专业教育核心能力的培养方法。
\item \textbf{重构软件学科专业人才培养体系。} 需将以计算机为核心的软件学科知识体系拓展为以网络为平台的软件学科知识体系,系统能力培养标准也要由计算机空间拓展到网络空间,建立与软件新``四观''相适应的高层次研究型专门人才培养方法,强化解决以网络为平台的复杂系统问题的能力,造就勇于开拓新时代软件学科``无人区''的探索者,为中国引领新时代软件学科发展培养领军人才
%
\item 推行以“专业学科知识 + 软件学科知识”为基础,实现复合型、创新型和跨界人才培养的其他学科专业教育,建立基于“专业学科知识 + 软件学科知识”的其他学科专业教育知识体系和具有软件学科知识和能力的复合型、创新型和跨界专业人才培养方法
\item \textbf{开展面向其他学科专业的软件工程教育。} 为适应``软件定义一切''的时代特点,结合各行业领域信息化转型发展需求,需构建面向其他学科专业的软件工程课程体系,实现复合型、创新型和跨界人才培养,有效提升行业领域应用专门人才与软件专业人才合作开发复杂应用软件的能力,为各行业领域提供高端软件开发人才,提高基于计算机和网络开发仿真、设计、分析、制造、测试等工具软件的能力和水平
%
\item 开展以“探究成才规律 + 寻求理念创新 + 开发支撑软件”为 核心的教育方法改革,探索软件学科人才培养模型及规律、研究软件学科资源在人才培养中的应用,推进群体化学习和大规模在线开放实践 MOOP研发软件学科教育的支撑软件
\item \textbf{构建并开放软件教育支撑平台。} 要把握软件学科实践性的特点坚持以泛在化的计算机和网络为支撑工具支持软件人才实践能力培养研发支持软件人才培养的支撑软件和大规模开放在线课程Massive Open Online CourseMOOC与开源软件资源以及开源软件开发部署云平台对接构建开放共享的软件开发、部署、维护、升级和演化的实训平台推广大规模开放在线实践Massive Open Online PracticeMOOP教学对接软件产业环境形成支撑大学教育和终身教育的开放平台
\end{enumerate}
\subsection{软件产业政策建议}
\subsection{构建软件产业良性发展环境}
在软件定义一切、成为经济社会基础设施的时代背景下,强大的软件产业需要强大的软件学科支撑,同时也提供了软件学科发展的沃土。需要把握住新时代软件带来的颠覆式发展机遇期,实现创新发展和跨越发展。
\begin{enumerate}
\item 加强各个领域、各种形态、各种应用场景下的软件技术知识产权保护方法和措施的研究,建立有针对性的知识产权保护、投融资政策环境,培育健康发展的软件产业生态。
\item 建立数据开放机制和平台,鼓励围绕大数据聚集、管理、分析和应用的大规模协作制定数据开放的相关政策,开放地理、气候、统计、环境、交通等政府数据,并建立基于互联网的大数据开放共享平台,以及开放的数据分析工具库,鼓励不同的组织和个人基于此平台开展数据聚集、管理、分析和应用的大规模协作,挖掘数据蕴含的价值,提供高附加值的数据类软件产品和服务。
\item 面向智慧城市、移动互联网应用等热点领域加大投入,支持高附加值的新型网络计算操作系统和应用支撑工具平台的技术创新和产品推广,
%针对智慧城市、移动互联网应用等当前需求迫切且应用价值高的热点领域,加大投入力度,把握互联网、移动互联网、物联网等平台深度普及所带来的发展契机,支持产学研用相结合的技术创新和成果转化,建立自主可控的新型网络计算操作系统和应用支撑工具平台,
打造针对热点应用领域的高附加值基础软件产品和服务。
\item \textbf{完善知识产权保护。} 需加强软件知识产权保护的宣传,加强各个领域、各种形态、各种应用场景下的软件技术知识产权保护方法和措施研究以及法规制定,完善健全软件知识产权保护体系并建立严格的实施机制,切实保护软件技术和应用创新,促进我国软件产业的技术升级。
%
\item \textbf{布局新基础设施建设。} 结合数字中国建设和数字经济发展新需求打造新一代信息技术主导的社会经济活动的新型基础设施如5G通信网、物联网、人工智能开放平台和大型数据中心等。同时加快推动传统物理基础设施的软件定义改造和升级如电力传输网、交通路网等。以此为基础面向传统行业领域数字化转型、网络化重构和智能化提升的迫切需求大力推进软件定义方法在各行业的推广应用推进工业互联网技术研发和平台构建按需打造各行业特定的泛在操作系统。
%
\item \textbf{大力发展新型应用。} 需面向智慧城市、社会治理、敏捷物流、信息消费等重点领域,加强投入和引导,构建相应的大数据互操作平台和应用开发工具,支撑高附加值软件产品和服务的技术创新,培育人机物融合的新型应用。
%
\item \textbf{积极培育开源生态。} 需培育基于开源模式的公益性生态环境建设,``参与融入''国际成熟开源社区,``蓄势引领''中文开源社区。探索开源生态下的新型商业模式,并以其为抓手提升我国在信息技术领域的核心竞争力和国际影响力,特别是通过中文开源平台的建设构建国家软件资产托管和共享体系。
%
\item \textbf{推进公共数据开放。} 需通过政策和法规制定,鼓励地理、气候、统计、环境、交通等政府数据和公共数据开放,构建基于互联网的大数据开放共享平台及开放的数据分析工具库,支持不同组织和个人开展数据汇聚、管理、分析和应用的大规模协作和高附加值的数据类软件产品和服务创新。
\end{enumerate}

View File

@ -10,7 +10,7 @@
\end{minipage}
\end{center}
这个描述主要从计算机系统中与硬件相对的角度,说明了软件的存在形式。
而从软件的历史渊源看,它本质上是刻画完成给定应用目标的\index{可计算函数}可计算函数~\cite{Turing:1937:ComputableNumbers},这构成了软件的实质内容。在本书中,我们将软件\index{软件}视作是\emph{以计算为核心手段实现应用目标的解决方案}。软件属于人工制品,以适应其所处环境的方式完成应用目标;更进一步,它是一种计算的逻辑制品,既有图灵可计算性~\cite{Turing:1937:ComputableNumbers, Cooper:2002:CT:961908}和计算复杂性~\cite{Cook:1983:OCC:358141.358144}的刚性约束,同时又有通用图灵机模型给予的巨大的通用性和灵活性。
而从软件的历史渊源看,\wang{它所描述的实质内容是用来完成给定应用目标的\index{可计算函数}可计算函数~\cite{Turing:1937:ComputableNumbers}}。在本书中,我们将软件\index{软件}视作是\emph{以计算为核心手段实现应用目标的解决方案}。软件属于人工制品,以适应其所处环境的方式完成应用目标;更进一步,它是一种计算的逻辑制品,既有图灵可计算性~\cite{Turing:1937:ComputableNumbers, Cooper:2002:CT:961908}和计算复杂性~\cite{Cook:1983:OCC:358141.358144}的刚性约束,同时又有通用图灵机模型给予的巨大的通用性和灵活性。
软件已经成为人类认识和改造世界的关键工具,承载着信息时代人类的文明。
软件科学与工程学科以下简称软件学科是以软件为基本研究对象的人工科学或曰“人工制品科学”Science of Artificial~\cite{Simon:1996:SA:237774}, 包括研究和分析、开发和运行、使用和演化软件等活动所涉及的理论、原则、方法、技术、工具和系统等。
@ -78,11 +78,11 @@ EDSAC作为第一台存储程序结构的电子计算机给出了通用图灵
第一个事件是软件与硬件的解绑~\cite{Humphrey:2002:SUP:513126.513132}。早期的软件依附在硬件之上解决应用问题软件完全是针对其运行的硬件开发不能再用于其它硬件。此时的计算机系统中硬件和软件是相互“捆绑”的。技术上的一体带来了商业上的一体。计算机公司如IBM的商业模式在收费上采取只考虑硬件价格而软件和系统服务免费的策略。这在当时对于用户是很有吸引力的也增强了公司的竞争力。到1964年时情况发生了变化IBM发布了新的IBM S/360系统其目标是用户能够升级硬件系统而不需要替换或改变他们的应用程序。这在事实上形成了一种把应用解决方案剥离出硬件系统的技术可行性。而稍后RCA也宣布了其新的Spectra 70系统与IBM S/360兼容。这使得IBM难以阻止RCA在市场上“免费”使用其软件。1968年IBM宣布了其软件和硬件系统的解绑。此后软件从计算机系统硬件中剥离出来获得了可以独立发展的空间有机会产生独立的商业和竞争模式。可以看到除了商业上的反垄断和市场竞争因素外软件本质上所具备的“解决方案”的独立性和计算平台抽象使得解绑具备了历史必然性和技术可行性。软件学科的独立存在凸显。之后的发展以Bill Gates创立Microsoft和Larry Ellison创立Oracle为标志软件成为独立产品并形成巨大产业应用领域从科学计算和商业计算开始不断扩大逐渐从作为硬件附属品的软硬件一体化阶段过渡到软件产品化、产业化阶段。人们逐步认识到软件是计算机系统的灵魂其共性沉淀形成的系统软件向下管理计算机系统的各类资源向上满足应用软件对计算机系统的功能需求。
第二个事件是软件工程\index{软件工程}的提出。计算机能力的快速提高和软件复杂性增加导致了所谓的“软件危机”现象。典型的案例是IBM S/360的操作系统OS/360的进度、开销和可靠性均不尽人意。北大西洋公约组织NATO在1968年举行了首次软件工程会议~\cite{Naur:1969:SER:1102020}。在这次会议上专家们首次提出需要与其他领域的工程方法一样系统化地进行软件开发。正如Margaret Hamilton在开发阿波罗在轨飞行和导航系统项目中所明确指出的“我努力使软件具有其应有的地位使得构造软件的活动受到应有的尊重因而我开始用软件工程将其与硬件和其他类型的工程区分开来成为整个系统工程的一部分”~\cite{Cameron:2018:ComputingEdge}。软件工程的出现激活了软件发展的巨大活力。这一史实也说明了软件发展的外在驱动力,即不断增长的应用需求和计算能力。
第二个事件是软件工程\index{软件工程}的提出。计算机能力的快速提高和软件复杂性增加导致了所谓的“软件危机”现象。典型的案例是IBM S/360的操作系统OS/360的进度、开销和可靠性均不尽人意。北大西洋公约组织NATO在1968年举行了首次软件工程会议~\cite{Naur:1969:SER:1102020}。在这次会议上专家们首次提出需要与其他领域的工程方法一样系统化地进行软件开发。正如Margaret Hamilton在开发阿波罗在轨飞行和导航系统项目中所明确指出的“我努力使软件具有其应有的地位使得构造软件的活动受到应有的尊重因而我开始用软件工程将其与硬件和其他类型的工程区分开来成为整个系统工程的一部分”~\cite{Cameron:2018:ComputingEdge}。软件工程的出现激活了软件发展的巨大活力。这一史实也证实了软件发展的外在驱动力,即不断增长的应用需求和计算能力。
\subsection{软件发展的主线}
软件通常可分为应用软件、系统软件和支撑软件。应用软件是指特定应用领域专用的软件,面向终端用户完成既定应用目标,例如办公软件、聊天软件、财务软件等系统软件位于硬件层之上为应用软件提供服务如Windows或Linux操作系统、各种数据库管理系统、编译程序及软件中间件等支撑软件是支撑各种软件的开发与维护的软件如软件开发工具及环境等。系统软件和支撑软件又统称为基础软件。
软件通常可分为应用软件、系统软件和支撑软件。应用软件是指特定应用领域专用的软件,面向用户完成既定应用目标,例如工业控制软件、飞行控制软件、公共管理软件、人机交互软件、聊天软件、财务软件等系统软件位于硬件层之上为应用软件提供服务如Windows或Linux操作系统、各种数据库管理系统、编译程序及软件中间件等支撑软件是支撑各种软件的开发与维护的软件如软件开发工具及环境等。系统软件和支撑软件又统称为基础软件。
追溯软件发展可以有多条线索,既可以考察计算机系统平台、应用形式的发展,也可以采用程序设计语言、系统软件、支撑软件等角度。
从计算平台看,软件运行平台从主机平台、微机平台、局域网平台、互联网平台到万物互联平台;系统软件也从批处理式、交互式、网络化发展到云边端融合等模式去支撑从少量集中到海量分布异构的资源管理和利用。
@ -205,21 +205,21 @@ Sapir-Whorf语言相对论假设对语汇的重要性给出了一个表述~\cite
纵观软件学科发展历史,随着计算时代从数字化时代发展到网络化,再到目前人机物融合、智能化时代,软件和软件学科在继承中发展;变化成为常态,正所谓“变是不变的真理”。我们从两个方面来认识软件学科发展的规律:第一,本学科发展的驱动力是什么;第二,本学科的研究方法论是什么。
\subsubsection{发展的驱动力}
软件是兼具刚性约束和柔性适应的产物。平台和应用的可计算、复杂性和正确性形成了软件需要遵循的刚性约束,而内在的各种方法学引导、功能和适应性设计则造就了软件的柔性多样,也给予了软件学科无穷的发展活力。作为一门面向人工制品的方法论学科,软件学科发展的驱动力主要来自于两个方面:外在驱动力来自于应用范围的扩张和计算平台的发展;内在驱动力来自于其核心问题的解决,追求更高效地发挥计算机硬件所提供的计算能力,不断凝练应用共性并沉淀到系统软件平台中,同时更好地满足用户对易用性的需求。此外,软件发展驱动力还来自面向开发者的人本属性,包括人的认知规律和人力资源管理的深化与提高。
软件是兼具刚性约束和柔性适应的产物。平台和应用的可计算、复杂性和正确性形成了软件需要遵循的刚性约束,而人的认知规律和人力资源管理的深化与提高,内在的各种方法学引导、功能和适应性设计则造就了软件的柔性多样,也给予了软件学科无穷的发展活力。作为一门面向人工制品的方法论学科,软件学科发展的外在驱动力来自于应用范围的扩张和计算平台的发展;内在驱动力来自于其核心问题的解决,追求更高效地发挥计算机硬件所提供的计算能力,不断凝练应用共性并沉淀到系统软件平台中,同时更好地满足用户对易用性的需求。
\textbf{外在驱动力}
计算平台的发展和应用范围的扩张分别构成了软件学科发展的平台驱动力和应用驱动力。不断变迁的平台构成了软件灵活成长的平台空间;而不断扩张的应用构成软件所解决的问题空间。在平台空间和问题空间之间,构成了由软件填补的解空间。软件的发展是这三个空间变化、渗透和互动的产物。
计算平台的发展和应用范围的扩张分别构成了软件学科发展的平台驱动力和应用驱动力。不断变迁的平台构成了软件灵活成长的平台空间;而不断扩张的应用构成软件所解决的问题空间。在平台空间和问题空间之间,构成了由软件填补的解空间。软件的发展是这三个空间变化、渗透和互动的产物。
应用拉动,平台变化,推动软件的发展。从应用驱动力的角度,软件的应用范围不断扩展,渗透力不断增强。不断增长的应用诉求拉动了软件技术从最初单纯的计算与数据处理拓展到各个行业的应用、乃至现在无所不在的应用,软件学科的无可比拟的渗透力变得空前的强大,软件的形态、开发方法和运行支撑等诸多方面发生了巨大的变化。从平台驱动力的角度,计算平台从单机发展到局域网、互联网、物联网,从云计算、端计算、边缘计算到泛在计算,形成了从封闭、静态环境(单机计算平台)到开放、动态环境(泛在计算平台)的态势,造就了软件发展的不竭动力,使得软件所能提供的解决方案的解空间空前强大。在应用驱动力和平台驱动力的联合作用下,软件正走向“定义一切”。
应用拉动,平台变化,推动软件的发展。从应用驱动力的角度,软件的应用范围不断扩展,渗透力不断增强。不断增长的应用诉求拉动了软件技术从最初单纯的计算与数据处理拓展到各个行业的应用、乃至现在无所不在的应用,软件学科的无可比拟的渗透力变得空前的强大,软件的形态、开发方法和运行支撑等诸多方面发生了巨大的变化。从平台驱动力的角度,计算平台从单机发展到局域网、互联网、物联网,从云计算、端计算、边缘计算到泛在计算,形成了从封闭、静态环境(单机计算平台)到开放、动态环境(泛在计算平台)的态势,造就了软件发展的不竭动力,使得软件所能提供的解决方案的解空间空前强大。在应用驱动力和平台驱动力的联合作用下,软件定义一切”成为趋势
\textbf{内在驱动力}
从学科内在的技术角度看,软件的发展有四个基本驱动力,即,追求更具表达能力、更符合人类思维模式、易构造、易演化的软件模型;支持高效率和高质量的软件开发;充分发挥硬件资源的能力,支持高效能、高可靠和易管理的软件运行;桥接异构性,实现多个应用系统之间的互操作。基于抽象的复杂性控制成为学科发展的核心要素。围绕抽象和复杂性控制,软件技术从系统化走向形式化和自动化,软件也向超大规模、开放适应、持续成长方向发展。
从学科的技术角度看,软件的内在驱动力来自五个方面,即,追求更具表达能力、更符合人类思维模式、易构造、易演化的软件模型;支持高效率和高质量的软件开发;充分发挥硬件资源的能力,支持高效能、高可靠和易管理的软件运行;桥接异构性,实现多个应用系统之间的互操作;更好地满足用户对易用性的需求。基于抽象的复杂性控制成为学科发展的核心要素。围绕抽象和复杂性控制,软件技术从系统化走向形式化和自动化,软件也向超大规模、开放适应、持续成长方向发展。
\subsubsection{学科方法}
从研究的角度,软件学科需要建立在计算机上运行软件的科学和工程基础。从应用的角度,需要建立开发软件制品的方法和过程来高效、高质和低成本地构建软件系统。与计算学科类似~\cite{Denning:1989:CD:63238.63239},在软件学科中,基本方法可以归为三类,即理论方法、实验方法和设计方法。
从研究的角度,软件学科需要建立在计算机上运行软件的科学和工程基础。从应用的角度,需要建立开发软件制品的方法和过程来高效、高质和低成本地构建软件系统。与计算学科类似~\cite{Denning:1989:CD:63238.63239}\todo{文献作者有误}在软件学科中,基本方法可以归为三类,即理论方法、实验方法和设计方法。
\textbf{理论方法}
@ -235,7 +235,8 @@ Sapir-Whorf语言相对论假设对语汇的重要性给出了一个表述~\cite
上述三类方法各自具有不可替代的作用,理论方法用来描述和揭示软件模型及其之间的联系;实验方法运用实验手段收集数据和实验结果,来预言软件行为并与现实世界比较;设计方法则是依据软件模型和计算对象的映射规律来设计完成解决方案。
以模型为数学对象,形成了软件学科的基础(数学)理论方面的内容,其基本方法是理论方法。从软件代码逆向到软件抽象模型,即从软件代码能否构造一个符合该代码系统的模型,并对软件进行断言或者预言,形成了软件学科的科学方面的内容,其基本方法是实验方法。从应用目标到设计软件模型再到软件,即面向问题获得求解模型并构造一个符合该模型的软件系统,形成了软件学科的工程方面的内容,其基本方法是设计方法。这三个方面在软件学科的研究中并不是正交的,往往会联合在一起共同解决学科问题,三者的紧密联系也使得软件学科区别于数学、自然科学和传统工程科学。
以模型为数学对象,形成了软件学科的基础(数学)理论方面的内容,其基本方法是理论方法。从软件代码逆向到软件抽象模型,即从软件代码能否构造一个符合该代码系统的模型,并对软件进行断言或者预言,形成了软件学科的科学方面的内容,其基本方法是实验方法。从应用目标到设计软件模型再到软件,即面向问题获得求解模型并构造一个符合该模型的软件系统,形成了软件学科的工程方面的内容,其基本方法是设计方法。这三个方面在软件学科的研究中并不是正交的,往往会联合在一起共同解决学科问题。 %三者的紧密联系也使得软件学科区别于数学、自然科学和传统工程科学。
\todo{软件与传统工程科学的差别}
%\begin{itemize}
% \item \textbf{举例}:基于大代码的软件自动生成方法就综合软件科学中的理论、实验和设计方法。程序综合是计算机科学的明珠。其理论研究是长期以来的科学问题。演绎推理的理论方法是其重要途径,形式规约开始构造一个正确的程序,自动定理证明和归纳综合是其基本思路,并逐步发展到了归纳推理。近来随着海量代码的累积,实验统计的方法逐步兴起,以实验方法从代码数据中学习,建立程序综合和推理的启发式预言有效地提高了综合效率。以归纳推理和统计推理相结合的程序综合设计方法成为了当前软件自动化研究的重要趋势,在代码自动生成、代码修复、人机协同编程等方面取得了重要进展。

View File

@ -1,9 +1,7 @@
% !TEX root = main.tex
\section{概述}
%概念的界定,怎么展开
软件工程师在开发软件系统时,不可避免地要用到某种程序设计语言。顾名思义,程序设计语言\index{程序设计语言}是程序员用来描述程序的语言,为程序员表达基于计算的解决方案提供了(通用)抽象设施。一般来说,每种程序设计语言往往具有某种应用背景、所属的语言范式\todo{前面脚注区分软件范型和语言范式}以及各自的个性特征。历史上曾出现过数百种程序设计语言。近几年TIOBE\footnote{https://www.tiobe.com/tiobe-index/}、IEEE\footnote{https://spectrum.ieee.org/computing/software/the-top-programming-languages-2019} 等给出了目前常用的程序设计语言排名居于前列的包括Java~\cite{arnold2000java}、C~\cite{kernighan2006c}、Python~\cite{van2011python}、C++~\cite{stroustrup2000c++}、C\#~\cite{hejlsberg2006c}、JavaScript~\cite{crockford2008javascript}、PHP~\cite{lerdorf2002programming}等。大多数程序设计语言的创建都受其之前语言概念的启发而新出现的程序设计语言提供更强更为自然的抽象设施使程序员的工作变得更加简单、有效。Sebesta~\cite{sebesta2016concepts}从高级语言机制的设计角度对程序设计语言进行了深入细致的介绍和比较。
程序理论是软件理论的重要组成部分。作为程序设计语言的基础,提供程序抽象及其之间的推理和构造原理,不仅可以用于描述程序设计语言的语法、语义,还可以支撑程序的正确性构造、指导程序的高效正确的实现。
软件工程师在开发软件系统时,不可避免地要用到某种程序设计语言。顾名思义,程序设计语言\index{程序设计语言}是程序员用来描述程序的语言,为程序员表达基于计算的解决方案提供了(通用)抽象设施。一般来说,每种程序设计语言往往具有某种应用背景、所属的语言范式\todo{前面脚注区分软件范型和语言范式}以及各自的个性特征。程序理论作为程序设计语言的基础提供程序抽象及其之间的推理和构造原理不仅可以用于描述程序设计语言的语法、语义还可以支撑程序的正确性构造、指导程序的高效正确的实现。在计算机科学领域曾出现过数百种程序设计语言。近几年TIOBE\footnote{https://www.tiobe.com/tiobe-index/}、IEEE\footnote{https://spectrum.ieee.org/computing/software/the-top-programming-languages-2019} 等给出了目前常用的程序设计语言排名居于前列的包括Java~\cite{arnold2000java}、C~\cite{kernighan2006c}、Python~\cite{van2011python}、C++~\cite{stroustrup2000c++}、C\#~\cite{hejlsberg2006c}、JavaScript~\cite{crockford2008javascript}、PHP~\cite{lerdorf2002programming}等。大多数程序设计语言的创建都受其之前语言概念的启发而新出现的程序设计语言提供更强更为自然的抽象设施使程序员的工作变得更加简单、有效。Sebesta~\cite{sebesta2012concepts}从高级语言机制的设计角度对程序设计语言进行了深入细致的介绍和比较。
%程序设计语言的定义可分为语法、语义等方面。语义表示程序的含义,由静态语义和动态语义组成。静态语义指程序编译时可以确定的语法成分的含义;建立在转换/迁移系统上的动态语义则描述程序如何执行。
%
@ -67,12 +65,12 @@
\begin{figure}[htbp]
\centering
\includegraphics[width=0.99\textwidth]{fig1-2/2-2.png}
\caption{程序设计语言的发展及分类}%\todo{改图,去掉“系统编程语言”中的“语言”}
\caption{程序设计语言的发展及分类}
\label{fig:2-2}
\end{figure}
\todo{改图,去掉“系统编程语言”中的“语言”}
%这里以多个有代表性的语言为例,分析其应用背景、设计特点与发展规律,从而展现程序设计语言发展的历史与现状。
按照程序设计语言的类型,图\ref{fig:2-2}给出了以时间为主线的不同类别语言的发展过程。从不同角度来看,一种程序设计语言既可能属于系统编程语言,又是面向对象语言。从发展过程来看,一种语言在发展过程中会不断进行扩充,融入不同的范式,进而趋近于多范式语言。计算机产业的发展往往是新的产业应用从已有的应用模式中成长出来而不是取而代之。新语言的出现往往标志着信息技术在新的应用领域的扩张。本节主要以应用驱动来组织。
按照程序设计语言的类型与应用,图\ref{fig:2-2}给出了以时间为主线的不同类别语言的发展过程与分类关系。从不同角度来看,一种程序设计语言既可能属于系统编程语言,又是面向对象语言。从发展过程来看,一种语言在发展过程中会不断进行扩充,融入不同的范式,进而趋近于多范式语言。计算机产业的发展往往是新的产业应用从已有的应用模式中成长出来而不是取而代之。新语言的出现往往标志着信息技术在新的应用领域的扩张。本节主要以应用驱动来组织。
\begin{itemize}
@ -163,7 +161,7 @@ Java语言具有平台独立及可移植性等特点被广泛用于Web应用
\subsection{程序设计语言的语法}
程序设计语言都有自己的语法,而语法的定义是一系列规则的集合,这些规则的基础就是形式语言,从而保证规则是无二义性的。文法\index{文法}是形式语言中十分重要的基本概念,是描述语言的语法结构的一组形式规则。文法有四种分类,其中最常用的为正则文法\index{正则文法}和上下文无关文法\index{上下文无关文法}。正则语言可以用正规式定义,上下文无关语言可以用上下文无关文法(元素和规则的集合)定义。程序设计语言中的大多数算术表达式可用上下文无关文法\index{上下文无关文法}生成。正则语言是最简单的语言类,是上下文无关语言类的一个真子类。对程序设计语言编写的程序进行分析和处理(编译)时,需要判断对应的句子是否合法,可以通过对应语言的自动机进行判断。自动机是形式语言的另一种表示方法。其中,正则语言可以转换成有限状态自动机\index{有限状态自动机}、上下文无关语言可转换成下推自动机\index{下推自动机}表示,反之亦然。针对某种特定输入的一系列有限的规则,对不同的输入元素,自动机依据自身的状态会做出不同的响应,最后达到某种特定的状态。
程序设计语言都有自己的语法,而语法的定义是一系列规则的集合,这些规则的基础就是形式语言,从而保证规则是无二义性的。文法\index{文法}是形式语言中十分重要的基本概念,是描述语言的语法结构的一组形式规则。文法有四种分类,其中最常用的为正则语言\index{正则语言}和上下文无关语言\index{上下文无关语言}。正则语言可以用正规式定义,上下文无关语言可以用上下文无关文法(元素和规则的集合)定义。程序设计语言中的大多数算术表达式可用上下文无关文法\index{上下文无关文法}生成。正则语言是最简单的语言类,是上下文无关语言类的一个真子类。对程序设计语言编写的程序进行分析和处理(编译)时,需要判断对应的句子是否合法,可以通过对应语言的自动机进行判断。自动机是语言的另一种表示方法。其中,正则语言可以转换成有限状态自动机\index{有限状态自动机}、上下文无关语言可转换成下推自动机\index{下推自动机}表示,反之亦然。针对某种特定输入的一系列有限的规则,对不同的输入元素,自动机依据自身的状态会做出不同的响应,最后达到某种特定的状态。
\subsection{程序设计语言的类型系统}

View File

@ -5,31 +5,33 @@
%\footnote{这里所谓人是指系统中的人类参与者及其社会关系,机是指计算平台和信息空间的数据、软件服务等各种资源,物是指数字化的设备装置和可传感的物品。或曰“信息-物理-社会”三元融合系统。}
如第一章中所述,软件是以计算为核心手段实现应用目标的解决方案;软件学科是研究以软件求解应用问题的理论、原则、方法和技术,以及相应的工具支持和生态环境的学科。也就是说,软件学科本质上是一门方法论学科~\cite{Wirth:2008:BHS:1449571.1449577}。其带来的是一种人类思维方式的创新,以人机共融的方式延伸了单纯的人脑思维,形成了一种前所未有的创造力。随着软件应用范围的扩张、软件计算平台的泛化和软件方法技术的发展,软件学科的边界不断拓展,内涵不断深化。本章总论“软件作为基础设施”这一发展趋势,进而以系统观、形态观、价值观和生态观四个视角探讨软件学科的方法论新内涵。
如第一章中所述,软件是以计算为核心手段实现应用目标的解决方案;软件学科是研究以软件求解应用问题的理论、原则、方法和技术,以及相应的工具支持和生态环境的学科。也就是说,软件学科本质上是一门方法论学科~\cite{Wirth:2008:BHS:1449571.1449577}。其带来的是一种人类思维方式的改变和创新,以人机共融的方式延伸了单纯的人脑思维,形成了一种前所未有的创造力。随着软件应用范围的扩张、软件计算平台的泛化和软件方法技术的发展,软件学科的边界不断拓展,内涵不断深化。本章总论“软件作为基础设施”这一发展趋势,进而以系统观、形态观、价值观和生态观四个视角探讨软件学科的方法论新内涵。
\section{软件作为基础设施}
从人类社会信息化的角度看,软件的基础设施地位具体表现为两个方面。一方面,软件自身已成为信息技术应用基础设施的重要构成成分,以平台方式为各类信息技术应用和服务提供基础性能力和运行支撑。另一方面,软件正在“融入”到支撑整个人类经济社会运行的“基础设施”中,特别是随着互联网和其他网络(包括电信网、物联网等)的不断交汇融合,软件正在对传统物理世界基础设施和社会经济基础设施进行重塑,通过软件定义的方式赋予其新的能力和灵活性,成为促进生产方式和生产关系变革、产业转型升级、新兴产业和价值链诞生与发展的重要引擎。因而,计算成为了人类与物理世界互动的中介,软件成为了创造新文明的载体,软件“赋能、赋值”的作用正在被加速和加倍放大,对人类社会的运行和人类文明的发展进步起到重要支撑作用。大规模、高效率地生产高质量的软件产品和提供软件服务的能力已成为社会经济升级发展的新动能,成为国家的一种核心竞争力。
\wang{人类信息化发展有三条并行不悖的主线,以单机应用为主要特征的数字化、以联网应用为主要特征的网络化和以数据的深度挖掘和融合应用为主要特征的智能化。软件进入了一个新的时代,即从数字化阶段发展进入了网络化阶段,并正进入智能化阶段。利用计算机工作的人们和数字化设备,通过互联网实现了高效的连接,各类信息交互、任务协同的规模得到空前拓展,空间上的距离不再成为制约沟通和协作的障碍。网络化、智能化成为新时代软件的外部特征,软件真正作为了信息化社会的基础设施。} 软件的基础设施地位具体表现为两个方面。一方面,软件自身已成为信息技术应用基础设施的重要构成成分,以平台方式为各类信息技术应用和服务提供基础性能力和运行支撑。另一方面,软件正在“融入”到支撑整个人类经济社会运行的“基础设施”中,特别是随着互联网和其他网络(包括电信网、物联网等)的不断交汇融合,软件正在对传统物理世界基础设施和社会经济基础设施进行重塑,通过软件定义的方式赋予其新的能力和灵活性,成为促进生产方式和生产关系变革、产业转型升级、新兴产业和价值链诞生与发展的重要引擎。因而,计算成为了人类与物理世界互动的中介,\wang{软件承载着人类现代文明,人类现代文明运转在软件之上。软件“赋能、赋值、赋智”的作用正在被加速和加倍放大,支撑着人类社会和文明的发展进步。}大规模、高效率地生产高质量的软件产品和提供软件服务的能力已成为社会经济升级发展的新动能,成为国家的一种核心竞争力。
软件成为人类社会基础设施是社会信息化进程不断加深的必然结果,其技术基础是“计算的泛在化”和“软件定义一切”。
“计算的泛在化”是指计算变得无处不在而又无迹可寻。互联网和其他网络的交汇融合,进一步推动了人类社会、信息空间、物理世界的融合。计算设备、网络设备、存储设备与各类传感器设备、判断与决策设备、执行设备所形成的数量众多、大大小小的平台互联融合,成为一体;与此同时,对于所服务的用户而言,计算自然融入人类生产、生活环境和过程之中,无需关注,不着痕迹,形成新的人机物融合计算环境。人机物融合标志着我们从终端互联、用户互联、应用互联开始走向万物互联,信息技术及其应用更加无处不在,“大数据”现象随之产生,信息化的第三波浪潮正在开启。
“软件定义”是指软件以平台化的方式向下管理各种资源向上提供编程接口其核心途径是资源虚拟化以及功能可编程。需要注意的是“软件定义”与“软件化”是不同的两个概念。“软件化”仅仅描述了根据业务需求来开发具有相应功能的软件应用系统的过程而“软件定义”则是一种技术手段其关注点在于将底层基础设施资源进行虚拟化并开放API通过可编程的方式实现灵活可定制的资源管理适应上层业务系统的需求和变化。“软件定义一切” Software Defined Everything简称SDX则将软件平台所管理的资源和提供的编程抽象泛化到包括计算、存储、网络、软件服务等在内的各类计算资源、包括各种数字化机电设备和可传感物体对象在内的各类物理资源、乃至可通过激励机制调配的人力资源。软件定义可递归分层形成一种生长式、演化式的可扩展体系。这种软件定义的人机物融合平台逐渐呈现了“泛在操作系统”的发展方向。
“软件定义”是指软件以平台化的方式向下管理各种资源向上提供编程接口其核心途径是资源虚拟化以及功能可编程。需要注意的是“软件定义”与“软件化”是不同的两个概念。“软件化”仅仅描述了根据业务需求来开发具有相应功能的软件应用系统的过程而“软件定义”则是一种技术手段其关注点在于将底层基础设施资源进行虚拟化并开放API通过可编程的方式实现灵活可定制的资源管理适应上层业务系统的需求和变化\footnote{\wang{软件化和软件定义的主角都是软件软件化是软件定义的基础可以视作软件定义1.0版本即被定义对象上没有系统软件只是程控化的功能软件不支持再编程。而软件定义2.0中,被定义对象(或主体)以计算平台化的方式运行系统软件,该系统软件向下管理各种资源,向上提供资源虚拟化的编程接口,支持对被定义对象的功能再编程。}}
“软件定义一切” Software Defined Everything简称SDX\wang{将软件平台所管理的资源和提供的编程抽象泛化到不仅包括计算、存储、网络、软件服务等在内的各类计算资源而且包括各种数字化机电设备和可传感物体对象在内的各类物理资源。以智能手机、智能仪表、智能家居等为代表的“软件定义设备”日渐普遍更进一步SDX还将包括可通过激励机制调配的人力资源。}
软件定义可递归分层形成一种生长式、演化式的可扩展体系。这种软件定义的人机物融合平台逐渐呈现了“泛在操作系统”Ubiquitous Operating System的发展方向。
“软件定义一切”实质上是通用可编程思想在各个领域的应用是一种以软件实现分层抽象的方式来驾驭复杂性的方法论。数字化使得几乎所有的设备都包含了独立或者集成的计算设备完成“感知、判断、决策、执行”闭环的部分或者全部。这个改变是信息化发展的基础使得现代设备或装置往往都具备编程控制的能力推动了人们基于通用计算机的思维架构人们将其总结成计算思维来理解和求解各领域问题。可见“软件定义一切”意味着需要构造针对“X”的“操作系统”。未来的面向人机物融合的软件平台就是对海量异构基础设施资源进行按需、深度软件定义而形成的“泛在”操作系统Ubiquitous Operating System
“软件定义一切”实质上是通用可编程思想在各个领域的应用,是一种以软件实现分层抽象的方式来驾驭复杂性的方法论。数字化使得几乎所有的设备都包含了独立或者集成的计算设备,完成“感知、判断、决策、执行”闭环的部分或者全部。这个改变是信息化发展的基础,使得现代设备或装置往往都具备编程控制的能力,推动了人们基于通用计算机的思维架构(人们将其总结成计算思维)来理解和求解各领域问题。可见,“软件定义X”意味着需要构造针对“X”的“操作系统”。未来的面向人机物融合的软件平台就是对海量异构基础设施资源进行按需、深度软件定义而形成的“泛在”操作系统\cite{mei2018toward}
\section{软件学科范畴的拓展}
作为一门方法论学科,软件学科拓展的驱动力来自软件应用范围扩张、计算平台泛化和软件方法技术本身发展三个方面。
作为一门方法论学科,软件学科拓展的驱动力来自软件应用范围扩张、计算平台泛化和软件方法技术本身发展方面。
从软件应用范围扩张的角度看,正如上文所述,计算日益变得无处不在,--”三元融合不断深入。在此趋势下,从宏观上看,软件从实现计算的工具逐步转变为信息社会不可或缺的基础设施;从微观上看,软件的角色也从负责应用过程中孤立、确定的信息处理环节,转变为负责定义并协同整个应用涉及的“人-机-物”各类资源,实现应用价值。软件作为系统解决方案,涉及的范畴扩展到各类物理设备、物品和人类的主观体验与价值实现;因而软件学科无可避免地涉及到控制科学、系统科学以及心理学、管理学、社会学等范畴的问题,并以软件学科自身的方法论将其内化和拓展。
从软件应用范围扩张的角度看,正如上文所述,计算日益变得无处不在,人机物融合不断深入。在此趋势下,从宏观上看,软件从实现计算的工具逐步转变为信息社会不可或缺的基础设施;从微观上看,软件的角色也从负责应用过程中孤立、确定的信息处理环节,转变为负责定义并协同整个应用涉及的人、机、物等各类资源,实现应用价值。软件作为系统解决方案,涉及的范畴扩展到各类物理设备、物品和人类的主观体验与价值实现;因而软件学科无可避免地涉及到控制科学、系统科学以及心理学、管理学、社会学等范畴的问题,并以软件学科自身的方法论将其内化和拓展。
从软件依赖的平台泛化的角度看,计算平台已经从传统的集中式单机发展到并行与分布式平台,再到今天的“云-边-端”异构多态计算平台。这个网络化计算平台不仅包括传统的互联网,还融合了传感网、物联网、移动互联网、社交网等,标志着计算平台不断向物理世界和人类社会快速延伸,形成了一种泛化的计算平台。软件定义技术为这个--融合的平台提供可编程计算抽象。同时,这个计算平台也使得关于--融合的应用场景的海量数据不断被收集、处理和积累,成为平台上的重要资源。软件作为应用解决方案,在这个计算平台之上利用数据资源,协同人机物,实现应用价值;同时也在这个平台上提供服务并进一步积累数据,从而不断拓展这个计算平台。
从软件依赖的平台泛化的角度看,计算平台已经从传统的集中式单机发展到并行与分布式平台,再到今天的“云-边-端”异构多态计算平台。这个网络化计算平台不仅包括传统的互联网,还融合了传感网、物联网、移动互联网、社交网等,标志着计算平台不断向物理世界和人类社会快速延伸,形成了一种泛化的计算平台。软件定义技术为这个人机物融合的平台提供可编程计算抽象。同时,这个计算平台也使得关于人机物融合的应用场景的海量数据不断被收集、处理和积累,成为平台上的重要资源。软件作为应用解决方案,在这个计算平台之上利用数据资源,协同人机物,实现应用价值;同时也在这个平台上提供服务并进一步积累数据,从而不断拓展这个计算平台。
从软件方法技术发展的角度看当前软件的基本形态、所实现的逻辑推理形式、软件开发的隐喻metaphor模式、软件的生态环境、元级方法论都在发生深刻的改变。软件的基本形态从计算机硬件的附属品到独立的软件产品再到云化的软件服务继而转变为无处不在而又无迹可寻的泛在服务。软件所实现的逻辑推理形式在基于规则的演绎之上发展出数据驱动的归纳统计机器学习技术就是后者的典型表现。软件开发的隐喻模式\footnote{即软件开发从问题空间向解空间的映射模式}经历了从实现数学计算到模拟物理世界,再到虚实融合再创造的转变。对软件作为客体对象的考察从以个体及其生产使用为主扩展到在生态的层面上考虑软件及其利益相关者群体的竞争、协作等社会性特征。在元级方法论层面上,正从以还原论为主向系统论发展,软件作为解决方案越来越多地被视为开放环境中的复杂适应系统,而不是封闭规约下的确定行为系统。
随着学科内涵的不断拓展,软件学科逐渐成为一门基础学科,并向其他学科渗透。所谓基础学科,是指某个拓展人类可认识改造的世界疆域之不可替代的知识体系,具有独特的思维方式与方法论,为其他学科发展提供不可或缺的支撑。软件学科日益呈现出这些特征:软件是把物理世界拓展为信息-物理-社会融合世界的主要手段;与此同时,“软件定义”赋能的计算思维有可能成为继实验观察、理论推导、计算仿真、大数据分析之后的新的综合性研究手段,尤其是为以信息-物理-社会融合系统为对象的科学研究提供了赖以运作的理论基础和实践规范。而以软件知识为主体的计算机教育已经成为包括我国在内的多个国家的国民基础教育课程体系的主要内容之一。
随着学科内涵的不断拓展,软件学科逐渐成为一门基础学科,并向其他学科渗透。所谓基础学科,是指某个拓展人类可认识改造的世界疆域之不可替代的知识体系,具有独特的思维方式与方法论,为其他学科发展提供不可或缺的支撑。软件学科日益呈现出这些特征:软件是把物理世界拓展为信息-物理-社会融合世界的主要手段;与此同时,“软件定义”赋能的计算思维有可能成为继实验观察、理论推导、计算仿真、大数据分析之后的一种新的综合性研究手段,尤其是为以信息-物理-社会融合系统为对象的科学研究提供了赖以运作的理论基础和实践规范。而以软件知识为主体的计算机教育已经成为包括我国在内的多个国家的国民基础教育课程体系的主要内容之一。
%其一个标志是其基础内容进入国民基础教育课程体系。
\section{软件科学的新理解}
@ -46,17 +48,17 @@
第二层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法,超越还原论。
第三层含义是系统工程。软件学科的关注点应从为应用系统提供高质量的软件部分,上升到关注--融合的整个系统的价值实现。软件定义一切的趋势使得软件不仅仅是系统中的信息处理工具,而且也是管理各类资源、融合人机物的“万能集成器”,是实现应用价值的整体解决方案。
第三层含义是系统工程。软件学科的关注点应从为应用系统提供高质量的软件部分,上升到关注人机物融合的整个系统的价值实现。软件定义一切的趋势使得软件不仅仅是系统中的信息处理工具,而且也是管理各类资源、融合人机物的“万能集成器”,是实现应用价值的整体解决方案。
\subsubsection{系统观下的软件学科发展}
软件作为人类智力产品,无论是软件制品本身,还是软件开发、使用过程和场景都与万物和人类有着紧密关联,其开发和运行的网络化、服务化\cite{Mei:2016:INS:3086926},以及软件基础设施化都触发了计算平台、软件生产方式和运行方式的变革。软件创新从个人、组织智慧发展到群体智慧创新。软件科学与自然科学、社会科学等各领域产生了千丝万缕的联系,信息物理融合、软件社会化、大数据时代的软件新形态使得软件必然成为技术-社会系统Socio-technical System。人机物融合的软件系统其复杂性本身就呈现在系统乃至系统之系统的层面上综合性和系统性也愈来愈强。系统观要求软件科学体系需破除传统还原论的思维藩篱。
软件作为人类智力产品,无论是软件制品本身,还是软件开发、使用过程和场景都与万物和人类有着紧密关联,其开发和运行的网络化、服务化\cite{Mei:2016:INS:3086926},以及软件基础设施化都触发了计算平台、软件生产方式和运行方式的变革。软件创新从个人、组织智能发展到群体智能创新。软件科学与自然科学、社会科学等各领域产生了千丝万缕的联系,信息物理融合、软件社会化、大数据时代的软件新形态使得软件必然成为技术-社会系统Socio-technical System。人机物融合的软件系统其复杂性本身就呈现在系统乃至系统之系统的层面上综合性和系统性也愈来愈强\wang{,必须作为视作复杂系统来认识对待}。系统观要求软件科学体系需破除传统还原论的思维藩篱\wang{,对软件理论提出了极大的挑战传统的软件理论是建立在逻辑和图灵机模型之上的,缺乏对大数据处理、智能系统设计与推理、信息安全保障和数据隐私保护、处理“计算、控制和通讯深度融合”以及自适应等能力,开放动态的复杂系统的行为具有不确定性和持续性,超出了之前经典模型和算法的主流研究范畴。虽然,我们在特定领域已经有大型网络应用走在前面,但作为复杂系统的软件的理论还没有产生,实践走在了理论的前面。}
近年来,软件科学在系统观方向上进行了不少探索,包括:基于复杂网络来认识大规模软件系统的整体性质、基于多自主体的软件系统和方法、复杂自适应软件与系统、群体化软件开发方法等。网络化和大数据催发了融合软件系统与系统论研究的切入点,数据驱动的软件性能优化甚至软件设计辅助初显端倪。通过对软件代码大数据特别是动态运行大数据的分析,软件性能优化在云计算平台等一些特定场景中获得很大成功。对于数据驱动的软件设计,人们不再遵循传统的自顶向下、分而治之、逐步精化的经典还原论法则,而是采用一种基于输入输出的黑盒的数据描述,训练出深度神经网络,充当所需要的软件部件。这种基于深度学习的方法从海量的样本中归纳出神经网络,其泛化能力可视为通过神经元系统的涌现而达成的功能。然而,这些研究仍处于方法层次,还未达到方法论的层次,即关于研究问题需要遵循的途径和研究路线,也可视作具体方法的元级层次。
新的软件方法学的关键在于如何认识因果和相关。因果观是有前提的相对的相关性是绝对的探寻因果是认知的必需也是追求。软件发展在人机物融合时代人在回路、“拟人化”计算Human Computation、人机共融等需要关于软件规律的元级方法论创新。
在软件系统的建模方面,软件将从单纯的信息处理向“场景计算”发展,这里的场景包括物理环境和社会环境。软件与软件所处的环境或应用场景共同决定了软件的特性和价值,包括功能、性能、安全、可靠等。软件将作用于环境,并且可以改变自身结构以适应环境变化和影响环境的需求。
在软件系统的建模方面,软件将从单纯的信息处理向“场景计算”发展,这里的场景包括物理环境和社会环境。软件与软件所处的环境或应用场景共同决定了软件的特性和价值,包括功能、性能、安全、可靠等。软件将作用于环境,并且可以改变自身结构以适应环境变化和影响环境的需求。\wang{大数据带来的数据驱动的方法将是一个重要的方向正如Jim Gray指出的大数据将成为人类触摸、理解和逼近现实复杂系统的有效途径。}
在软件系统的机理方面,软件的语义将由传统的还原论形式语义方法,向多尺度、可演化的抽象方向发展,组合方式将从传统的静态组合方式向动态可演化的、具有涌现特性的方式发展,建立软件微观行为与宏观行为的辩证统一。面向人机物融合的认知,软件作为人工智能或者“智能+”的承载,将深化复杂自主系统的智能行为理论和方法,软件定义将成为人机物融合系统中学习赋能(型)资源的管理途径。
@ -64,11 +66,11 @@
\subsubsection{系统观下关键科学问题}
软件学科的系统观形成、并与系统学的交叉融合将经历一个长期的阶段。当前软件学科所面临的一个关键科学问题是对于人机物融合系统的建模与分析,表现为两个方面:一是系统论驱动的复杂软件系统的观察和度量方法;二是兼容离散、连续、实时等不同特性的模型表示方法及其工具支持。在操作层面上,系统观下软件方法学的研究有紧密联系的两个抓手:
软件学科的系统观形成、并与系统学的交叉融合将经历一个长期的阶段。当前软件学科所面临的一个关键科学问题是对于人机物融合系统的建模与分析,表现为两个方面:一是系统论驱动的复杂软件系统的观察和度量方法;\wang{二是超出经典算法和程序理论范围的软件理论。}在操作层面上,系统观下软件方法学的研究有紧密联系的两个抓手:
\begin{enumerate}
\item 以复杂适应性软件系统为抓手,形成元级反射和学习赋能相结合的元级化理论,以此研究泛在操作系统的基本理论、关键技术和实现平台,为人机物融合的资源和应用场景建模提供计算的平台抽象;
\item 以复杂适应性软件系统为抓手,\wang{拓展与控制理论的交叉}形成元级反射和学习赋能相结合的元级化理论,以此研究泛在操作系统的基本理论、关键技术和实现平台,为人机物融合的资源和应用场景建模提供计算的平台抽象;
\item 推进数据驱动软件开发方法的发展,打通传统软件方法与数据驱动软件方法,突破大数据分析的可解释性和常识推理问题,为涌现现象规律的认识、解释、设计建立基础理论和方法。
@ -90,11 +92,11 @@
首先,“软件定义+计算思维”将成为每个人解决现实问题、满足自身需求的新范式。未来的人类社会及日常生活的方方面面都将以软件定义的人机物融合应用的方式来实现。实现用户需求的应用软件将越来越多地以最终用户编程的方式面向应用场景按需构造。因此,最终用户必须具备基于计算思维的问题解决方案规划和构造能力。同时,这也要求我们为支持人机物融合的泛在服务软件提供通用的编程抽象(包括编程模型和语言),支持这种最终用户编程。
其次,适应泛在而专用化的计算设备和运行平台成为软件的普遍要求。大量的应用软件将从通用的硬件和平台迁移到专用的硬件和平台上,需要新的方法和工具支持来实现大范围的软件迁移和优化。针对通用目的开发的软件需要不依附于硬件的长期生长演化能力,并具备面向不同专用硬件和平台的高效定制和裁剪能力。
其次,\wang{适应泛在而专用化甚至变化的计算设备和运行平台成为软件的普遍要求。大量的应用软件将从通用的硬件和平台迁移到专用的硬件和平台上,需要新的方法和工具支持来实现大范围的软件迁移和优化。软件平台需要具有预测和管理未来硬件资源变化的能力,能适应硬件、底层资源和平台的变化,乃至能相对独立地长期生存演化。}
再次,内生的持续成长能力将成为软件的基本能力。除了自适应能力外,软件将越来越多地具备支持自演化的持续生长能力。这种持续生长不仅意味着通过各种智能化方法调整软件的算法和策略从而实现优化运行,而且还意味着软件通过各种生成以及合成能力不断增强自身的能力。因此,未来软件定义中功能与数据的界限将进一步模糊,越来越多的功能将通过数据驱动的方式进行设计,并实现自演化和自生长。
最后,软件与人将在不断汇聚的群体智中实现融合发展。软件的覆盖面越来越广、渗透性越来越强,最终用户对于软件的依赖也越来越强。由此,软件所能获得的关于用户行为和反馈的数据越来越全面和丰富,并在此基础上形成越来越强的群体智慧。这种群体智慧注入软件后又将服务于每个最终用户,使得他们能够在各种应用场景中以更加智能化和个性化的方式满足自身的需求,从而使得软件在使用中越来越有“灵性”和“人性”。未来的软件学科及相关研究需要摈弃“人”与“软件”二元分离的思维定式,更加自觉的考虑人机共融,不仅考虑“人因”,更要考虑“群智”。
最后,软件与人将在不断汇聚的群体智中实现融合发展。软件的覆盖面越来越广、渗透性越来越强,最终用户对于软件的依赖也越来越强。由此,软件所能获得的关于用户行为和反馈的数据越来越全面和丰富,并在此基础上形成越来越强的群体智能。这种群体智能注入软件后又将服务于每个最终用户,使得他们能够在各种应用场景中以更加智能化和个性化的方式满足自身的需求,从而使得软件在使用中越来越有“灵性”和“人性”。未来的软件学科及相关研究需要摈弃“人”与“软件”二元分离的思维定式,更加自觉的考虑人机共融,不仅考虑“人因”,更要考虑“群智”。
\subsubsection{形态观下关键科学问题}
@ -194,22 +196,21 @@
本书在第一篇总结了软件学科是由软件语言和理论、软件构造方法、软件运行支撑、软件度量和质量评估等四方面形成有机整体,软件范型的变化将牵引软件技术体系的变化。而上述系统观、形态观、价值观和生态观的新视角将引起软件范型的变化,并辐射到软件语言与理论、软件开发、运行和度量评估等各个层面方法和技术的变革,进而从整体软件的生态与教育方面产生深刻的影响。
软件理论和软件语言方面将着力解决如何建立适应人机物融合的软件范型基础这一基本问题。软件理论的核心是从复杂系统的角度来建立构建正确、高效、可靠、安全软件系统的理论和算法基础,特别是需要应对大规模的数据与计算的算法理论,以及在新的硬件架构(异构多态)和计算平台(量子计算平台)下的程序理论等等。与软件理论紧密相关,软件语言应重点研究领域和应用问题表达和求解的新抽象,加强大数据时代语言对数据处理的支持,以及开发人机物融合的泛在混成系统的编译技术,在领域特定语言和语言工程、多范式程序设计范式融合、软件语言和实现的内生安全等方面奠定软件范型发展的基础
软件理论和软件语言方面将着力解决如何建立适应人机物融合的软件范型基础这一基本问题。软件理论的核心是从复杂系统的角度来建立构建正确、高效、可靠、安全软件系统的理论和算法基础,\wang{拓展可计算理论传统研究的内容范围,特别是需要应对网络环境下日益增长的大数据与持续计算的算法与计算复杂性理论,以及在新的硬件架构(异构多态)和计算平台(量子计算平台)下的计算理论和程序理论等等}。与软件理论紧密相关,软件语言\wang{将重点研究泛在计算各种抽象,构建领域特定的程序设计语言,探索语言演化和生长机制、以及基于“语言工程”的软件设计方法和支撑环境,共同奠定软件范型发展的理论和语言基础}
软件构造方法将“软件定义”人机物融合的“场景计算机”,它要在万物互联的平台上持续演进地提供服务,具有自主性、协同性、演化性、情境性、涌现性和可信性等诸多特性。这在软件构造的技术方法和组织模式上均需要新方法和技术,包括:复杂场景分析与建模、软件自适应与自成长、基于人机协作的群智化软件开发、数据驱动的软件自动化、安全可信高度智能的开发运维一体化等。
软件构造方法将\wang{研究人机物融合场景下的软件开发范型和技术体系,也即研究面向应用场景需求、如何“软件定义”人机物融合的“场景计算机”。
%它要在万物互联的平台上持续演进地面向场景提供服务,具有自主性、协同性、演化性、情境性、涌现性和可信性等诸多特性。
面向高效、高质量、低成本的目标,软件构造的技术方法和组织模式上需要应对复杂场景分析与建模、群智开发、人机协作编程、开发运维一体化等以一系列挑战,亟待新方法和技术的发展。}
软件运行支撑需要满足软件作为社会基础设施的规模、效能、持续、演进等诸多关键需求,并适应人机物融合的各类资源和应用场景的管理和实现。这将集中反映在未来的泛在操作系统与运行平台方面,需研究支持软件定义的新型运行平台架构、泛在资源的高效虚拟化和灵活调度、复杂软件系统持续适应演化的共性支撑、人机物融合过程中的安全与隐私保护等关键问题。
软件运行支撑\wang{将向支撑人机物融合、具有“资源虚拟化”和“功能可编程”特点的泛化运行平台发展,需要满足作为社会基础设施在规模、适应、演化、安全、效能等方面的诸多严格要求。未来的泛在操作系统与运行平台,需在软件定义的新型运行平台架构、泛在资源的高效虚拟化和调度方法、软件系统持续适应演化的支撑机制、人机物融合过程中的安全与隐私保护等关键问题上有突破}
软件度量和质量评估是软件学科的科学观察、工程构造相交融的重要方面。未来的重要变化是在复杂系统和软件生态层面的科学观察并以此为基础开展在软件开发和运行层面的持续发展。以各类软件大数据为核心的度量抽象将揭示
软件生态如何形成、如何可持续发展的基本规律,进而理解并驾驭大规模代码和项目的供应链及其变化、支持个体学习并加入复杂项目和生态,改进复杂生态中群体的协作。数据驱动和规则驱动将在软件质量与安全保障上发挥重要的作用。
软件度量和质量评估是软件学科的科学观察、工程构造相交融的重要方面,\wang{其未来的重要变化是在复杂系统和软件生态层面的科学观察,并以此为基础推进软件开发和运行层面的持续发展。一方面,将通过有效的度量和分析,理解和利用大规模代码和项目的供应链行为,研究个体学习和群体协作,并探索软件生态的形成和可持续机制机理等。另一方面,在软件成为信息社会的基础设施后,软件质量评估和保障的需求不断增长、更为突出。以应用场景的价值牵引,带动软件质量和确保技术的发展成为重要趋势,未来突破的重点将在数据驱动的智能系统质量保障、 人机物融合场景下的系统可信增强、大规模复杂系统安全缺陷检测、物联网环境下的系统安全保障等方面。}
“数据为中心”是人机物融合时代的最为突出的特征,数据工程和数据管理是未来软件构造和运行支撑的共性沉淀。在数据工程方面,需要应对异构数据整理、数据分析和数据安全与隐私保护等挑战。在数据管理方面,需研究如何管理大数据、特别是如何利用新硬件混合架构来实现大数据的管理。
软件学科的发展呈现了纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局。这在人机物融合时代复杂多变的应用和开放平台上将更为显现。在已有共性方法上发展领域特定方法,并反馈并带动新型共性方法的发展,是学科发展的有效途径。 在不同的应用领域,面对系统边界的可伸缩性、系统成分的异构性和系统模型的混成性,需研究各领域的环境建模及其软件定义方法、模型驱动场景感知和认知、异构资源的统一表示和封装、系统学习赋能机制及性能确保、异构模型的融合和验证以及空间分布系统的的时空一致性等关键技术问题。智慧城市、无人自治系统、以及软件定义卫星等新兴应用领域为此方面的研究提供了大场景。
此外,高性能 CAE 软件系统等专用工程软件也是软件学科的重要关注点。在支撑实现高端装备、重大工程和重要产品的计算分析、模拟仿真与优化设计等重大应用价值外,其高效能、高精度、高定制的需求亦将推动软件技术的发展。
软件学科的发展呈现了纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局。这在人机物融合时代复杂多变的应用和开放平台上将更为显现。在已有共性方法上发展领域特定方法,并反馈并带动新型共性方法的发展,是学科发展的有效途径。\wang{在人机物融合及软件定义一切的大背景下,以卫星、流程工业控制、智慧城市、无人自主系统等为代表的重大领域都蕴含着平台再造与整合的发展机遇,即以软件作为万能集成器对相关系统原有的软硬件和服务资源进行解构然后以平台化的方式进行重构,从而建立软件定义的融合发展平台。此外,高性能 CAE 软件系统等专用工程软件也是软件学科的重要关注点。在支撑实现高端装备、重大工程和重要产品的计算分析、模拟仿真与优化设计等重大应用价值外,其高效能、高精度、高定制的需求亦将推动软件技术的发展。}
软件学科的发展离不开软件教育体系、内容、方法、手段的变革。软件教育需要适应“软件定义一切”普及教育的需求,还要在顺应人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育上有新发展。
软件学科的发展离不开软件教育体系、内容、方法、手段的变革。\wang{软件教育需要构建包括顺应``软件定义一切''发展趋势的通识教育、针对人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育和继续教育的完整体系,并建设发展相应的教育理念、方法和伦理。}
本部分余下各章将讨论学科内各个领域方向所面临的一些主要挑战问题。
我们大胆预测,软件学科的未来发展将由这些问题上的突破和进展所塑造。

View File

@ -80,7 +80,7 @@
最后,生态系统中的企业参与具有很大的不稳定性。商业企业始终需要在“开放”与“盈利”之间权衡,一旦确定其目标无法实现或企业战略发生变化,将有可能直接停止(撤走)对所参与的软件生态的所有投入。例如,在开源社区占据主导地位的企业的离开有可能直接导致该开源生态走向失败\cite{Zhou2016Inflow}。例如IBM取消了对开源项目Aperi的支持后该项目被迫关闭。对于开源生态而言商业文化与自由开源精神可能存在冲突。开源开发者更加倾向于自发参与、按照个人意愿选择任务。因此商业企业传统的软件开发习惯如组织安排、任务分工等可能伤害那些崇尚“黑客文化”、“自由软件精神”的个体开发者。例如目前世界第一大开源JavaEE应用服务器JBossAS的创始人Marc Fleury在RedHat收购JBoss之后离开\cite{CIO2018}
值得指出来的是,目前中国也在逐步构建软件产业生态\sec{Ch1-5-SoftwareIndustry}。例如在操作系统、数据库和中间件等方面形成了自有产品和上下游应用的依赖,但是如何能够拓展更广阔的市场,并形成可持续的生态,还有待研究。另一方面,国内软件厂商是否能够把握时机,面向未来的人机物融合应用,定位到合适的技术进行发展建立生态,是一个很大的挑战。
值得指出来的是,目前中国也在逐步构建软件产业生态\ref{Ch1-5-SoftwareIndustry})。例如在操作系统、数据库和中间件等方面形成了自有产品和上下游应用的依赖,但是如何能够拓展更广阔的市场,并形成可持续的生态,还有待研究。另一方面,国内软件厂商是否能够把握时机,面向未来的人机物融合应用,定位到合适的技术进行发展建立生态,是一个很大的挑战。
\section{主要研究内容}
为了应对上述挑战,需要开展以下几个方面的研究工作。首先,为了理解和度量复杂的软件生态,需要在现有软件数据挖掘的技术和方法的基础上继续发展数据驱动的软件度量和分析方法(§\ref{sec:se-measurement}。其次围绕软件生态的三个层次还需要分别针对各自的问题开展研究工作1应对复杂软件供应链所带来的机会和挑战如何理解并度量大规模代码和项目的供应链模式从中挖掘可借鉴的成功经验同时及时识别潜在风险§\ref{sec:se-supply}2基于软件供应链开发者之间形成了相互协作的关系网如何帮助他们顺利加入复杂项目、提高群体协作效率§\ref{sec:se-cooperation}3在此基础上如何深入理解生态系统的形成和可持续机理从而帮助软件生态可持续发展§\ref{sec:se-ecosystem})。

121
Ch3-1.tex
View File

@ -1,91 +1,56 @@
% !TEX root = main.tex
%\chapter{政策建议}
软件因可编程通用计算机的发明而生,并逐步发展演化为信息化时代人类文明的新载体。人类社会的信息化从基于计算机的数字化起步,当计算机融入数字化设备,``软件定义设备''成为趋势。伴随信息化进入网络化阶段,软件发展、积累、演变成为当今社会基础设施的灵魂,人类文明已经运行在软件之上,进而推动人类社会的信息化进入智能化的新阶段。人机物融合泛在计算时代正在开启,计算无处不在,软件定义一切、赋智万物。面向新时代,\textbf{我们比任何时候都需要更加重视软件学科建设,牢固确立软件学科的优先发展地位,准确把握新时代软件学科的发展方向}
新时代软件的系统观、形态观、价值观和生态观为软件学科发展标定了方向。软件学科和软件产业的紧密互动关系需要我们统筹推进科研、教育和产业的协调发展。建议从加强软件基础前沿研究、升级软件高等教育体系和构建软件产业良性发展环境等维度规划我国的软件学科发展战略。
%\section{学科发展政策建议}
%\begin{enumerate}
%\item 加强软件理论、程序设计语言、系统软件等基础领域的研究。加强面向泛在计算的程序设计语言的基础性研究,以领域特定的程序设计语言的设计原理与高效实现为核心,以程序设计语言的演化和互操作性机理为重点,通过程序设计语言的基础研究,有效而深入地解决计算泛在和多样性,应用复杂性和安全性等带来的新挑战。推进对以“连接协调”为核心的新型体系结构下的新一代操作系统模型和机理的研究。研究如何为各类新型异构资源建立适当抽象,并按照应用需求进行灵活调度。研究操作系统和运行平台如何充分发挥其“元层”支撑作用,有效驱动和实现“信息-物理-社会”空间的协同持续演化。
%\item 加强面向国家重大新型领域的全栈软件系统和工具环境的研究。国家重大新型领域涉及物联网,生命健康,军事国防等,需要加大面向领域需求的程序语言、开发方法、支撑运行环境和工具链的研究与开发。
%\item 加强面向生态持续的复杂系统软件工程和价值保证研究。推进以人为中心的软件价值的研究和规范。面向泛在计算场景下的软件价值,包括普适日常应用和安全攸关应用,研究各种社会因素带来的突破使用质量的新的软件价值,并建立相关约束和规范,包括提示用户可能存在的风险,制定智能软件的质量标准、检测方法和实施办法等。推进对大规模代码和项目的供应链和生态行为的研究和分析。研究个体如何认知复杂项目和生态,群体如何高效高质地协作完成各类软件活动相关的任务,涵盖公司、个体开发者及用户在内的广泛社会力量如何围绕软件构建可持续性演化的生态系统等。
%\item 加强学科交叉和综合,加强跨领域研究和应用。加强各个领域、各种形态、各种应用场景下的软件技术知识产权保护方法和措施的研究,建立公平、公正的环境,持续推动软件技术创新进程。
%\item 改变唯论文、唯引用的评价机制,强调软件系统和工具研发的创新贡献。
%\end{enumerate}
\section{加强软件基础前沿研究}
正如本报告第一部分所述,传统的软件学科源于并主要关注以计算机为中心的软件,而当今的软件学科必须高度关注以网络为平台的软件带来的挑战。本报告第二部分指出,新时代软件学科面对的\textbf{软件是人机物融合、泛在、可演化的复杂系统},这样的系统已经超出传统软件学科关注的以计算机为中心的软件范畴。面对新时代的软件系统,软件学科在理论、方法、技术、工具等方面都显得滞后,不能满足要求,加强新时代软件基础前沿研究是现实而紧迫的。
%\section{软件教育政策建议}
%\begin{enumerate}
%\item 推行以“计算思维 + 创新思维”为核心的普及教育,包括软件学科核心认知能力的成长模型和规律及其知识体系、以计算思维为核心,融合创新思维的系统化认知能力培养方法和适应不同认知水平且贯穿终生的软件学科普及教育方法。
\begin{enumerate}
\item \textbf{加强面向人机物融合泛在计算模式的软件理论研究。} 经典软件理论针对以计算机为中心的确定性封闭场景。例如,支撑其构建的早期算法理论要求算法具有表示(编码)的有限性、行为的确定性和执行终止性。但新时代软件系统是持续演化、人机物融合、泛在的开放复杂系统。以互联网(物联网)上大量涌现的人机物融合的智能云服务系统为例,软件系统需要处理持续增长的网络大数据,融合离散计算与连续的物理空间,服务行为具有不确定性和持续演化性。此类软件系统已经超出了当前算法和程序理论的研究范畴。需要借鉴复杂系统思想、理论和方法,拓展与控制理论的交叉,研究开放的新型软件理论,为新时代软件学科提供理论支持。
%
\item \textbf{加强面向泛在计算的程序设计语言及其支撑环境研究。} 传统程序设计语言研究一直是走通用路线,强调表达能力的完备性,支持软件专业人员开发软件。随着计算向各个领域的渗透,网络化、泛在化、人机物融合化要求提供领域化的程序设计语言及其支撑环境,降低普通用户学习门槛以及方便普通用户使用成为面向泛在计算的程序设计语言关注的重点。需要结合各个行业领域的软件定义需求,以领域特定的程序设计语言设计原理和高效实现为目标,研究面向领域应用的新型程序设计语言理论、程序设计语言的演化和互操作性机理、程序设计语言的支撑环境和工具链等,为高效而深入地满足各个行业领域定制计算的多样性需求,提供共性和个性兼顾的编程支撑。
%
\item \textbf{布局基于软件定义方法的泛在操作系统原理和技术研究。} 传统操作系统发展是以围绕CPU为主线、以拓展网络通信能力为辅线难以应对人机物融合泛在计算所带来的海量异构``物''、``人''资源的管理需求,难以支撑复杂、多样、多变的各类应用。需要研究以``连接协调''为核心的新型软件体系结构下泛在操作系统模型和机理、各类新型异构资源的抽象机制及其虚拟化技术、应用需求导向的按需高效资源调度、内生可信安全机制等,以及研究如何充分发挥泛在操作系统的``元层''共性基础支撑作用,有效驱动和实现``信息-物理-社会''空间的协同持续演化。
%
\item \textbf{探索以数据为中心的新型应用开发运行模式及其平台支撑。} 传统的应用开发运行是以计算资源为中心,通过处理输入数据获得输出结果。随着大数据应用的繁荣和数据作为主要资产定位的确立,围绕数据部署应用将成为一种主要的应用模式。需要研究异构海量数据的抽象和建模、多元(源)数据资源的互操作和调度管理技术及平台、以多元(源)数据为中心的应用快速开发和高效运行技术、以及相应的数据安全和隐私保护技术等。
%
\item \textbf{加强对大规模代码和项目的供应链和生态行为研究。} 开源、众包等软件开发社区模式已成为传统组织型软件开发模式之外的重要模式,因此带来开源闭源交织的复杂软件供应链和生态,同时也在互联网上积累了丰富的软件工程大数据资源。需要以刻画和分析复杂的软件供应链模型为基础,研究个体如何高效认知复杂项目和生态、群体如何高效高质地协作完成各类软件开发相关的任务、软件涉众如何围绕软件构建可持续性演化的生态系统等。基于互联网群体智能的软件开发方法和支撑平台研究、基于软件工程大数据的软件自动化方法和技术研究、以及软件知识产权的甄别和保护技术也是值得关注的重点。
%
%\item 推行以“多学科交叉融合知识体系+系统能力和解决复杂工程 问题能力培养”为核心的专业教育,包括建立面向多学科交叉融合的软件学科专业教育的知识体系和软件学科专业教育核心能力的培养方法。
%
%\item 推行以“专业学科知识 + 软件学科知识”为基础,实现复合型、创新型和跨界人才培养的其他学科专业教育,建立基于“专业学科知识 + 软件学科知识”的其他学科专业教育知识体系和具有软件学科知识和能力的复合型、创新型和跨界专业人才培养方法。
%
%\item 开展以“探究成才规律 + 寻求理念创新 + 开发支撑软件”为 核心的教育方法改革,探索软件学科人才培养模型及规律、研究软件学科资源在人才培养中的应用,推进群体化学习和大规模在线开放实践 MOOP研发软件学科教育的支撑软件。
%\end{enumerate}
%\section{软件产业政策建议}
%\begin{enumerate}
%\item 鼓励面向行业的共性软件技术创新和研发,以纵带横,促进领域特定共性软件平台和工具环境的发展。
%\item 建立以开源生态为核心、具有针对性的知识产权保护的群智化软件创新环境,培育健康发展的软件产业生态。
%\item 建立数据开放机制和平台,鼓励围绕大数据聚集、管理、分析和应用的大规模协作制定数据开放的相关政策,开放地理、气候、统计、环境、交通等政府数据,并建立基于互联网的大数据开放共享平台,以及开放的数据分析工具库,鼓励不同的组织和个人基于此平台开展数据聚集、管理、分析和应用的大规模协作,挖掘数据蕴含的价值,提供高附加值的数据类软件产品和服务。
%\item 面向智慧城市、移动互联网应用等热点领域加大投入,支持高附加值的新型网络计算操作系统和应用支撑工具平台的技术创新和产品推广。针对智慧城市、移动互联网应用等当前需求迫切且应用价值高的热点领域,加大投入力度,把握互联网、移动互联网、物联网等平台深度普及所带来的发展契机,支持产学研用相结合的技术创新和成果转化,建立自主可控的新型网络计算操作系统和应用支撑工具平台,打造针对热点应用领域的高附加值基础软件产品。
%\end{enumerate}
\section{学科发展政策建议}
软件定义一切,软件已经成为当今社会的基础设施,新时代的软件四观:系统观、形态观、价值观和生态观为软件学科发展提供了方向。软件学科应以建立这四观为基本发展点,立足于网络时代的蓬勃需求,结合点与面、通与专,在基础理论、软件应用模式、新型软件价值和软件生态行为方面不断创新,继往开来。
\begin{enumerate}
\item 将软件工程扩展为软件科学与工程学科。并建立通识、专业、跨学科、继续等多层次的终生教育体系。
\item 大力加强面向泛在计算的程序设计语言以及支撑环境、软件开发方法的基础性研究,以领域特定的程序设计语言的设计原理与高效实现为核心,以程序设计语言的演化和互操作性机理为重点,通过程序设计语言的基础研究,加大程序设计语言的支撑环境和工具链的开发,从而有效而深入地解决计算的泛在和多样性,软件的复杂性和软件的安全性等带来的新时代的挑战。
%
\item 推进对以“连接协调”为核心的新型软件体系结构下的新一代操作系统模型和机理的研究。研究如何为各类新型异构资源建立适当抽象,并按照应用需求进行灵活调度。研究操作系统和运行平台如何充分发挥其“元层”支撑作用,有效驱动和实现“信息-物理-社会”空间的协同持续演化。
%
\item 重视软件技术研究和应用的价值取向和管理。软件的社会基础设施化使得社会治理现代化与软件密不可分,软件的价值观与社会治理的统一将成为重要的因素。
%\item
推进以人为中心的软件价值的研究和规范。面向泛在计算场景下的软件价值,研究各种社会因素带来的突破使用质量的新的软件价值,并建立相关约束和规范,包括提示用户可能存在的风险,制定智能软件的质量标准、检测方法和实施办法等。
\item 推进对大规模代码和项目的供应链和生态行为的研究和分析。研究个体如何认知复杂项目和生态,群体如何高效高质地协作完成各类软件活动相关的任务,涵盖公司、个体开发者及用户在内的广泛社会力量如何围绕软件构建可持续性演化的生态系统等。%并进一步推进国内软件产业生态系统的建设。
%\item加强各个领域、各种形态、各种应用场景下的软件技术知识产权保护方法和措施的研究,建立公平、公正的环境,持续推动软件技术创新进程。
\item \textbf{重视软件技术研究和应用的价值取向和管理。} 软件的基础设施化使得社会经济运行、社会治理等均与软件密不可分,软件承载的价值观与社会经济价值观的符合度将成为重要的挑战。特别需要加强软件安全和质量,尤其是复杂人机物融合系统安全可靠确保、机器学习赋能软件的质量评估和风险防控等,同步发展软件确保工具环境、软件基础设施以及软件生态治理。需要推进以人为中心的软件价值观研究和规范,研究各种社会因素带来的超越软件使用质量的新型软件价值及其约束和规范、可能风险的防护和提示机制等,软件技术及其应用的伦理研究也应受到关注。
\end{enumerate}
\section{软件教育政策建议}
软件教育在充分考虑知识体系和教育手段的基础上,未来注重专业教育与通识教育并重,领域学科知识与软件学科知识结合,原理讲授与开源实践融合。
\section{升级完善软件学科高等教育体系}
软件定义一切将带来软件定义的世界,无处不在的软件不仅成为社会经济活动的基础设施,还将重塑人们的思维模式。面向未来,每一个接受高等教育的成年人不仅应该是现代信息化社会的直接受益者,更应该是现代软件文明的直接创造者,软件技能不再仅仅是大学软件专业人才的专业技能,还将成为所有大学生必备的工作生活技能。因此在现代高等教育体系中,\textbf{软件教育不仅仅是面向软件专门人才的专业教育,还应该成为覆盖全体大学生的通识教育}。软件教育要注重专业教育与通识教育并重,领域学科知识与软件学科知识结合,原理讲授与动手实践融合。
\begin{enumerate}
\item 推行以“计算思维 + 创新思维”为核心的普及教育,包括软件学科核心认知能力的成长模型和规律及其知识体系、以计算思维为核心,融合创新思维的系统化认知能力培养方法和适应不同认知水平且贯穿终生的软件学科普及教育方法
%
\item 推行以“多学科交叉融合知识体系 + 系统能力和解决复杂工程 问题能力培养”为核心的专业教育,包括建立面向多学科交叉融合的软件学科专业教育的知识体系和软件学科专业教育核心能力的培养方法
%
\item 推行以“专业学科知识 + 软件学科知识”为基础,实现复合型、创新型和跨界人才培养的其他学科专业教育,建立基于“专业学科知识 + 软件学科知识”的其他学科专业教育知识体系和具有软件学科知识和能力的复合型、创新型和跨界专业人才培养方法
%
\item 开展以“探究成才规律 + 寻求理念创新 + 开发支撑软件”为 核心的教育方法改革,探索软件学科人才培养模型及规律、研究软件学科资源在人才培养中的应用,推进群体化学习和大规模在线开放实践 MOOP研发软件学科教育的支撑软件
\begin{enumerate}
\item \textbf{布局面向全体大学生的软件通识教育。} 当今的大学软件通识教育隐含在计算机通识教育之中,缺少系统性设计。未来大学软件通识教育要从两个能力入手,实现三个衔接,延伸并拓展现有国民教育体系。两个能力一是认知能力,通过以``算法抽象+编程思维''为核心的认知教育,帮助学生形成用算法和编程理解数字空间的认知能力;二是实践能力,通过以``语言案例+编程案例''为核心的实践案例教育,帮助学生形成自主学习编程工具、解决现实计算问题的实践能力。三个衔接一是衔接过去,即与中小学的计算机基础教育相衔接;二是衔接当下,即与当下大学开设的``大学计算机基础''通识课程融合衔接;三是衔接未来,即与大学各类专业教育和未来终身学习相衔接。
%
\item \textbf{重构软件学科专业人才培养体系。} 当今主导软件学科专业教育的知识体系是以计算机为中心的软件知识体系。面向新时代软件新``四观''标定的软件未来走向,需将以计算机为核心的软件学科知识体系拓展为以网络为平台的软件学科知识体系,系统能力培养标准也要由计算机空间拓展到网络空间,建立与软件新``四观''相适应的高层次研究型专门人才培养方法,强化解决以网络为平台的复杂系统问题的能力,造就勇于开拓新时代软件学科``无人区''的探索者,为中国引领新时代软件学科发展培养领军人才。
%
\item \textbf{开展面向其他学科专业的软件工程教育。} 目前各专业领域的应用软件开发由于专业知识与软件知识之间的鸿沟而经常发生需求沟通、软件理解等方面的困难,迫切需要加强各专业领域中的软件工程能力培养。为了适应``软件定义一切''的时代特点,结合各行业领域信息化转型发展需求,需构建面向其他学科专业的软件工程课程体系,实现复合型、创新型和跨界人才培养,有效提升行业领域应用专门人才与软件专业人才合作开发复杂应用软件的能力,为各行业领域提供高端软件开发人才,提高基于计算机和网络开发仿真、设计、分析、制造、测试等工具软件的能力和水平。
%
\item \textbf{构建并开放软件教育支撑平台。} 软件学科是实践动手能力要求很高的学科专业软件开发环境是软件学科人才培养的基础支撑。要把握软件学科实践性的特点坚持以泛在化的计算机和网络为支撑工具支持软件人才实践能力培养研发支持软件人才培养的支撑软件和大规模开放在线课程Massive Open Online CourseMOOC与开源软件资源以及开源软件开发部署云平台对接构建开放共享的软件开发、部署、维护、升级和演化的实训平台推广大规模开放在线实践Massive Open Online PracticeMOOP教学对接软件产业环境形成支撑大学教育和终身教育的开放平台。
\end{enumerate}
\section{软件产业政策建议}
泛在计算和“软件定义一切”使得软件产业挑战和机遇并存。
我国软件产业虽然有长足的发展,但是鉴于基础相对薄弱,还需要在下述两个方面不断加强和拓展:
一是需要为软件产业培育良好的基础环境;二是需要把握泛在计算带来的机会开拓新型应用模式。
如何能抓住时代赋予的机会,在软件技术领域实现颠覆式创新和跨越式发展,对我国实现创新型国家发展战略具有重大意义。
具体来说,建议国家在知识产权和公共数据平台建设方面建立政策法规,培育健康的产业发展环境,并面向热点领域加大投入,为发展新型应用模式和开源生态加强产业政策。
\section{构建软件产业良性发展环境}
软件学科总体而言是一个以解决问题为目标的技术学科,支撑产业发展是其使命,产业需求反过来又为其发现研究问题提供了源头。过去,软件学科的战略地位通过其支撑的战略性新兴产业—软件产业—得到强化。今天,在软件定义一切、成为经济社会基础设施的时代背景下,软件产业与软件学科的战略意义将进一步彰显。\textbf{一个强大的软件产业需要强大的软件学科支撑,同时也提供了软件学科发展的沃土。} 我国软件产业基础还相对薄弱,还处于产业链的中低端,需要把握住新时代软件带来的颠覆式发展机遇期,实现创新发展和跨越发展。
\begin{enumerate}
\item 知识产权保护:加强各个领域、各种形态、各种应用场景下的软件技术知识产权保护方法和措施的研究,健全决策机制,规范操作流程,探索形成赋权形式、成果评价、收益分配等方面制度,建立有针对性的知识产权保护、投融资政策环境,培育健康发展的软件产业生态。
%%1在开源政策法规方面建议加强对开源相关知识产权法律法规的研究和建立政府采购向开源方案或混合方案倾斜政府主导建立开源基金会鼓励社会力量参与公益性开源创新生态环境建设。
\item 数据开放政策:建立数据开放机制和平台,鼓励围绕大数据聚集、管理、分析和应用的大规模协作制定数据开放的相关政策,开放地理、气候、统计、环境、交通等政府数据,并建立基于互联网的大数据开放共享平台,以及开放的数据分析工具库,鼓励不同的组织和个人基于此平台开展数据聚集、管理、分析和应用的大规模协作,挖掘数据蕴含的价值,提供高附加值的数据类软件产品和服务。
\item 软件资产管理和共享体系: 建立国家软件资产管理和共享体系,构建基础、领域、行业软件生态,发展社会化、群智化、开源化的国家软件生态圈。
\item 发展新型应用:面向智慧城市、移动互联网应用等热点领域加大投入,支持高附加值的新型网络计算操作系统和应用支撑工具平台的技术创新和产品推广,打造针对热点应用领域的高附加值基础软件产品和服务。
\item 培育开源生态:培育基于开源模式的公益性生态环境建设,采取“参与融入、蓄势引领”的开源策略(“参与融入”针对国际成熟开源社区,“蓄势引领”则从中文开源社区建设切入),发展开源软件生态,并以其为抓手提升我国在信息技术领域的核心竞争力和国际影响力。
\section{TBC: 一些执行层面的建议}
\begin{enumerate}
\item 确立软件发展的优先位置,在软件学科发展的基础性和战略性方向上强化科研支撑,在软件应用和产业上确立软件优先的发展思路。例如,在国家重点研发上设立软件专项,并在其他各专项中设立领域或行业软件的递增份额。
\item 机构设置
\item jm融合
\end{enumerate}
\end{enumerate}
\item \textbf{完善知识产权保护。} 我国软件产业还处于产业链的中低端的一个重要原因,是全社会对软件知识产权保护的认识和手段严重缺失。需加强软件知识产权保护的宣传,加强各个领域、各种形态、各种应用场景下的软件技术知识产权保护方法和措施研究以及法规制定,完善健全软件知识产权保护体系并建立严格的实施机制,切实保护软件技术和应用创新。
%
\item \textbf{布局新基础设施建设。} 结合数字中国建设和数字经济发展新需求打造新一代信息技术主导的社会经济活动的新型基础设施如5G通信网、物联网、人工智能开放平台和大型数据中心等。同时加快推动传统物理基础设施的软件定义改造和升级如电力传输网、交通路网等。以此为基础面向传统行业领域数字化转型、网络化重构和智能化提升的迫切需求大力推进软件定义方法在各行业的推广应用推进工业互联网技术研发和平台构建按需打造各行业特定的泛在操作系统。
%
\item \textbf{大力发展新型应用。} 新一代基础设施必将孕育人机物融合的新型应用。需面向智慧城市、社会治理、敏捷物流、信息消费等重点领域,加强投入和引导,构建相应的大数据互操作平台和应用开发工具,支撑高附加值软件产品和服务的技术创新和应用。
%
\item \textbf{积极培育开源生态。} 开源生态是新时代软件发展的重要时代特征。需培育基于开源模式的公益性生态环境建设,采取``参与融入、蓄势引领''的开源策略(``参与融入''针对国际成熟开源社区,``蓄势引领''则从中文开源社区建设切入),发展开源软件生态,探索开源生态下的新型商业模式,并以其为抓手提升我国在信息技术领域的核心竞争力和国际影响力,特别是通过中文开源平台的建设构建国家软件资产托管和共享体系。
%
\item \textbf{推进公共数据开放。} 新时代软件发展的一个重要特征是大数据驱动。需通过政策和法规制定,鼓励地理、气候、统计、环境、交通等政府数据和公共数据开放,构建基于互联网的大数据开放共享平台及开放的数据分析工具库,支持不同组织和个人开展数据汇聚、管理、分析和应用的大规模协作和高附加值的数据类软件产品和服务创新。
\end{enumerate}

Binary file not shown.

Binary file not shown.

View File

@ -20,6 +20,7 @@
\usepackage{tikz}
\usetikzlibrary{trees}
\usepackage[textsize=tiny]{todonotes}
\newcommand{\xxm}[2][]{\todo[color=yellow, #1]{xxm: #2}}
\newcommand{\dan}[2][]{\todo[color=orange, #1]{dan: #2}}
@ -30,8 +31,11 @@
\usepackage[style=numeric, sorting=none]{biblatex}
\bibliography{references.bib}
\usepackage{color}
\usepackage{stmaryrd}
\newcommand{\oomit}[1]{}
\newcommand{\authorComment}[3]{{\textcolor{#1}{$\llbracket$~#2: #3~$\rrbracket$}}}
\newcommand{\wang}[1]{\authorComment{red}{wang}{#1}}
\makeindex
@ -46,10 +50,12 @@
\tableofcontents
%\oomit{
\chapter*{摘要}
\addcontentsline{toc}{chapter}{摘要}
\input{Ch0-1-Abstract}
%}
\mainmatter
@ -58,6 +64,8 @@
\chapter{引言}
\input{Ch1-1-History}
%\oomit{
\chapter{程序设计语言与理论}
\label{book1-PL}
\input{Ch1-2-ProgrammingLanguage}
@ -73,10 +81,11 @@
\part{新时代的软件学科}
%}
\chapter{引言}
\input{Ch2-1-Overview}
%\oomit{
\chapter{软件理论}
\input{Ch2-2-SoftwareTheory}
@ -109,6 +118,7 @@
\chapter{学科发展建议}
\input{Ch3-1}
%}
\printbibliography[heading=bibintoc,title=参考文献]