2.1 信息技术产业的核心基本结构与特征

信息技术产业包括计算、存储与网络传输等领域,其中计算依然是整个产业的核心。所以在此将与计算机产品相关的技术与产品的结构做一个整体分析,以便更好地理解信息技术产业的规律以及正在发生的变化。

现代通用计算机产品包括建立在冯·诺依曼结构之上的、计算性能不断提高的硬件,以及越来越强大的系统软件,包括操作系统、程序语言环境、数据库和其他中间件等。

计算机硬件的基本性能,目前主要是运算/处理速度与存储容量。这部分工作的本质是材料与工艺的问题。当前占主导地位的、以单晶硅为基础的计算机芯片的制造,现在已经用到了近100个稳定的自然化学元素中的近50种;晶体管由平面发展到了立体;最小线宽已经达到10nm左右。根据理论分析和预测,使用硅技术的最小线宽的极限将是2nm。取代硅技术的探索已经在全球开展多年,包括石墨烯在内的众多材料被深入研究。但是迄今为止还没有本质性的突破,所以未来什么材料会取代硅而继续“摩尔定律”的奇迹还不得而知。目前芯片制造过程要经过上千道工艺处理才能完成。这个领域经过几十年的发展,建立起了极高的技术门槛,用“极致”都不足以描述其精密与复杂程度,关键技术被Intel公司等几家国际巨头所垄断。

计算机系统软件虽然没有芯片技术那样高的门槛,但是由于通用性强以及软件几乎无再生产/复制成本的特征,在市场上具有赢者通吃的规律,国际市场也主要被几家国际巨头所垄断。

而应用软件,由于涉及的领域范围极其广阔,呈现出百花齐放、百舸争流的局面。由于自计算机诞生至今的70年来计算机的基础并没有发生本质性的变化,因此面向各种应用领域的理论与实践,自然成为计算机产业发展的一个重要主线。作为一个应用工具,现代计算机对社会发展的影响也都是通过各种具体应用来体现的。

将计算机领域主要的基础理论、技术方法与实际产品形态各个部分综合在一起,从一个特定的角度能够看到这个领域今天的一个整体概要结构(见图2-1)。

图2-1 当前计算机领域的整体概要结构

前面重点讨论过,由于在基础科学理论层面没有本质性的突破,因此人工智能只能属于应用范畴的内容,而没有计算机基础性理论方面的成果。因此有人称各种人工智能的方法不过是软件应用开发工具箱中的一些可用工具而已。数据结构/数据库也属于“问题领域理论方法”范畴。而软件设计开发方法中的许多内容,如构件化方法等,常常被放在软件工程中讨论,所以软件工程与软件设计开发方法之间的界限是比较模糊的。

图2-1展现了当前计算机产业分为两个互相联系而又相对独立的核心过程:通用计算机产品的制造过程与应用软件的开发过程。操作系统等系统软件可以看作是应用软件过程的一个特殊产物。这两条线的结合便是最终的计算机应用系统。在后面的讨论中,将通用计算机产品简称为计算机基础(技术)平台(相对于应用软件而言)。

通用计算机产品被以CPU、操作系统等为代表的主要核心部件产品所主宰,单纯的、没有核心部件制造开发能力的整机制造厂商价值日益降低。而这些核心部件的设计与生产被控制在极少数几个国际巨头手中,绝大多数的企业无缘参与其中。但应用软件则不同,全球有数量巨大的应用软件开发参与者,从个体开发人员到SAP这样的巨头。应用软件也构成了信息技术行业最为活跃的一个部分,它也直接决定着计算机对社会的影响。

得益于摩尔定律带来的计算机硬件性能的长期持续高速发展与价格的持续下降,今天在很多情况下,软件开发者基本不用考虑计算机的计算能力与存储能力的限制。再加上计算机程序语言逐步接近自然语言形态,编程环境日益友好,编程可调用的资源也不断丰富,与实物产品的设计开发相比,软件开发几乎是在一个拥有无限可用资源的虚拟空间里的随意发挥,以至于软件设计开发甚至被认为是一种纯精神化的艺术创作过程。这是目前软件开发的一个最基本的特征,由此导致软件产业所具有了一些区别于其他实物产业的特质。

(1)从从业人员的角度来看,由于软件的上述基本特征,计算机软件设计与开发的参与门槛大为降低。不仅有许多来自各种不同背景、没有受过严格训练的人员参与其中,受过严格训练的人员也无意中倾向于随性,而不是按照严格的规范开展工作。软件开发过程不时成为“耍小聪明”的自我表现,这使得软件的质量难以保证。所以尽管有软件工程的指导,保证软件的质量依然是一个令整个产业都头痛的事情。以至于近些年许多学者们在传统的软件质量体系的基础上又提出了“软件可信”的问题,并做了大量的探索性工作。

(2)从技术的角度、特别是系统学的角度来看,由于应用软件在大多数情况下是在一个几乎无资源限制的虚拟空间内随意编制的,因此除了逻辑规则之外,没有其他的客观规律的制约,从而导致大型应用软件系统的复杂度在快速增加,其复杂度远远超过了一般的物质化实体系统。因为实体系统有物理规律等方面的硬性限制,其设计构造不能随意发挥,所以其复杂度不可能随意扩张。而软件的开发则非常不同,系统的复杂性只受到设计人员思维能力甚至仅仅受他们的主观意愿的限制。

复杂的应用软件,由于拥有较高的系统复杂度,设计与开发过程必然要遵循一些合理的规则,否则系统的可靠性、可维护性等都将变得无法接受。尽管这些合理的规则常常被忽视或者被应付了事,理解并有效地使用这些规则对于开创信息技术产业的未来还是有着极为重要的意义。因此,计算机领域在20世纪70年代出现了“软件工程”这一学科。

图2-2是复杂软件产品的完整开发过程示意图,是对图2-1中“软件工程”部分的概要性展开。对于成熟的应用领域,建模与架构的设计常常显得并不重要,大家往往重视的是需求分析及设计与开发过程。这是因为在成熟的领域里,已经有成型的模型与架构成果可以直接借鉴或使用。但是,如果在做一个全新的、独创性的复杂应用,建模与架构的设计就显得极为重要了。越是复杂的系统,顶层的设计就越为重要。建模与架构设计就是复杂软件系统的顶层设计部分。而应用架构设计是业务模型的具体化,它与建模之间并没有严格的界限。没有良好的顶层设计,系统达到一定的复杂程度后,很容易出现崩溃的局面,更不用说功能是否能够被准确良好地实现了。同时,良好的顶层设计也是保证系统适应未来发展变化的必要条件。

图2-2 复杂软件产品的完整开发过程示意图

在复杂软件开发过程中,最具挑战的是系统的建模。建模过程,是用逻辑语言对一个实际的系统做抽象层面的描述的过程。这个描述既要能够反映系统的外在功能,又要能够用最简洁普适的方式揭示系统内在的本质结构。“建模”在本质上是无中生有的创造性过程,而且针对一个问题可以有不同的模型抽象。这就好像对于计算问题,图灵机只是多种模型抽象中的一种,还有其他的计算模型,如算盘机、递归函数等,而且它们被证明彼此等价。

虽然同一个问题的模型可能有多种,不同的模型在指导系统实现的时候,其有效性却可能是不同的。而目前没有一个严格的方法能够从计算机面对的广泛不同的具体问题中抽象出“最佳”的模型。这显示出在计算机应用中,在可用的理论与方法之外,经验与直觉所具有的极为重要的作用。

做模型抽象设计,需要有哲学的素养,能够透过现象抓住本质;要有严格的逻辑系统思考能力,将概念的空灵转化为现实的操作;要有丰富的数学工具知识,能够灵活地使用逻辑化工具构建模型;要对计算机的本质有准确的把握,能够准确判断哪些功能和过程是可以用计算机有效实现的,那些需要做合理的限制性约束保证其可实现性。所以,优秀的建模人员在知识与能力方面既要有高度,又要有广度与深度。

模型的抽象过程大体可以分为两个层面的工作。一个是在业务领域层面对业务做模型化抽象。这个模型是有明确业务含义的。这个工作完成以后,在某些情况下,有必要对业务模型进一步做逻辑/数学的抽象。这种纯逻辑/数学模型,抽去了具体的业务内容,仅仅是一个逻辑/数学结构。它可以对业务有更好的扩展性和适应性,也可能成为一个通用产品的基础模型而适用于不同的业务领域。这样的产品可以通过加载不同的业务参数集合而成为不同的业务领域中的应用软件的核心部分。

业务模型的抽象,通常包括三个互相关联的部分:业务数据/信息模型;业务功能/结构模型;业务流程/过程模型。前者描述数据/信息的构成与关系,后两者结合在一起描述完整的业务活动。

如前所述,对同一个问题可以抽象出多个不同的模型,却没有一个明确的标准来衡量哪个模型是最优的。但是还是可以总结出一些定性的条件来帮助评价模型的优劣。

(1)层次与结构的合理清晰:模型应该根据对系统影响程度的不同来划分层次;根据功能特征划分同层内的组成部分。不同层次与组成部分自身及它们之间的差异与关系要清晰易理解,无歧义性;

(2)简洁性:效果相同的情况下,最简单的模型是最好的;

(3)还原性:模型是对业务的抽象,从模型还原为业务的时候,能够准确完整地实现预期的业务功能;

(4)可扩展性:可以在不改变主要结构,只做参数调整或微观局部修改补充的情况下适应新的变化,容纳未来的发展;

(5)一致性:模型内部的功能与过程没有内在的逻辑冲突与矛盾。

大型复杂应用软件,如银行业务系统、企业ERP系统等,都是有完善的底层模型来支撑的。随着信息技术应用的不断拓展与深化,应用建模在计算机面对复杂问题的时候,会变得日益关键与重要,也会不断产生出新的理论与方法。

非常遗憾的是,虽然迄今为止发展了各种与系统相关的理论,但是却没有出现一门通用的、跨领域的系统分析与建模的理论与方法,来指导构建日益复杂的计算机应用系统。以至于在计算机被日益广泛应用的今天,应用系统的设计水平千差万别,五花八门。具有普适性的通用系统论,已经成为计算机应用发展中一个不被感觉到到迫切的需求。而今天被热炒的人工智能与大数据技术,同样也要依赖于高水平的系统设计才能充分发挥出自身的价值(见第8章第8.4节)。