软件的未来在哪里?
自从软件出现以来,软件开发中的新技术、新方法不断出现,如编程语言有C、Java、Rust等,构件技术有COM/COM+、CORBA、JavaBean/EJB等,开发方法有面向过程、面向对象、面向服务等,以及目前比较流行的虚拟机、容器、微服务、DevOps、Scrum等技术和方法。但是,这些软件开发、软件复用技术,并没有给软件行业带来真正的变革:一是每个软件项目都需要建立一个开发团队,全程参与软件生命周期的所有阶段,包括软件需求、设计、开发、测试、部署,而软件开发离不开程序员编写的一行行代码;二是开发团队中的参与者必须是相关专业人员,其他人无法直接参与到其中,从而造成软件开发周期长,以及不同团队的工作成果难以实现共享等缺点。参照人类社会发展历史可以发现,目前软件行业的开发模式和生产力,与古代手工作坊非常类似,这说明软件行业还处于一个低水平发展阶段,可称为“软件作坊”阶段,还远未进入到工业化生产阶段。
所以,软件的未来就在于实现“软件工业化”。
“软件作坊”是依靠手工劳动,使用简单工具从事小规模软件项目的开发,而“软件工业”则需要实现全社会的分工与协作,并能够贯穿于软件生产过程中的所有阶段,进而实现大规模或极大规模软件项目的开发。要实现社会化的分工与协作,其中的一个关键就在于软件开发的模块化。
虽然软件组件或构件技术已出现很长时间,还有人提出了软件生产线、软件工厂等概念,但目前没有任何一个开发平台、一种开发技术,可以真正实现“以模块组合的方式开发软件”,进而促进软件行业实现工业化革命。
软件行业陷入这种困境的根本原因,在于缺少一个具备普适性的“工业规范”,目前已有的各种软件协议、规范或标准,都难以担当此重任;没有规矩,不成方圆,一个行业没有规范或标准,就无法进入工业化生产;软件行业也是如此。所以,要实现“以模块组装的方式开发软件”,就要遵循“工业规范”来开发标准化的软件模块,从而使得不同团队开发的软件模块可以有效地组合在一起,生成能够满足特定需求的软件产品。
上述“工业规范”应具备以下特征:
1.根据“工业规范”开发的软件模块,应处于同一个软件环境当中,具体体现为同一个目录、同一个开发工具版本、同一个程序库或数据库支持等。目前软件开发中的空间、包等概念的出现,是为了防止软件组件、类等的版本冲突而提出的,而“工业规范”则要求软件模块位于同一个空间或包中,这样才能实现软件模块的可组合、可插拔、可替换特性。
2.根据“工业规范”开发的软件模块,其对外提供的接口(或方法)名称和参数,应统一、明确。由不同团队开发同一个软件模块,如果没有一个统一的规范来约束,该软件模块的实现将千差万别,比如模块接口(或方法)命名方式的不同,以及接口(或方法)的参数名称、参数数据类型、参数顺序、返回值类型和数据格式的不同,都会导致该模块的外在表现形式的不同,即使处于同样的开发、运行环境,这样的软件模块也难以与其他模块组合在一起。
3.根据“工业规范”开发的软件模块,其属性、字段的名称和数据类型,应统一、明确。此特征主要体现在软件模块的输入、输出数据和存储数据的规范化管理上。以一个用户数据表为例,对于“用户名称”字段,可统一定义为name,而不是login_name或userName,这样将极大地提高软件模块的开发效率,也便于不同软件模块之间的数据交互。
功件树平台中的“功件规范”,即为上述“工业规范”的一个实现范例,详细内容请点这里。