【最新】招聘信息

当前位置: 主页 > 智能停车

软件开发之发展历程杂谈

来源:    发布时间:2011/4/20    浏览次数:1775次

1.软件开发的发展历程
从计算机发明到现在,出现了多种软件开发方法,19世纪60年代的发生的软件危机促使了“软件工程”这个概念的诞生。但是目前软件开发的现状如何呢?毫无疑问,现在的软件开发方法论目前也在迅速的发展。每天,我们都能够从各类信息渠道获得新的软件开发方法或者新的程序开发语言,每一种开发方法或者开发语言都号称着有着相当的进步,都声称着能简化开发过程,缩短开发时间。
从编程语言的层面上来说,机器语言、汇编语言、C语言、C++、JAVA、C#、Python、Ruby、JavaScript等等这么多的编程语言,每种语言都有着它自己的特点以及存在的理由,其中,有号称无所不能的通用编程语言,如C、C++、JAVA等等,也有着为了特定的目标而实现特定的功能的语言,如JavaScript、Ruby等等。各种编程语言之间的相互吸收和相互竞争同时又促进了这种编程语言的不断进步与发展。于是,各类编程语言都不断出现自己的最新版本,理所当然的,最新的版本肯定是比前面的版本要先进得多,功能要强大得多。
从编程的方法论上来说,从一开始的机器语言和汇编语言直接对机器码进行编程,到后面,“结构化”的编程方法开始出现并流行起来;而后,“软件危机”的出现最终导致“面向对象”的编程方法大行其道,而“软件工程”的概念则试图将软件开发当作一个系统的工业化工程进行管理;到后来,人们发现,软件的发展实在是太迅速了,软件系统是越做越大,功能是越来越强,而其中出现的问题同时也是越来越多,于是,可复用的软件方法论开始流行,“面向构件”进行编程的理论开始出现;而后,在这基础上,IBM的“SOA理论”则试图去解决一个大型系统内部的各大功能模块或者子系统之间以及几个大系统的整合以及相互连接的问题。当然,这些理论都只是一部分,在这过程中,还出现了更多的号称能够(其实也确实能够)简化编程工作的方法论出现,如“设计模式”、“AOP面向切片编程”、“敏捷程序开发”等等。
就目前来说,现在的软件开发处于百家争鸣的状态,无论从理论上还是实际的应用上,没有哪种开发方法和开发语言是能够一统天下的。当年,JAVA出现的目的就是为了简化开发,代替C++语言,然而,现实的情况却是JAVA的体系架构越来越复杂,越来越庞大。而后,python、ruby等号称更简单的语言出现了,虽然这些语言确实简化了很多的开发工作,但是,我们却惊奇的发现,没有一种语言能够完全取代另外一种。好笑的是,每种语言都有一批强烈而偏激的支持者,经常听说两种语言的支持者相互贬低对方,争得面红耳赤,甚至大打出手的。更奇怪的是,每一种语言的版本也在不断的更新,而更新的内容似乎我们永远都用不到(如C++语言,现在就没有哪个编译环境是完全100%的支持其最新的国际标准的)。

2.越来越复杂的软件开发
随着软件开发理论的发展和开发语言、开发环境的进步,我们程序员写代码似乎是应该越来越轻松,而现在的实际情况似乎也确实是如此,以前用汇编语言需要写几百行的代码,用C语言可能只需要写几十行甚至几行,用python语言等最新的编程语言则代码量还会更少得多。各式各样的开发理念的出现同时也指导者我们如何去编写更可靠,更高效,更容易理解和重构的代码。但是,实际的情况却并非完全如此,抛开学习这些编程语言、理论知识的复杂度来说,就算是我们完全的掌握了这些编程语言和理论知识,完全的能够在实践中轻松的应用这些理论以及语言,我们还是发现,在实际的开发中,编程的复杂度还是越来越高。
这似乎非常的令人迷惑,但确实是真实存在的。也许这是因为现在的信息社会发展越来越快,对信息系统的各种要求(功能性、稳定性、效率性、可用性等等)越来越高,所以导致以前很简单的系统现在变得非常之复杂。例如大家都知道的windows系统,从win95到现在最新的vista,其安装文件从100M扩大到了4G,扩大了40倍。vista的系统功能,界面美观性以及系统稳定程度,都是win95所无法望其项背的。在windows 95的时代,写一个vista这样的系统,其代码量和代码复杂程度是难以想象的。
系统越来越复杂,开发难度越来越大。这正是现在的这么多乱七八糟的开发方法、开发语言、开发平台出现的原因,但是这些新生的事物却远远没有达到程序员所期望的目标。

3.每天都在学习的程序员
每天,我们程序员都会在专业杂志上看到一个新的概念,一种新的语言,一个新的软件开发的研究成果。我们已经不胜其烦,疲于奔命,只要有几个月的时间我们偷懒而不去学习的话,我们就会沮丧的发现,自己已经远远的落后于时代了。而更可悲的是,我们费尽精力去学完了一新知识的时候却发现我们实际能够应用这种知识的时间要比学习这种知识的时间要少得多,而最大的收获却是在和同行们吹牛的时候能够吸引到别人的眼球。
软件行业是一个高复杂性、高逻辑性和高创新性的行业,我们程序员则毫无疑问的是世界上最聪明,最好学,同时也是工作得最累的人。经常可以看见,程序员加班加点的开发软件赶进度,疲于奔命的调试程序来解决程序BUG,没日没夜的进行系统升级与割接。同时,每天还得不断的学习各种新的知识,进行自我充电。

4.和其它行业相比的软件业
这是一个很奇怪的现象,在现代化的工业社会,除了软件行业以外的各行各业大都有自己非常成熟的行业标准。和这些行业相比,软件行业的发展是太过于迅速还是太过于缓慢呢?一方面,软件行业的天才牛人层出不穷,各种新知识新概念新技术新语言爆炸式的增长,软件的体积越来越膨大,功能越来越强大。从这方面看,软件业的发展确实是太过于迅速了。但是,从另外一方面看,这些新知识,新技术,新语言的快速出现,快速发展,却没有根本的解决编程复杂化的问题,都是一个一个的解决问题,并没有实质性的变革。我们发现,编程还是越来越复杂,系统bug越来越多,而且还只能是发现一个解决一个。一个能够得到广泛认可的工业化标准一直都无法出现。

5.下一代的软件业发展方向,向工业化进军?
我们也在幻想,什么时候编程能够像搭建积木一样的,用各种零件,可以搭成飞机,楼房等等。就像是工业化的生成汽车,飞机一样的,在设计好以后,像生产线一样的,将各类的零件搭建在一起,组成各种组件,然后再将这些组件组合起来,就生产出了一个汽车和飞机,不再需要每个零件都单独进行制造,零件接口都单独进行设计。
也许很多人会认为,这和软件的灵活性是相冲突的,一个软件如果这样进行开发,必然会使其效率降低,功能不灵活。然而,历史上的任何一种工业技术都出现过类似的问题,1765年,英国人瓦特发明了蒸汽机,但是在当时,这个工业化的始祖机器并没有得到任何的实际应用,其原因就是这个蒸汽机在效率、功率和稳定性上遇到了非常多的技术性的难题,面对嘲笑和讽刺,瓦特并没有放弃,而这些问题,最终都得到了完善的解决。所以说,我们可以这样认为,效率性和灵活性都只是简单而暂时的技术性问题,都可以得到完善的解决。下一代的软件开发应该是怎么样的呢?通用接口(SOA),可复用模块(居于构件理论),从设计到开发快速成型…… 这肯定不会是一个简单而短时间内就能达到的目标,但是终究会实现的。
也许,到时候,软件开发会变成这样子:底层构件(或者说是中间件或者组件)开发者开发底层的构件;系统架构师设计整个系统的架构;然后二次开发者将这些构件组装成一个完整的系统软件。
或许,整个软件行业的统一工业标准永远都不会出现,出现了以后其也会反过来制约软件业的发展。更何况目前各大公司相互竞争,谁都认为自己的是最好的。各大牛人也都是谁都不服谁,今天你发明一种新语言,明天我发明一种的。
但是,简化开发过程,快速开发软件毕竟是绝大多数程序员的理想与目标(担心开发的复杂度降低会减少收入的程序员除外,呵呵),也是社会生产力发展的必然趋势。
现在,每个公司,每个人都希望软件开发能够更简单,更方便。从天才牛人到普通的程序员,每个人都在尝试,都在努力的改进软件开发的过程。而各种新的开发语言、开发方法、开发平台也是层出不穷。
在这无比混乱的局面中,软件开发理论在不停的缓慢的进步。我相信,这些慢慢积累起来的量变,最终会转化为质变,工业化的软件开发最终是将会来临的。
 

 

 

】【打印】【关闭
优业合作伙伴