软件的未来会是怎样?

抽象水平的不断提高
服务器君一共花费了298.598 ms进行了4次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

IBM院士 Grady Booch

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

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

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

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

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

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

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

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

本文地址:http://www.nowamagic.net/librarys/veda/detail/764,欢迎访问原出处。

不打个分吗? 还木有人打分噢!

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/764

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《Python学习手册(第4版)》 鲁特兹(Mark Lutz) (作者), 李军 (译者), 刘红伟 (译者), 等 (译者)

《Python学习手册(第4版)》学习Python的主要内建对象类型:数字、列表和字典。使用Python语句创建和处理对象,并且学习Python的通用语法模型。使用函数构造和重用代码,函数是Python的基本过程工具。学习Python模块:封装语句、函数以及其他工具,以便构建较大的组件。学习Python的面向对象编程工具,用于组织程序代码。学习异常处理模型,以及用于编写较大程序的开发工具。了解高级Python工具,如装饰器、描述器、元类和Unicode处理等。

更多计算机宝库...