計(jì)算機(jī)編程語(yǔ)言分類(lèi)及各自用武之地
最近,見(jiàn)大家都在看C++,卻很少人知道C++能干嗎,覺(jué)得學(xué)了沒(méi)意思,因?yàn)橹皇强葱┱Z(yǔ)法知識(shí)自然沒(méi)意思,如果做出東西來(lái),看著自己的成果,想必也會(huì)提高自己興趣的。
針對(duì)學(xué)習(xí)編程語(yǔ)言的迷茫,從而引出一個(gè)問(wèn)題,各種編程語(yǔ)言都是干什么用的?學(xué)了基本的語(yǔ)法,程序的流程,面向?qū)ο蟮乃枷?,能干點(diǎn)啥?
對(duì)于ICT行業(yè)的的大學(xué)生來(lái)說(shuō),能夠詳細(xì)的區(qū)別編程語(yǔ)言的用途及使用方法,對(duì)以后的選擇性學(xué)習(xí)以及就業(yè)方向來(lái)說(shuō)是非常必要的。就此,本人就幾種常用語(yǔ)言的簡(jiǎn)單分析一下。
先說(shuō)一下計(jì)算機(jī)語(yǔ)言的分類(lèi)(大家都知道,一筆帶過(guò)):
1、機(jī)器語(yǔ)言。
2、匯編語(yǔ)言。
3、高級(jí)語(yǔ)言。
前兩天看臺(tái)灣蔡學(xué)鏞先生著的《Java程序員的心聲:爪哇夜未眠》,他把程序語(yǔ)言大致分為五類(lèi),還是不錯(cuò)的:
1、web page script languages
用來(lái)做網(wǎng)頁(yè)的語(yǔ)言,就是網(wǎng)頁(yè)代碼,比如html、javascript、css、asp、php、xml都應(yīng)該屬于此類(lèi),但html算不上編程語(yǔ)言。Javascript和Java沒(méi)有半毛錢(qián)關(guān)系,是兩門(mén)單獨(dú)的語(yǔ)言,在Web2.0時(shí)代,打造富客戶(hù)端的絢麗效果,Javascript語(yǔ)言還是很值得學(xué)習(xí)的,新出的HTML5其實(shí)就是Javascript。我比較看好Javascript,應(yīng)該算是值得學(xué)習(xí)的一門(mén)語(yǔ)言。
2、interpreted languages(解釋型語(yǔ)言)
包括perl、python、rebol、ruby等,也常被稱(chēng)作script語(yǔ)言,通常被用于和底下的操作系統(tǒng)溝通。照蔡學(xué)鏞先生的意思,每個(gè)人至少應(yīng)該學(xué)會(huì)一套這類(lèi)的語(yǔ)言。這類(lèi)語(yǔ)言的缺點(diǎn)是效率差、源代碼外露——所以不適合用來(lái)開(kāi)發(fā)軟件產(chǎn)品,一般用于網(wǎng)頁(yè)服務(wù)器。google公司用的比較多的是C++、Java和python。有時(shí)間我也要學(xué)學(xué)python或者ruby。
3、hybrid laguages(混合型語(yǔ)言)
代表是java和c#。介于解釋型和編譯型之間。蔡認(rèn)為c#是.net平臺(tái)上最重要的語(yǔ)言,值得期待其后續(xù)發(fā)展;至于java,蔡叫你們看他的《sleepless in java》——我暈!
4、compiling languages(編譯型語(yǔ)言)
c/c++,Delphi都是編譯型語(yǔ)言。C++變得越來(lái)越龐大,大多數(shù)的C++程序員只用到(也只懂)C++功能的一小部分。C++很復(fù)雜,要成為C++高手沒(méi)三五年是不行的(就憑這句話(huà),我決定向java投降),盡管如此,但真正要成為高手的都應(yīng)該懂C/C++,重要的API一般都有C++的版本,可見(jiàn)C++的重要性,怪不得大家說(shuō)C++是真正程序員的語(yǔ)言。
5、assembly languages(匯編語(yǔ)言)
匯編語(yǔ)言是最接近于硬件的語(yǔ)言,不過(guò)用的很少。
程序語(yǔ)言學(xué)習(xí)順序建議
如果完全沒(méi)有程序經(jīng)驗(yàn),可照這個(gè)順序:javascript——解釋型語(yǔ)言——混合型語(yǔ)言——編譯型語(yǔ)言——匯編(如果需要的話(huà))。
用業(yè)界流行一句話(huà)做程序語(yǔ)言分類(lèi)的結(jié)尾“真正的程序員用c++,聰明的程序員用delphi”,那么,什么樣的程序員用java呢?
以下是Tiobe公布的最新的2011年9月編程語(yǔ)言排行榜TOP20:
現(xiàn)在來(lái)按順序大致看一下各種語(yǔ)言的用武之地(我也好多不懂,有些是自己網(wǎng)上找的,大家將就看一下):
1、Java:
Java是一種可以撰寫(xiě)跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。Java最初是由James Gosling在Sun Microsystems(現(xiàn)在是Oracle旗下的子公司)開(kāi)發(fā)的一種編程語(yǔ)言,并作為Sun Microsystems的Java平臺(tái)的核心組件于1995年發(fā)布。 這種語(yǔ)言的大部分語(yǔ)法源自于C和C++,但是它具有簡(jiǎn)單的對(duì)象模型和更少的底層服務(wù)。Java源代碼經(jīng)過(guò)編譯之后生成類(lèi)文件,這樣可以使它運(yùn)行在任何一個(gè)Java虛擬機(jī)上,而無(wú)需考慮計(jì)算機(jī)的架構(gòu)。Java 平臺(tái)有三個(gè)版本,這使軟件開(kāi)發(fā)人員、服務(wù)提供商和設(shè)備生產(chǎn)商可以針對(duì)特定的市場(chǎng)進(jìn)行開(kāi)發(fā):
Java SE(Java Platform,Standard Edition)。Java SE 以前稱(chēng)為 J2SE。它允許開(kāi)發(fā)和部署在桌面、服務(wù)器、嵌入式環(huán)境和實(shí)時(shí)環(huán)境中使用的Java 應(yīng)用程序。Java SE 包含了支持 Java Web 服務(wù)開(kāi)發(fā)的類(lèi),并為 Java Platform,Enterprise Edition(Java EE)提供基礎(chǔ)。 Java EE(Java Platform,Enterprise Edition)。這個(gè)版本以前稱(chēng)為 J2EE。企業(yè)版本幫助開(kāi)發(fā)和部署可移植、健壯、可伸縮且安全的服務(wù)器端 Java 應(yīng)用程序。Java EE 是在 Java SE 的基礎(chǔ)上構(gòu)建的,它提供 Web 服務(wù)、組件模型、管理和通信 API,可以用來(lái)實(shí)現(xiàn)企業(yè)級(jí)的面向服務(wù)體系結(jié)構(gòu)(service-oriented architecture,SOA)和 Web 2.0 應(yīng)用程序。 一些電子商務(wù)網(wǎng)站就是基于此平臺(tái)。 Java ME(Java Platform,Micro Edition)。這個(gè)版本以前稱(chēng)為 J2ME。Java ME 為在移動(dòng)設(shè)備和嵌入式設(shè)備(比如手機(jī)、PDA、電視機(jī)頂盒和打印機(jī))上運(yùn)行的應(yīng)用程序提供一個(gè)健壯且靈活的環(huán)境。Java ME 包括靈活的用戶(hù)界面、健壯的安全模型、許多內(nèi)置的網(wǎng)絡(luò)協(xié)議以及對(duì)可以動(dòng)態(tài)下載的連網(wǎng)和離線(xiàn)應(yīng)用程序的豐富支持。基于 Java ME 規(guī)范的應(yīng)用程序只需編寫(xiě)一次,就可以用于許多設(shè)備,而且可以利用每個(gè)設(shè)備的本機(jī)功能?,F(xiàn)在很火的Android開(kāi)發(fā),你懂的。 一入豪門(mén)深似海,偶現(xiàn)在就走上了Java EE這條不歸路。2、C:
C語(yǔ)言,是一種通用的、過(guò)程式的編程語(yǔ)言,廣泛用于系統(tǒng)與應(yīng)用軟件的開(kāi)發(fā)。具有高效、靈活、功能豐富、表達(dá)力強(qiáng)和較高的移植性等特點(diǎn),在程序員中備受青睞。
C語(yǔ)言是由UNIX的研制者丹尼斯·里奇(Dennis Ritchie)和肯·湯普遜(Ken Thompson)于1970年研制出的B語(yǔ)言的基礎(chǔ)上發(fā)展和完善起來(lái)的。目前,C語(yǔ)言編譯器普遍存在于各種不同的操作系統(tǒng)中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C語(yǔ)言的設(shè)計(jì)影響了許多后來(lái)的編程語(yǔ)言,例如C++、Objective-C、Java、C#等。
前段時(shí)間在老板公司實(shí)習(xí),一個(gè)項(xiàng)目經(jīng)理就是用C語(yǔ)言的高手,他以前在UT斯達(dá)康開(kāi)發(fā)GSM核心網(wǎng)的。
3、C++
C++最初發(fā)布于1980年代中期,當(dāng)時(shí)面向?qū)ο笳Z(yǔ)言被認(rèn)為是解決軟件復(fù)雜性問(wèn)題的銀彈。C++的面向?qū)ο筇匦钥聪嗳ナ蛊淙娉搅薈,支持者認(rèn)為C++將迅速把上一代語(yǔ)言擠到陳列館里去。
但是歷史并非如此。究其原因,至少有一部分歸咎于C++本身。為了與C兼容,C++被迫作出了很多重大的設(shè)計(jì)妥協(xié),結(jié)果導(dǎo)致語(yǔ)言過(guò)分華麗,過(guò)分復(fù)雜。為了與C兼容,C++并沒(méi)有采用自動(dòng)內(nèi)存管理的策略,從而喪失了修正C最嚴(yán)重問(wèn)題的機(jī)會(huì)。
另外一部分原因,恐怕要算到面向?qū)ο笊砩稀?雌饋?lái)OO并沒(méi)有很好的達(dá)成人們當(dāng)年的預(yù)期。我就這個(gè)問(wèn)題調(diào)研過(guò),我發(fā)現(xiàn)使用OO方法導(dǎo)致組件之間出現(xiàn)很 厚的粘合層,并且?guī)?lái)了嚴(yán)重的可維護(hù)性問(wèn)題。今天讓我們來(lái)看看開(kāi)放源碼社區(qū),你會(huì)發(fā)現(xiàn)C++的應(yīng)用還是集中在GUI,游戲和多媒體工具包這些方面,在其他 地方很少用到。要知道,面向?qū)ο笠仓皇窃谶@些領(lǐng)域被證明非常成功,而開(kāi)放源碼社區(qū)的選擇,很大程度上體現(xiàn)了程序員的自由意志,而不是公司管理層的胡亂指揮。
也許C++實(shí)現(xiàn)OO的方法有問(wèn)題。有證據(jù)表明C++程序在整個(gè)生命周期的開(kāi)銷(xiāo)高于相應(yīng)的C, Fortran和Ada程序。不過(guò),究竟這是否應(yīng)該歸咎與C++的OO實(shí)現(xiàn)上,還不清楚。
最近幾年,C++加入了很多非OO的思想,其異常思想類(lèi)似Lisp,STL的出現(xiàn)是非常了不起的。
其實(shí)C++最根本的問(wèn)題在于,它基本上只不過(guò)是另一種傳統(tǒng)的語(yǔ)言。STL中的內(nèi)存管理比先前的new/delete和C的方案要好的多,但是還是沒(méi)有解決問(wèn)題。對(duì)于很多應(yīng)用程序而言,其OO特性并不明顯,相比與C,除了增加復(fù)雜度之外沒(méi)有獲得很多好處。
總結(jié):C++優(yōu)點(diǎn)在于作為編譯型語(yǔ)言,把效率與泛型和面向?qū)ο筇匦越Y(jié)合起來(lái),其缺點(diǎn)在于過(guò)于華麗復(fù)雜,傾向于鼓勵(lì)程過(guò)分復(fù)雜的設(shè)計(jì)。
C++是最流行的編程語(yǔ)言之一,它的應(yīng)用領(lǐng)域涵蓋了系統(tǒng)軟件、應(yīng)用軟件、驅(qū)動(dòng)程序、嵌入式軟件、高性能的服務(wù)器與客戶(hù)端應(yīng)用程序和諸如電視游戲等娛樂(lè)軟件。
C++常用于操作系統(tǒng)和驅(qū)動(dòng)級(jí)別軟件開(kāi)發(fā),圖像處理,3D游戲開(kāi)發(fā)等;C++主要應(yīng)用于開(kāi)發(fā)性能要求較高的系統(tǒng)級(jí)軟件,如操作系統(tǒng)、編譯器以及游戲軟件,如暗黑系列等等。
前段時(shí)間研究的NS,無(wú)線(xiàn)網(wǎng)絡(luò)仿真,里面一些鏈路層、路由層協(xié)議的實(shí)現(xiàn)也大都用的是C++,看來(lái)還是躲不過(guò)啊。
4、C#
C#是微軟推出的一種基于.NET框架的、面向?qū)ο蟮母呒?jí)編程語(yǔ)言。C#由C語(yǔ)言和C++派生而來(lái),繼承了其強(qiáng)大的性能,同時(shí)又以.NET 框架類(lèi)庫(kù)作為基礎(chǔ),擁有類(lèi)似Visual Basic的快速開(kāi)發(fā)能力。
C#可以大范圍的適用于高層商業(yè)應(yīng)用和底層系統(tǒng)的開(kāi)發(fā),即使是通過(guò)簡(jiǎn)單的C#構(gòu)造也可以各種組件方便的轉(zhuǎn)變?yōu)榛赪EB的應(yīng)用,并且能夠通過(guò)Internet被各種系統(tǒng)或是其他開(kāi)發(fā)語(yǔ)言所開(kāi)發(fā)的應(yīng)用調(diào)用。
C#也可以為C/C++開(kāi)發(fā)人員提供快速的開(kāi)發(fā)手段而不需要犧牲任何C/C++語(yǔ)言的特點(diǎn)/優(yōu)點(diǎn)。從繼承角度來(lái)看,C#在更高層次上重新實(shí)現(xiàn)了C/C++,熟悉C/C++開(kāi)發(fā)的人員可以很快的轉(zhuǎn)變?yōu)镃#開(kāi)發(fā)人員。
5、 PHP
PHP是基于預(yù)處理 HTML 頁(yè)面模型的一種腳本語(yǔ)言。它大量地借用C和Perl語(yǔ)言的語(yǔ)法, 并結(jié)合PHP自己的特性,使Web開(kāi)發(fā)者能夠快速地寫(xiě)出動(dòng)態(tài)產(chǎn)生頁(yè)面??梢杂糜诠芾韯?dòng)態(tài)內(nèi)容、支持?jǐn)?shù)據(jù)庫(kù)、處理會(huì)話(huà)跟蹤,甚至構(gòu)建整個(gè)電子商務(wù)站點(diǎn)。它支持許多流行的數(shù)據(jù)庫(kù),包括 MySQL、PostgreSQL、Oracle、Sybase、Informix 和 Microsoft SQL Server。PHP本身就是為處理超文件html設(shè)計(jì)的,正是由于它是專(zhuān)為基于 Web 的問(wèn)題而設(shè)計(jì)的,而且它是開(kāi)源的導(dǎo)致可擴(kuò)展性大大增強(qiáng) ,所以運(yùn)用非常廣泛。
相信大家很多人都聽(tīng)說(shuō)過(guò)LAMP。Linux+Apache+Mysql+Perl/PHP/Python,一組常用來(lái)搭建動(dòng)態(tài)網(wǎng)站或者服務(wù)器的開(kāi)源軟件,本身都是各自獨(dú)立的程序,但是因?yàn)槌1环旁谝黄鹗褂?,擁有了越?lái)越高的兼容度,共同組成了一個(gè)強(qiáng)大的Web應(yīng)用程序平臺(tái)。
6、 Objective-C
Objective-C是蘋(píng)果Mac OS X 上開(kāi)發(fā)的首選語(yǔ)言,主要是因?yàn)镸ac OS X 技術(shù)源自NextStep OpenStep操作系統(tǒng), 因?yàn)镺PENSTEP的軟件架構(gòu)(framework) 都是用Objetive-C 寫(xiě)成,所以Mac OS X上的開(kāi)發(fā)最佳語(yǔ)言自然也就是Objective-C 了。
Objective-C是ANSI C的超集,擴(kuò)展了C語(yǔ)言使它具備面向?qū)ο笤O(shè)計(jì)的能力,如類(lèi),消息和繼承。Objective-C 程序中可以利用現(xiàn)有的C語(yǔ)言代碼,使其利用現(xiàn)有的軟件架構(gòu)。這也是為甚莫Objective-C 過(guò)去多年間能夠成為一種流行的用戶(hù)界面開(kāi)發(fā)語(yǔ)言而且至今沒(méi)有消亡,因?yàn)橐环矫嬗盟梢詫?shí)現(xiàn)底層系統(tǒng)編程,另一方面可以支持利用動(dòng)態(tài)架構(gòu)進(jìn)行開(kāi)發(fā)。
前段時(shí)間在公司實(shí)習(xí),有一研二的學(xué)長(zhǎng)就精通此語(yǔ)言,獨(dú)自一人負(fù)責(zé)iphone終端上的應(yīng)用程序開(kāi)發(fā),頗得老板賞識(shí)。
7、VB
VB是快速的界面生成語(yǔ)言,是快速的數(shù)據(jù)庫(kù)程序開(kāi)發(fā)語(yǔ)言。vba是vb的應(yīng)用版,嵌入在MS office中。編寫(xiě)MS office上的程序很好用。缺點(diǎn)是只能在Windows平臺(tái)運(yùn)作。
8、 Python
Python是一種腳本語(yǔ)言,可以與C緊密整合。它可以與動(dòng)態(tài)加載的C庫(kù)模塊交換數(shù)據(jù),也可以作為內(nèi)嵌腳本語(yǔ)言而從C中調(diào)用。其語(yǔ)法類(lèi)似C和模塊化語(yǔ)言的雜合,不過(guò)有一個(gè)獨(dú)一無(wú)二的特征,就是以縮進(jìn)來(lái)確定語(yǔ)句塊。
Python語(yǔ)言非常干凈,設(shè)計(jì)優(yōu)雅,具有出色的模塊化特性。它提供了面向?qū)ο竽芰?,但不?qiáng)迫用戶(hù)進(jìn)行面向?qū)ο笤O(shè)計(jì)。其類(lèi)型系統(tǒng)提供了強(qiáng)大的表達(dá)能力,類(lèi)似Perl,具有匿名lambda表達(dá)式,這點(diǎn)又讓Lisp黑客們感到親切。Python依靠Tk提供方便的GUI界面開(kāi)發(fā)能力。
在所有的解釋型語(yǔ)言里,Python和Java最適合多名程序員以漸進(jìn)方式協(xié)同開(kāi)發(fā)大型項(xiàng)目。在很多方面,Python比Java要簡(jiǎn)單,它非常適合與構(gòu)造快速原型,這一點(diǎn)使得它對(duì)于Java有獨(dú)特優(yōu)勢(shì):對(duì)于那些既不很復(fù)雜,又不要求高效率的程序,Python十分合適。
Python的速度沒(méi)法跟C/C++相比,不過(guò)在今天的高速CPU上,合理地使用混合語(yǔ)言編程策略使得Python的上述弱點(diǎn)被有效地彌補(bǔ)。事實(shí)上,Python幾乎被認(rèn)為是主流腳本語(yǔ)言中最慢的一個(gè),因?yàn)樗峁┝藙?dòng)態(tài)多態(tài)性。在大量使用正則表達(dá)式的小型項(xiàng)目,它遜于Perl。對(duì)于微型項(xiàng)目而言, shell和Tcl可能更好,Python顯得太過(guò)強(qiáng)大了。
總結(jié):Python最出色的地方在于,它鼓勵(lì)清晰易讀的代碼,特別適合以漸進(jìn)開(kāi)發(fā)的方式構(gòu)造大項(xiàng)目。其缺陷在于效率不高,太慢,不但跟編譯語(yǔ)言相比慢,就是跟其他腳本語(yǔ)言相比也顯得慢。
9、Perl
Perl是原本為文本處理而開(kāi)發(fā)的通用型編程語(yǔ)言,但是自2010年開(kāi)始,它便廣泛的應(yīng)用于包括系統(tǒng)管理、網(wǎng)站開(kāi)發(fā)、網(wǎng)絡(luò)編程、游戲、生物信息學(xué)和 GUI開(kāi)發(fā)等領(lǐng)域。
10、Javascript
Javascript是一種基于對(duì)象和事件驅(qū)動(dòng)并具有相對(duì)安全性的客戶(hù)端腳本語(yǔ)言,廣泛應(yīng)用于客戶(hù)端web開(kāi)發(fā)的腳本語(yǔ)言,常用來(lái)給HTML網(wǎng)頁(yè)添加動(dòng)態(tài)功能。
此前我在公司實(shí)習(xí)就主要弄這。有興趣的可以百度下Ajax,Javascript,Jquery,Json,node.js
11、Ruby
Ruby是一種動(dòng)態(tài)、反射、通用、面向?qū)ο蟮木幊陶Z(yǔ)言,結(jié)合了來(lái)源于Perl的語(yǔ)法。Ruby在90年代中期起源于日本,最初由松本行弘“Matz”設(shè)計(jì)并開(kāi)發(fā)。
12、 Delphi
此處省略500字。
13、 Lua
百度一下“憤怒的小鳥(niǎo)”用什么語(yǔ)言開(kāi)發(fā)的你就知道了。我的好友劉世洋童鞋研究過(guò),大家可以向他請(qǐng)教。要此人QQ者,可以聯(lián)系我或直接聯(lián)系其本人,不過(guò)此人已心有所屬。
聯(lián)系客服