前言: zijisuanjiwenshiyilaiqiyingyonglingyubuduankuoda,xiangguanchanyexunsufazhan,ruanjianshichangdepengbofazhangezhongbianchengyuyanyeyunyuersheng,daomuqianweizhi,bianchengyuyanyifazhandaodisijieduan,kaifagongjugengshicengchubuqiong。
“攻欲善其事必先利其器”,這是眾所周知的道理。一件好的“利器”,就jiu使shi讓rang我wo們men的de工gong作zuo事shi半ban功gong倍bei。現xian在zai主zhu流liu的de開kai發fa語yu言yan和he開kai發fa工gong具ju包bao羅luo萬wan象xiang,一yi時shi間jian很hen難nan把ba握wo,那na麼me就jiu讓rang我wo們men從cong當dang前qian社she會hui的de主zhu要yao編bian程cheng語yu言yan,編bian程cheng工gong具ju出chu發fa,回hui顧gu一yi下xia發fa展zhan過guo程cheng,曆li史shi環huan境jing及ji他ta們men當dang今jin所suo主zhu要yao涉she及ji的de領ling域yu等deng幾ji個ge方fang麵mian,從cong中zhong展zhan望wang未wei來lai的de發fa展zhan趨qu勢shi。
編程語言及開發工具的發展史
第一代編程語言:機器語言。一種很古老的語言。對象很簡單就是“0”和“1”。相對應的編程工具是紙帶和打孔器。因為計算機多為8位,16位,32位和64位,每次處理一個字節。原理也很簡單,1的位就打孔,0的位保留。利用光學原理,遮光為0,透光為1。根據定義位置取得指令和操作數。這種語言比較古老,這裏不做表述。
第二代編程語言:彙(hui)編(bian)語(yu)言(yan)。和(he)機(ji)器(qi)語(yu)言(yan)一(yi)樣(yang),也(ye)是(shi)麵(mian)向(xiang)機(ji)器(qi)的(de)語(yu)言(yan),利(li)用(yong)計(ji)算(suan)機(ji)所(suo)有(you)硬(ying)件(jian)特(te)性(xing)並(bing)能(neng)直(zhi)接(jie)控(kong)製(zhi)硬(ying)件(jian)的(de)語(yu)言(yan)。優(you)點(dian)是(shi)可(ke)以(yi)直(zhi)接(jie)操(cao)作(zuo)計(ji)算(suan)機(ji)硬(ying)件(jian),速(su)度(du)快(kuai)。缺(que)點(dian)則(ze)是(shi)太(tai)難(nan)理(li)解(jie),所(suo)以(yi)除(chu)非(fei)本(ben)人(ren)所(suo)寫(xie),且(qie)不(bu)好(hao)維(wei)護(hu)。不(bu)過(guo)這(zhe)裏(li)寫(xie)出(chu)的(de)程(cheng)序(xu)是(shi)半(ban)成(cheng)品(pin),需(xu)要(yao)手(shou)動(dong)彙(hui)編(bian)成(cheng)目(mu)標(biao)文(wen)件(jian)再(zai)連(lian)接(jie)成(cheng)中(zhong)間(jian)文(wen)件(jian),最(zui)後(hou)才(cai)能(neng)生(sheng)成(cheng)可(ke)執(zhi)行(xing)文(wen)件(jian)。
第三代編程語言:麵向過程的編程語言。剛剛問世時叫高級語言,意思為比更接近人的語言。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增加生成調用樹的功能,可以把有層次的調用關係樹型表示出來,使程序人員對邏輯結構更加清晰。VC10xinjiayijiduopeixianshiqidegongneng,bingpeihechengxuneibujiyongjishengchengdegongneng,zaixinzengdeduihanshudemohuzhazhaogongneng,jushuohaizengqiangzhinengganzhigongneng,keyigaoliangyinyong。
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做為黑客教學的語言,成為未來開發團隊標準的開發語言。是不是上天故意開下的一個玩笑?!一切都讓我們拭目以待。■