一、“软件技术”发展历史
第一是软件技术发展早期(20世纪50和60年代);第二是结构化程序和对象技术发展时期(70和80年代);第三是从90年代到现在,软件工程技术发展新时期。
1、软件技术发展早期
在计算机发展早期,应用领域较窄,主要是科学与工程计算,处理对象是数值数据。1956年在J.Backus领导下为IBM机器研制出第一个实用高级语言Fortran及其翻译程序。此后,相继又有多种高级语言问世,从而使设计和编制程序的功效大为提高。这个时期计算机软件的巨大成就之一,就是在当时的水平上成功地解决了两个问题:一方面从Fortran及Algol60开始设计出了具有高级数据结构和控制结构的高级程序语言,另一方面又发明了将高级语言程序翻译成机器语言程序的自动转换技术,即编译技术。然而,随着计算机应用领域的逐步扩大,除了科学计算继续发展以外,出现了大量的数据处理和非数值计算问题。为了充分利用系统资源,出现了操作系统;为了适应大量数据处理问题的需要,开始出现数据库及其管理系统。软件规模与复杂性迅速增大。当程序复杂性增加到一定程度以后,软件研制周期难以控制,正确性难以保证,可靠性问题相当突出。为此,人们提出用结构化程序设计和软件工程方法来克服这一危机。软件技术发展进入一个新的阶段。
2、结构化程序和对象技术发展时期
从70年代初开始,大型软件系统的出现给软件开发带来了新问题。大型软件系统的研制需要花费大量的资金和人力,可是研制出来的产品却是可靠性差、错误多、维护和修改也很困难。一个大型操作系统有时需要几千人年的工作量,而所获得的系统又常常会隐藏着几百甚至几千个错误。程序可靠性很难保证,程序设计工具的严重缺乏也使软件开发陷入困境。
结构程序设计的讨论导致产生了由Pascal到Ada这一系列的结构化语言。这些语言具有较为清晰的控制结构,与原来常见的高级程序语言相比有一定的改进,但在数据类型抽象方面仍显不足。面向对象技术的兴起是这一时期软件技术发展的主要标志。“面向对象”这一名词在80年代初由Smalltalk语言的设计者开始提出,而后逐渐流行起来。
面向对象的程序结构将数据及其上作用的操作一起封装,组成抽象数据或者叫做对象。具有相同结构属性和操作的一组对象构成对象类。对象系统就是由一组相关的对象类组成,能够以更加自然的方式模拟外部世界现实系统的结构和行为。对象的两大基本特征是信息封装和继承。通过信息封装,在对象数据的外围好像构筑了一堵“围墙”,外部只能通过围墙的“窗口”去观察和操作围墙内的数据,这就保证了在复杂的环境条件下对象数据操作的安全性和一致性。通过对象继承可实现对象类代码的可重用性和可扩充性。可重用性使能处理父、子类之间具有相似结构的对象共同部分,避免代码一遍又一遍的重复。可扩充性使能处理对象类在不同情况下的多样性,在原有代码的基础上进行扩充和具体化,以求适应不同的需要。
传统的面向过程的软件系统以过程为中心。过程是一种系统功能的实现,而面向对象的软件系统是以数据为中心。与系统功能相比,数据结构是软件系统中相对稳定的部分。对象类及其属性和服务的定义在时间上保持相对稳定,还能提供一定的扩充能力,这是十分重要的事情,这样就可大为节省软件生命周期内系统开发和维护的开销。就像建筑物的地基对于建筑物的寿命十分重要一样,信息系统以数据对象为基础构筑,其系统稳定性就会十分牢固。到20世纪80年代中期以后,软件的蓬勃发展更来源于当时两大技术进步的推动力:一是微机工作站的普及应用,另一是高速网络的出现。其导致的直接结果是:一个大规模的应用软件,可以由分布在网络上不同站点机的软件协同工作去完成。由于软件本身的特殊性和多样性,在大规模软件开发时,人们几乎总是面临困难处境。软件工程面临许多新问题和新挑战,而进入一个新的发展时期。
3、软件工程技术发展新时期
自从软件工程名词诞生,历经三十余年的研究和开发,人们深刻认识到,软件开发必须按照工程化的原理和方法来组织和实施。软件工程技术在软件开发方法和软件开发工具方面,在软件工程发展的早期,特别是20世纪70、80年代软件蓬勃发展时期,已经取得了非常重要的进步。软件工程作为一个学科方向,愈来愈受到人们的重视。但是,随着大规模网络应用软件的出现所带来的新问题,使得软件工程中,在如何协调合理预算、控制开发进度和保证软件质量等方面,软件人员面临更加困难的境地。
进入20世纪90年代,Internet和WWW技术的蓬勃发展使软件工程进入一个新的技术发展时期。以软件组件复用为代表,基于组件的软件工程技术正在使软件开发方式发生巨大改变。早年软件危机中提出的严重问题,有望从此开始找到切实可行的解决途径。在这个时期软件工程技术发展代表性标志在三个方面,即:
①基于组件的软件工程和开发方法成为主流。组件是自包含的,具有相对独立的功能特性和具体实现,并为应用提供预定义好的服务接口。组件化软件工程是通过使用可复用组件来开发、运行和维护软件系统的方法、技术和过程。
②软件过程管理进入软件工程的核心进程和操作规范。软件工程管理应以软件过程管理为中心去实施,贯穿于软件开发过程的始终。在软件过程管理得到保证的前提下,软件开发进度和产品质量也就随之得到保证。
③网络应用软件规模愈来愈大,复杂性愈来愈高,使得软件体系结构从两层向三层或者多层结构转移,使应用的基础架构和业务逻辑相分离。应用的基础架构由提供各种中间件系统服务组合而成的软件平台来支持,软件平台化成为软件工程技术发展的新趋势。软件平台为各种应用软件提供一体化的开放平台,既可保证应用软件所要求基础系统架构的可靠性、可伸缩性和安全性的要求;又可使应用软件开发人员和用户只要集中关注应用软件的具体业务逻辑实现,而不必关注其底层的技术细节。当应用需求发生变化时,只要变更软件平台之上的业务逻辑和相应的组件实施就行了。
以上这些标志象征软件工程技术已经发展上升到一个新阶段。这个阶段尚远未结束。软件技术发展日新月异,Internet的进步促使计算机技术和通信技术相结合,更使软件技术发展呈五彩缤纷局面。软件工程技术的发展也永无止境。
二、“软件技术”发展中的问题
(一) 人才结构失衡。随着总量供不应求这一矛盾的缓和,我国软件人才结构不尽合理的问题进一步凸现,成为我国软件人才体系的突出特点,主要体现在如下方面:
1、高端软件人才缺乏。从经济规律来看,一种工业化时代的产业结构,要求是一个金字塔型的人才梯队,软件业需要的不仅仅需要从事基础开发的程序设计员作为智力基础,更需要塔尖的高级人才。目前高级软件人才仍是中国软件企业最紧缺的软件人才类型,在这种背景下,中国软件人才的“金字塔”形的合理结构并未实现。我国软件技术人员约有19万人左右,此外,还有30万人在从事计算机应用、科研与教育工作。但是,我国软件技术人员中70%是从事程序开发、技术支持和服务的人员,软件产业发展所急需的系统分析师、架构设计师、高级工程师、项目经理和技术工人的数量非常匮乏,无法满足软件产业发展对高层次人才的需求。
2、复合型软件人才缺乏。高素质的复合型软件人才正逐渐成为软件人才中的新宠。复合型软件人才有两种类型:一种是既精通软件又精通硬件的基础理论和设计技能的人才;另一种是既精通软件基础理论和设计技能,同时又精通其他专业业务和应用知识的复合型人才,这类人才是软件领域与其他应用领域交叉的复合型人才。目前我国软件产业正处于产业化的进程中,产业化的一个要求就是资本的介入,在一个产业链中,资本是不可缺少的一个环节,这就需要我国培养出大批软件类资本运作人才,为软件企业的发展赢得资金。而产业链的下游是产品的销售环节,又需要大批渠道及销售、公关、宣传人才以及软件售后技术支持人才。另外,由于我国的软件产业主要是发展采取外包模式,这就要求既懂得软件知识,又能娴熟地运用外语的复合型人才。
(二)自主知识产权的主流软件产品较少,产品多为低端产品。我国的软件产品,主要集中在产业链的低端、辅助型和外挂式的产品阶段;在核心技术上有创新、自主设计的“重量级”软件产品还比较缺乏;许多基础性、关键性软件还处于空白状态。中国的软件产业从上世纪八十年代开始发展,到今天虽然取得了长足的进步,但是国内很少有企业能够达到承揽国际项目所需的严格的内部流程及质量控制。虽然有众多优秀的软件工程师,但多数外包企业尚未建立起正确的流程,也未能培养出准确掌握这些流程的开发人员。在中国软件市场,国外品牌的产品仍然占据高端系统软件、数据库软件的绝大部分市场份额,占据中间件、行业应用软件、ERP软件的大部分市场份额;国内品牌产品则在ERP和财务管理软件、防杀毒软件、中文信息处理软件及部分行业应用领域占据优势。
(三)核心技术缺乏,创新能力不足。我国大部分软件生产企业在较低层面上进行着大量重复性的工作,是一种小作坊式的生产,这种生产方式为了眼前的生存,根本无力开展软件技术创新,再加上盗版泛滥成灾,企业缺乏技术创新的动力,很多企业几乎没有研发投入。软件产业中发展较快的产品领域主要是游戏、财务及商务管理、教育领域,而技术含量较高的大型数据库系统、管理信息系统的开发及发展较为缓慢。软件企业创新能力不足,软件产品的生命周期很短、产品更新升级频繁、换代速度很快,软件产品高利润、高回报的主要源泉,应该来自于持续不断的创新。而目前中国软件企业的创新能力不足,特别是对软件产业链上游产品的原始创新力不足。
三、“软件技术”发展中问题的解决办法及措施
1、改进教育模式培养人才,面向市场吸引人才。调查发现,教育体制的落后导致了软件专业毕业生缺乏实际编程能力,无法适应企业的实际需要。而软件企业自身又不愿提供相应的培训,这样一来编程人员的数量几乎是处在一种“净减”状态。所以,我们要从教育抓起,多为学生提供实践机会,不断加强学生的实际编程能力。同时,也应该提供专业的培训,不断提高员工的理论水平和实际操作水平,有助于满足企业各层次的人才需求。由于我国的软件外包发展模式,在人才培训方面,要积极扩大国内软件高级人才与国际软件市场的联系和交流,扩大面向出口的专业化二次培训规模,重在加强项目经理和程序员的外语能力和过程管理能力,为软件出口提供更广泛的人才基础。要将引进面向国际市场的人才作为我国引进人才的重点领域,使我国成为软件国际化人才的高地。在吸引海外留学人员回国发展的工作中,重点吸引一批优秀的项目经理、系统分析师和软件工程师。
2、不断研发拥有自主知识产权的关键技术与核心技术。软件产业必须强调自主知识技术,强调知识产权,这是因为它在很大程度上决定着一个国家信息安全和综合国力。要发展具有自主知识产权的软件产品,应该在软件研究与开发上加大投入,注重跟踪和模仿,独立从事软件自主核心技术的研发,逐步在操作系统、数据库管理系统和关键应用软件方面形成完整、系统的自主版权软件产品。同时加快核心软件技术和产品制度创新及产业化。集中支持核心技术软件,基础软件工具和嵌入式软件的开发和自主的软件创新信息产业化。
3、推行软件园建设。作为加快发展软件技术、有效推进软件产业发展而兴起的软件园,在研发与引进软件新技术、创新开发软件新产品、加速软件成果转化等方面,具有典型的示范与带动作用。软件园区集中提供了理想的软件研发场地、良好的成果孵化环境、相当规模的软件流通市场、完善的人才培训场所、便利的交通与生活设施、良好的休闲娱乐场所,能充分发挥软件园区的群体优势和规模效应。
总之,软件是信息产业的灵魂。我们应该加强人才培养,提高自主研发能力,不断掌握核心技术,继续做大软件产业规模,使我国立足于世界信息强国之列。