華山論劍 — 未來軟件開發的語言和工具
前言:自計算機問世以來其應用領域不斷擴大,相關產業迅速發展,軟件市場的蓬勃發展各種編程語言也孕育而生,到目前為止,編程語言已發展到第四階段,開發工具更是層出不窮。
“攻欲善其事必先利其器”,這是眾所周知的道理。一件好的“利器”,就使讓我們的工作事半功倍。現在主流的開發語言和開發工具包羅萬象,一時間很難把握,那么就讓我們從當前社會的主要編程語言,編程工具出發,回顧一下發展過程,歷史環境及他們當今所主要涉及的領域等幾個方面,從中展望未來的發展趨勢。
編程語言及開發工具的發展史
第一代編程語言:機器語言。一種很古老的語言。對象很簡單就是“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所有,未經許可不得轉載。