前言: zijisuanjiwenshiyilaiqiyingyonglingyubuduankuoda,xiangguanchanyexunsufazhan,ruanjianshichangdepengbofazhangezhongbianchengyuyanyeyunyuersheng,daomuqianweizhi,bianchengyuyanyifazhandaodisijieduan,kaifagongjugengshicengchubuqiong。
“攻欲善其事必先利其器”,這是眾所周知的道理。一件好的“利器”,jiushirangwomendegongzuoshibangongbei。xianzaizhuliudekaifayuyanhekaifagongjubaoluowanxiang,yishijianhennanbawo,namejiurangwomencongdangqianshehuidezhuyaobianchengyuyan,bianchenggongjuchufa,huiguyixiafazhanguocheng,lishihuanjingjitamendangjinsuozhuyaoshejidelingyudengjigefangmian,congzhongzhanwangweilaidefazhanqushi。
編程語言及開發工具的發展史
第一代編程語言:機器語言。一種很古老的語言。對象很簡單就是“0”和“1”。相對應的編程工具是紙帶和打孔器。因為計算機多為8位,16位,32位和64位,每次處理一個字節。原理也很簡單,1的位就打孔,0的位保留。利用光學原理,遮光為0,透光為1。根據定義位置取得指令和操作數。這種語言比較古老,這裏不做表述。
第二代編程語言:huibianyuyan。hejiqiyuyanyiyang,yeshimianxiangjiqideyuyan,liyongjisuanjisuoyouyingjiantexingbingnengzhijiekongzhiyingjiandeyuyan。youdianshikeyizhijiecaozuojisuanjiyingjian,sudukuai。quedianzeshitainanlijie,suoyichufeibenrensuoxie,qiebuhaoweihu。buguozhelixiechudechengxushibanchengpin,xuyaoshoudonghuibianchengmubiaowenjianzailianjiechengzhongjianwenjian,zuihoucainengshengchengkezhixingwenjian。
第三代編程語言:麵向過程的編程語言。剛剛問世時叫高級語言,意思為比更接近人的語言。Basic,Fortran ,Cobol ,C,Pascal 等等真正叫做高級語言的原因是它們已有屬於自己的編譯係統、開kai發fa包bao等deng,要yao執zhi行xing必bi須xu通tong過guo編bian譯yi器qi才cai行xing。相xiang比bi於yu機ji器qi語yu言yan和he彙hui編bian語yu言yan,這zhe次ci是shi以yi人ren類lei邏luo輯ji思si維wei角jiao度du出chu發fa設she計ji的de計ji算suan機ji語yu言yan,抽chou象xiang程cheng度du大da大da提ti高gao,模mo塊kuai化hua思si想xiang的de引yin入ru使shi得de程cheng序xu更geng加jia清qing晰xi。可ke它ta的de缺que點dian是shi非fei常chang難nan講jiang述shu,因yin為wei它ta就jiu是shi基ji於yu麵mian向xiang過guo程cheng的de思si想xiang創chuang建jian,所suo以yi自zi然ran不bu具ju備bei麵mian向xiang對dui象xiang的de特te點dian。
第四代編程語言:麵向對象的編程語言。這就是當前主流的開發語言。如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年後的計算機網絡,我們都知道將會進入到“雲計算”時代。“雲計算”是shi大da量liang的de網wang絡luo計ji算suan機ji為wei我wo們men提ti供gong計ji算suan機ji所suo需xu的de各ge種zhong服fu務wu,而er非fei本ben地di計ji算suan機ji。隻zhi需xu一yi個ge瀏liu覽lan器qi,甚shen至zhi不bu需xu要yao操cao作zuo係xi統tong,一yi切qie工gong作zuo都dou通tong過guo網wang絡luo來lai實shi現xian。現xian在zai“雲計算”已經開始試探性進入我們的生活。
做為“雲計算”的先鋒,可以用到一些在線的工具係統,比如,在線辦公、在線電視、在線翻譯……,其中很多內容都基於“雲計算”模(mo)式(shi),盡(jin)管(guan)還(hai)不(bu)完(wan)善(shan),但(dan)也(ye)初(chu)具(ju)規(gui)模(mo)。不(bu)完(wan)善(shan)是(shi)因(yin)為(wei)在(zai)線(xian)工(gong)作(zuo)的(de)服(fu)務(wu)器(qi)處(chu)理(li)能(neng)力(li)不(bu)夠(gou),網(wang)絡(luo)帶(dai)寬(kuan)不(bu)夠(gou)或(huo)算(suan)法(fa)不(bu)佳(jia)導(dao)致(zhi)的(de)流(liu)量(liang)分(fen)配(pei)不(bu)合(he)理(li)等(deng),在(zai)這(zhe)裏(li)扮(ban)演(yan)最(zui)主(zhu)要(yao)角(jiao)色(se)的(de)還(hai)是(shi)服(fu)務(wu)器(qi)的(de)處(chu)理(li)能(neng)力(li)。現(xian)在(zai)的(de)高(gao)端(duan)和(he)大(da)型(xing)服(fu)務(wu)器(qi)幾(ji)乎(hu)都(dou)被(bei)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來編寫)一(yi)個(ge)軟(ruan)件(jian)工(gong)程(cheng)隻(zhi)有(you)概(gai)設(she),沒(mei)有(you)詳(xiang)設(she),那(na)最(zui)後(hou)由(you)工(gong)程(cheng)師(shi)寫(xie)出(chu)來(lai)的(de)程(cheng)序(xu)很(hen)可(ke)能(neng)是(shi)五(wu)花(hua)八(ba)門(men)個(ge)性(xing)化(hua)實(shi)足(zu),就(jiu)算(suan)編(bian)程(cheng)人(ren)員(yuan)有(you)很(hen)好(hao)的(de)開(kai)發(fa)素(su)養(yang),編(bian)碼(ma)風(feng)格(ge)統(tong)一(yi),也(ye)不(bu)能(neng)保(bao)證(zheng)使(shi)用(yong)的(de)方(fang)法(fa)相(xiang)同(tong),這(zhe)樣(yang)程(cheng)序(xu)升(sheng)級(ji)和(he)維(wei)護(hu)就(jiu)很(hen)受(shou)人(ren)員(yuan)限(xian)製(zhi)且(qie)效(xiao)率(lv)低(di)下(xia)。
但如果你使用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新(xin)加(jia)一(yi)機(ji)多(duo)配(pei)顯(xian)示(shi)器(qi)的(de)功(gong)能(neng),並(bing)配(pei)合(he)程(cheng)序(xu)內(nei)部(bu)即(ji)用(yong)即(ji)生(sheng)成(cheng)的(de)功(gong)能(neng),在(zai)新(xin)增(zeng)的(de)對(dui)函(han)數(shu)的(de)模(mo)糊(hu)查(zha)找(zhao)功(gong)能(neng),據(ju)說(shuo)還(hai)增(zeng)強(qiang)智(zhi)能(neng)感(gan)知(zhi)功(gong)能(neng),可(ke)以(yi)高(gao)亮(liang)引(yin)用(yong)。
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,我不僅聯想到風馬牛不相及的詞彙:哈(ha)勃(bo)定(ding)律(lv)。哈(ha)勃(bo)定(ding)律(lv)是(shi)天(tian)文(wen)學(xue)上(shang)的(de)定(ding)律(lv),是(shi)指(zhi)所(suo)有(you)的(de)星(xing)係(xi)之(zhi)間(jian)有(you)互(hu)相(xiang)遠(yuan)離(li)的(de)趨(qu)勢(shi),而(er)且(qie)遠(yuan)離(li)的(de)速(su)度(du)越(yue)來(lai)越(yue)大(da),以(yi)此(ci)來(lai)證(zheng)明(ming)宇(yu)宙(zhou)不(bu)斷(duan)膨(peng)脹(zhang)。Java和C++是不是也像軟件行業中的兩顆行星呢?
活力對於任何開發語言來都是永恒的話題,有沒有活力就要看是否與世界上最熱門的技術的緊密聯係,以及有多少人在關心它。Java已經在3G、數字電視等多個領域都有所建樹。Java擁有世界上最多的軟件工程師,看看大街小巷各種軟件培訓的傳單,就能看出來人們對這門開發語言有多麼關心。
綜上所述,在未來的20年中彙編和C仍然會在操作係統內核、工業控製、實時係統等領域獨樹一職,Java在互聯網上稱王,Python會成為團隊開發新的尊者,C++則在目前涉及領域繼續發揮餘熱並與Python成為好夥伴。
篇後語:
Java本身是以C++為基礎設計,包括Eclipse的好多版本也是用VC來寫,如果C++真的不能在未來軟件市場王者歸來,那會不會是命運的安排?至於Python做為黑客教學的語言,成為未來開發團隊標準的開發語言。是不是上天故意開下的一個玩笑?!一切都讓我們拭目以待。■