华山论剑 — 未来软件开发的语言和工具
前言:自计算机问世以来其应用领域不断扩大,相关产业迅速发展,软件市场的蓬勃发展各种编程语言也孕育而生,到目前为止,编程语言已发展到第四阶段,开发工具更是层出不穷。
“攻欲善其事必先利其器”,这是众所周知的道理。一件好的“利器”,就使让我们的工作事半功倍。现在主流的开发语言和开发工具包罗万象,一时间很难把握,那么就让我们从当前社会的主要编程语言,编程工具出发,回顾一下发展过程,历史环境及他们当今所主要涉及的领域等几个方面,从中展望未来的发展趋势。
编程语言及开发工具的发展史
第一代编程语言:机器语言。一种很古老的语言。对象很简单就是“0”和“1”。相对应的编程工具是纸带和打孔器。因为计算机多为8位,16位,32位和64位,每次处理一个字节。原理也很简单,1的位就打孔,0的位保留。利用光学原理,遮光为0,透光为1。根据定义位置取得指令和操作数。这种语言比较古老,这里不做表述。
第二代编程语言:汇编语言。和机器语言一样,也是面向机器的语言,利用计算机所有硬件特性并能直接控制硬件的语言。优点是可以直接操作计算机硬件,速度快。缺点则是太难理解,所以除非本人所写,且不好维护。不过这里写出的程序是半成品,需要手动汇编成目标文件再连接成中间文件,最后才能生成可执行文件。
第三代编程语言:面向过程的编程语言。刚刚问世时叫高级语言,意思为比更接近人的语言。Basic,Fortran ,Cobol ,C,Pascal 等等真正叫做高级语言的原因是它们已有属于自己的编译系统、开发包等,要执行必须通过编译器才行。相比于机器语言和汇编语言,这次是以人类逻辑思维角度出发设计的计算机语言,抽象程度大大提高,模块化思想的引入使得程序更加清晰。可它的缺点是非常难讲述,因为它就是基于面向过程的思想创建,所以自然不具备面向对象的特点。
第四代编程语言:面向对象的编程语言。这就是当前主流的开发语言。如C++、Java等。它的几个特点为:(1)封装性,是基于安全考虑。(2)继承性,是基于扩展处理。(3)多态性,更多考虑到灵活性和重用性。第四代语言的开发工具种类丰富。MicroSoft公司的VS系列有多种VC—C++,VB—Basic,VJ—Java,VF—FoxBase,还有基于DotNet平台的C#(最新VS2010还推出F#)等等。如日中天的Java开发工具也很多,下文将根据软件开发未来的发展趋势谈到相关的一部分。
以上是四代的编程语言简述,对于第五代编程语言,有很多人提出想法,不过到目前为止还没有任何一个方案能脱颖而出,笑傲群雄。
主流编程语言及工具主要涉及的领域
到今天,机器语言早已绝迹于江湖,成为古老的传说。汇编语言和C语言基本统治操作系统内核、工业控制、实时系统等领域。近些年在世面上较火的Linux系统下主要用的就是C语言,C++不仅支持面向对象的编程,也支持面向过程的结构程序设计。
目前在通信、网络、图形、图像、多媒体平台等领域优势比较明显。在这些领域通常都有很高的性能要求,C++有较高执行效率(汇编和C的执行效率更高但实在难以实现),再加上开发商在开发包方面的重点“照顾”,而使其它语言在算法精度较高的编程方面不能望其项背。
曾经有句非常经典的老话:“真正的程序员用VC,聪明的程序员用Delphi。”粗略一看好像这句话有问题,VC是编程工具,而Delphi是编程语言,其实不然。在Delphi1到Delphi7是用Object Pascal语言,到Delphi8以后才改叫Delphi语言,这与平时听到人们讲“我会VC”完全是两回事。VC是编程工具,斧头是伐木工具,如果你因为会伐木就说,“我会斧头”就贻笑大方了,正常的说法应该是“我会用VC”。delphi当初虽是Borland公司研发,但在Windows(上的大多数)编程方面,比VS(包括VC)更容易上手,与WinAPI连接更紧密,(使用者)更容易实现预定的目标,而且更容易做更漂亮的界面。
现在大名鼎鼎的QQ最初就是delphi开发,2001年后才逐渐改为VC开发,常用的迅雷也有很多是delphi的版本。简而言之,05年以前凡是VC做到的,delphi同样能做得到(甚至更好),随着Borland公司希望把更多精力投入在新看好的应用程序生命周期管理(ALM)业务上,
Delphi(目前的编程工具属于IDE业务)的传奇之路也走到尽头。95年以后互联网的大跃进,B/S结构越来越受到人们的推宠。APS,PHP,Java……一时间各路英豪各显伸手。
未来编程语言和工具发展趋势
未来编程语言和工具的发展趋势大至取决于三个方面,第一,未来计算机网络工作框架及工作模式;第二,当前开发工具对开发语言的支持程度与硬件发展;第三,各种语言的本身的生命力和活力。
20年后的计算机网络,我们都知道将会进入到“云计算”时代。“云计算”是大量的网络计算机为我们提供计算机所需的各种服务,而非本地计算机。只需一个浏览器,甚至不需要操作系统,一切工作都通过网络来实现。现在“云计算”已经开始试探性进入我们的生活。
做为“云计算”的先锋,可以用到一些在线的工具系统,比如,在线办公、在线电视、在线翻译……,其中很多内容都基于“云计算”模式,尽管还不完善,但也初具规模。不完善是因为在线工作的服务器处理能力不够,网络带宽不够或算法不佳导致的流量分配不合理等,在这里扮演最主要角色的还是服务器的处理能力。现在的高端和大型服务器几乎都被IBM和SUN公司“垄断”。SUN是Java之父,对Java呵护倍至,而IBM更是用一半的力量把其相所有关代码用Java重新编写,并且用另一半的力量在推广Java。不要怀疑Java的开发前景,Java在未来必定是与大型服务器贴合的最紧密、兼容性、有效性最好的语言,Eclipse也将成最火的编程工具。(其实现在Java已经在各种编程语言使用量中排名第一,最近10年中更是9年排名榜首,仅2005年一次失手屈居第二)。
Java统治互联网是必然趋势,但Python在未来(桌面程序)扮演重要角色也绝对不能说成是意外。Python具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行。更重要的一点是,Python本身的设计理念 “There should be one-- and preferably only one --obvious way to do it”,译成汉语就是对于一个特定的问题,只要有一种明显、最好(完美)的方法来解决就可以。这个设计理念本身很符合未来开发团队的胃口。如果(不用Python来编写)一个软件工程只有概设,没有详设,那最后由工程师写出来的程序很可能是五花八门个性化实足,就算编程人员有很好的开发素养,编码风格统一,也不能保证使用的方法相同,这样程序升级和维护就很受人员限制且效率低下。
但如果你使用Python就完全不一样,Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一,它使你能够专注于解决问题而不是去搞明白语言本身。Python号称“胶水语言”他能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块速度要求非常高,就可以用C++重写。Python是最早的(基于互联网的)在线开发语言,Google在推出在线office之后,就把在线Python推给网友,在Google的背景支持下Python肯定会很有前景。
一种编语言能不能广泛的推广,很大一部分原因取决于它的开发工具好不好用;一种语言开发的软件能不能大量使用,则取决于它的开发包支持的够不够好。
C++曾经的状元,在92年VC1.0问世开创可视化编程后,98年VC6.0达到巅峰。除了MicroSoft在02年发布基于WinXP的SDK以后,就基本没有大的动作。VC7,VC8,VC9都只是在编程界面上下的功夫,开发包也没有太多增加。2006年底Vista上市,可支持相关的开发包直到08年VS2008的SP1补丁包中才发布。最近版的VS2010测试版在09年Win7闪亮登场后,终于千呼万唤始出来。这次对VC10在开发工具上确实有不少改进,对C++语法也增加不少支持。VC10增加生成调用树的功能,可以把有层次的调用关系树型表示出来,使程序人员对逻辑结构更加清晰。VC10新加一机多配显示器的功能,并配合程序内部即用即生成的功能,在新增的对函数的模糊查找功能,据说还增强智能感知功能,可以高亮引用。
C++的优势在于效率,归根到底还是因为它是编译型语言,产生的代码将有很多工作在寄存器中执行。而Java的是解释型语言,大多代码执行都要入栈,因为寄存器是在CPU中,它的访问速度比内存访问速度快好几个数量级。计算(PC)机的芯片大多都是register computer型(如Intel, AMD),所以Java目前的执行速度没办法与C++相比。
之所以现在的嵌入式领域Java比C++流行,就是因为大多数嵌入式芯片都是stack computer型。那你会问,为什么不都采用register computer型的芯片呢?原因不言自明,为了跨平台(跨CPU),现在我们用是双核芯片,但在本机线程都不能跨CPU,何谈“云计算”(云计算本质就是分布式计算)。既然高端大型服务器都被IBM和SUN“垄断”。那CPU的发展又何去何从呢?当C++不再拥有速率优势的时候,是不是有人会说“廉颇老矣”呢。
近年来C++的使用量大大下降,要不是与C语言天然的裙带关系,要不是开源的程序在支撑门面,恐怕光靠VC,C++早就江河日下。评论一个事物有没有生命力,就要看它当前的发展程度和未来的发展趋势。Java是由C++中的一流高手设计出来的语言,天然性的摒弃一些C++中不妥不安全不稳定的机制,反射机制又使Java如虎添翼。Java的开源框架资料随处可见,WebLogic,TomCat也都开源可寻,可C++的框架却很少。ACE虽然出名但能拿到源码吗?只能配置。经常会有人问可不可以写个C++版的Hibernate给C++程序员来用,连数据库也不能跨平台。每次提到Hibernate,我不仅联想到风马牛不相及的词汇:哈勃定律。哈勃定律是天文学上的定律,是指所有的星系之间有互相远离的趋势,而且远离的速度越来越大,以此来证明宇宙不断膨胀。Java和C++是不是也像软件行业中的两颗行星呢?
活力对于任何开发语言来都是永恒的话题,有没有活力就要看是否与世界上最热门的技术的紧密联系,以及有多少人在关心它。Java已经在3G、数字电视等多个领域都有所建树。Java拥有世界上最多的软件工程师,看看大街小巷各种软件培训的传单,就能看出来人们对这门开发语言有多么关心。
综上所述,在未来的20年中汇编和C仍然会在操作系统内核、工业控制、实时系统等领域独树一职,Java在互联网上称王,Python会成为团队开发新的尊者,C++则在目前涉及领域继续发挥余热并与Python成为好伙伴。
篇后语:
Java本身是以C++为基础设计,包括Eclipse的好多版本也是用VC来写,如果C++真的不能在未来软件市场王者归来,那会不会是命运的安排?至于Python做为黑客教学的语言,成为未来开发团队标准的开发语言。是不是上天故意开下的一个玩笑?!一切都让我们拭目以待。■
文章版权归西部工控xbgk所有,未经许可不得转载。