IBM院士 Grady Booch

一言以蔽之,整个软件工程史——甚至可能包括其未来——可归结为抽象水平的不断提高。

当今的软件密集型系统(software-intensive system)有一系列共同特征:它们通常都相当复杂、分散部署、并发协作,同时还在持续不断地演化。不仅如此,这类系统大多不是孤立的,系统之中嵌系统,单个系统不过是其中一个元素而已。它们为与其他系统进行协作而存在,与之协作的系统往往由其他组织在不同时间开发,且以不同速率各自发生着变化。

在很多方面而言,所有的软件密集型系统,相对于其所处的时代都是复杂的。在计算领域的早期时代,我们在很大程度上受到硬件的约束和限制。发展到后来,软硬件互相推动,如同一场如影随形的舞蹈。在软件方面,我们看到开发语言不断成熟,从机器语言进化到汇编语言,再进化到以算法为中心的更高级语言,直到目前的面向对象语言。与之类似,在开发库方面,我们看到小规模的子程序库逐步演变为框架,再进化成面向特定领域的架构。同时,我们也看到方法论不断成熟,从结构化分析和设计,演变到面向对象的分析和设计。这些都是抽象水平不断提高的事证。抽象,正是人类指望赖以应对世界复杂度的主要方式。

在这段旅程中,限制因素不仅仅是硬件,我们掌握特定领域固有算法的能力也拖慢了前进的步伐。这在计算机生成图形领域的演进上体现得尤其明显。为了得到照片质量的图像,简单的渲染仅仅是起始第一步,从这一步演化出光线追踪算法。接下来,我们掌握了将简单纹理映射到图像上的技术。然后,进展在下列方面不断发生:运动处理、流体建模、单个生物建模、生物群体建模、毛发建模,最后是衣物建模。在这个领域里面,我们已近乎——但还没真正达到——掌握对人类面部进行高拟真建模的算法。正如其他领域的工程进步一样,伴随着这条路上的每一步,我们先设法解决眼前问题,然后不断改进、提升,构筑解决方案,再将它推向解决更加复杂问题的程度。

在某些领域中,算法的掌握仍然是个问题,特别是有关通信和处理海量信息的领域。但在很多系统之中,算法已不复是限制因素。举例来看,在众多以Web为中心的系统中,我们已经目睹了架构的演化。最早的系统很简单,早期HTML限制了我们的实现能力(即链接和简单格式化),因此催生出更加动态的结构,体现在今天广泛使用的ASP、JSP,特别是Ajax中。征程在继续:语义网的研发,将会导致一种以web为中心的全新架构的产生。

对于当今的许多系统而言,我们愈来愈受到人为因素的约束:诸如怎样组织团队开发、部署和升级软件密集型系统,如何判定这些系统的社会影响等等。

软件开发实用主义经济学认为,只需一两个人即可完成软件密集型系统的构想,但却要大量人力来把构想变为现实。跨越不同时区甚至时间本身的团队构成形态不断地证明着这一论断。时区差异是导致异地分布式开发中许多问题的本质原因。需要互相协作的开发小组可能位于不同城市,而且有可能分布于不同国家。就时间推移而言,不光意味着很多系统由一个小组开发后再交由其他小组改进,而且大系统内的子系统也常常是不同团队在不同时间开发完成的。不仅如此,能源成本增加导致物流成本增加,经济压力所迫,也推动了在真实世界中从不谋面的开发组的组建过程。这在开源领域里面已有实证,很多开源系统都是由遍布全球的团队构建而成的。

我们克服了机器的限制,接下来又摆脱了算法、设计以及组织架构的约束,最终,只有想象力是桎梏了。因此,软件工程的未来将面临这样的严峻考验:任何推动世界向未来发展的进步之举,都依赖于目前尚未问世的软件。这样一来,打造复杂软件系统的能力将影响个人和机构,甚至人类文明。这是身为软件开发人员的荣耀:作为一个行业,我们业已且将继续改变这世界。这同样也是责任:正如Bjarne Stroustrup所言,文明运行于软件之上,我们重任在肩。

Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐