小話計算機編程語言及其用武之地(拼湊之作,歡迎大家拍磚)
計算機編程語言分類及各自用武之地
最近,見大家都在看C++,卻很少人知道C++能幹嗎,覺得學了沒意思,因為只是看些語法知識自然沒意思,如果做出東西來,看著自己的成果,想必也會提高自己興趣的。
針對學習編程語言的迷茫,從而引出一個問題,各種編程語言都是幹什麼用的?學了基本的語法,程序的流程,面向對象的思想,能幹點啥?
對於ICT行業的的大學生來說,能夠詳細的區別編程語言的用途及使用方法,對以後的選擇性學習以及就業方向來說是非常必要的。就此,本人就幾種常用語言的簡單分析一下。
先說一下計算機語言的分類(大家都知道,一筆帶過):
1、機器語言。
2、彙編語言。
3、高級語言。
前兩天看台灣蔡學鏞先生著的《Java程序員的心聲:爪哇夜未眠》,他把程序語言大致分為五類,還是不錯的:
1、web page script languages
用來做網頁的語言,就是網頁代碼,比如html、javascript、css、asp、php、xml都應該屬於此類,但html算不上編程語言。Javascript和Java沒有半毛錢關係,是兩門單獨的語言,在Web2.0時代,打造富客戶端的絢麗效果,Javascript語言還是很值得學習的,新出的HTML5其實就是Javascript。我比較看好Javascript,應該算是值得學習的一門語言。
2、interpreted languages(解釋型語言)
包括perl、python、rebol、ruby等,也常被稱作script語言,通常被用於和底下的操作系統溝通。照蔡學鏞先生的意思,每個人至少應該學會一套這類的語言。這類語言的缺點是效率差、源代碼外露——所以不適合用來開發軟體產品,一般用於網頁伺服器。google公司用的比較多的是C++、Java和python。有時間我也要學學python或者ruby。
3、hybrid laguages(混合型語言)
代表是java和c#。介於解釋型和編譯型之間。蔡認為c#是.net平台上最重要的語言,值得期待其後續發展;至於java,蔡叫你們看他的《sleepless in java》——我暈!
4、compiling languages(編譯型語言)
c/c++,Delphi都是編譯型語言。C++變得越來越龐大,大多數的C++程序員只用到(也只懂)C++功能的一小部分。C++很複雜,要成為C++高手沒三五年是不行的(就憑這句話,我決定向java投降),儘管如此,但真正要成為高手的都應該懂C/C++,重要的API一般都有C++的版本,可見C++的重要性,怪不得大家說C++是真正程序員的語言。
5、assembly languages(彙編語言)
彙編語言是最接近於硬體的語言,不過用的很少。
程序語言學習順序建議
如果完全沒有程序經驗,可照這個順序:javascript——解釋型語言——混合型語言——編譯型語言——彙編(如果需要的話)。
用業界流行一句話做程序語言分類的結尾「真正的程序員用c++,聰明的程序員用delphi」,那麼,什麼樣的程序員用java呢?
以下是Tiobe公布的最新的2011年9月編程語言排行榜TOP20:
現在來按順序大致看一下各種語言的用武之地(我也好多不懂,有些是自己網上找的,大家將就看一下):
1、Java:
Java是一種可以撰寫跨平台應用軟體的面向對象的程序設計語言。Java最初是由James Gosling在Sun Microsystems(現在是Oracle旗下的子公司)開發的一種編程語言,並作為Sun Microsystems的Java平台的核心組件於1995年發布。 這種語言的大部分語法源自於C和C++,但是它具有簡單的對象模型和更少的底層服務。Java源代碼經過編譯之後生成類文件,這樣可以使它運行在任何一個Java虛擬機上,而無需考慮計算機的架構。Java 平台有三個版本,這使軟體開發人員、服務提供商和設備生產商可以針對特定的市場進行開發:
Java SE(Java Platform,Standard Edition)。Java SE 以前稱為 J2SE。它允許開發和部署在桌面、伺服器、嵌入式環境和實時環境中使用的Java 應用程序。Java SE 包含了支持 Java Web 服務開發的類,並為 Java Platform,Enterprise Edition(Java EE)提供基礎。 Java EE(Java Platform,Enterprise Edition)。這個版本以前稱為 J2EE。企業版本幫助開發和部署可移植、健壯、可伸縮且安全的伺服器端 Java 應用程序。Java EE 是在 Java SE 的基礎上構建的,它提供 Web 服務、組件模型、管理和通信 API,可以用來實現企業級的面向服務體系結構(service-oriented architecture,SOA)和 Web 2.0 應用程序。 一些電子商務網站就是基於此平台。 Java ME(Java Platform,Micro Edition)。這個版本以前稱為 J2ME。Java ME 為在移動設備和嵌入式設備(比如手機、PDA、電視機頂盒和印表機)上運行的應用程序提供一個健壯且靈活的環境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內置的網路協議以及對可以動態下載的連網和離線應用程序的豐富支持。基於 Java ME 規範的應用程序只需編寫一次,就可以用於許多設備,而且可以利用每個設備的本機功能。現在很火的Android開發,你懂的。 一入豪門深似海,偶現在就走上了Java EE這條不歸路。2、C:
C語言,是一種通用的、過程式的編程語言,廣泛用於系統與應用軟體的開發。具有高效、靈活、功能豐富、表達力強和較高的移植性等特點,在程序員中備受青睞。
C語言是由UNIX的研製者丹尼斯·里奇(Dennis Ritchie)和肯·湯普遜(Ken Thompson)於1970年研製出的B語言的基礎上發展和完善起來的。目前,C語言編譯器普遍存在於各種不同的操作系統中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C語言的設計影響了許多後來的編程語言,例如C++、Objective-C、Java、C#等。
前段時間在老闆公司實習,一個項目經理就是用C語言的高手,他以前在UT斯達康開發GSM核心網的。
3、C++
C++最初發佈於1980年代中期,當時面向對象語言被認為是解決軟體複雜性問題的銀彈。C++的面向對象特性看相去使其全面超越了C,支持者認為C++將迅速把上一代語言擠到陳列館裡去。
但是歷史並非如此。究其原因,至少有一部分歸咎於C++本身。為了與C兼容,C++被迫作出了很多重大的設計妥協,結果導致語言過分華麗,過分複雜。為了與C兼容,C++並沒有採用自動內存管理的策略,從而喪失了修正C最嚴重問題的機會。
另外一部分原因,恐怕要算到面向對象身上。看起來OO並沒有很好的達成人們當年的預期。我就這個問題調研過,我發現使用OO方法導致組件之間出現很 厚的粘合層,並且帶來了嚴重的可維護性問題。今天讓我們來看看開放源碼社區,你會發現C++的應用還是集中在GUI,遊戲和多媒體工具包這些方面,在其他 地方很少用到。要知道,面向對象也只是在這些領域被證明非常成功,而開放源碼社區的選擇,很大程度上體現了程序員的自由意志,而不是公司管理層的胡亂指揮。
也許C++實現OO的方法有問題。有證據表明C++程序在整個生命周期的開銷高於相應的C, Fortran和Ada程序。不過,究竟這是否應該歸咎與C++的OO實現上,還不清楚。
最近幾年,C++加入了很多非OO的思想,其異常思想類似Lisp,STL的出現是非常了不起的。
其實C++最根本的問題在於,它基本上只不過是另一種傳統的語言。STL中的內存管理比先前的new/delete和C的方案要好的多,但是還是沒有解決問題。對於很多應用程序而言,其OO特性並不明顯,相比與C,除了增加複雜度之外沒有獲得很多好處。
總結:C++優點在於作為編譯型語言,把效率與泛型和面向對象特性結合起來,其缺點在於過於華麗複雜,傾向於鼓勵程過分複雜的設計。
C++是最流行的編程語言之一,它的應用領域涵蓋了系統軟體、應用軟體、驅動程序、嵌入式軟體、高性能的伺服器與客戶端應用程序和諸如電視遊戲等娛樂軟體。
C++常用於操作系統和驅動級別軟體開發,圖像處理,3D遊戲開發等;C++主要應用於開發性能要求較高的系統級軟體,如操作系統、編譯器以及遊戲軟體,如暗黑系列等等。
前段時間研究的NS,無線網路模擬,裡面一些鏈路層、路由層協議的實現也大都用的是C++,看來還是躲不過啊。
4、C#
C#是微軟推出的一種基於.NET框架的、面向對象的高級編程語言。C#由C語言和C++派生而來,繼承了其強大的性能,同時又以.NET 框架類庫作為基礎,擁有類似Visual Basic的快速開發能力。
C#可以大範圍的適用於高層商業應用和底層系統的開發,即使是通過簡單的C#構造也可以各種組件方便的轉變為基於WEB的應用,並且能夠通過Internet被各種系統或是其他開發語言所開發的應用調用。
C#也可以為C/C++開發人員提供快速的開發手段而不需要犧牲任何C/C++語言的特點/優點。從繼承角度來看,C#在更高層次上重新實現了C/C++,熟悉C/C++開發的人員可以很快的轉變為C#開發人員。
5、 PHP
PHP是基於預處理 HTML 頁面模型的一種腳本語言。它大量地借用C和Perl語言的語法, 並結合PHP自己的特性,使Web開發者能夠快速地寫出動態產生頁面。可以用於管理動態內容、支持資料庫、處理會話跟蹤,甚至構建整個電子商務站點。它支持許多流行的資料庫,包括 MySQL、PostgreSQL、Oracle、Sybase、Informix 和 Microsoft SQL Server。PHP本身就是為處理超文件html設計的,正是由於它是專為基於 Web 的問題而設計的,而且它是開源的導致可擴展性大大增強 ,所以運用非常廣泛。
相信大家很多人都聽說過LAMP。Linux+Apache+Mysql+Perl/PHP/Python,一組常用來搭建動態網站或者伺服器的開源軟體,本身都是各自獨立的程序,但是因為常被放在一起使用,擁有了越來越高的兼容度,共同組成了一個強大的Web應用程序平台。
6、 Objective-C
Objective-C是蘋果MacOSX 上開發的首選語言,主要是因為MacOSX技術源自NextStep OpenStep操作系統, 因為OPENSTEP的軟體架構(framework)都是用Objetive-C寫成,所以Mac OSX上的開發最佳語言自然也就是Objective-C了。
Objective-C是ANSIC的超集,擴展了C語言使它具備面向對象設計的能力,如類,消息和繼承。Objective-C程序中可以利用現有的C語言代碼,使其利用現有的軟體架構。這也是為甚莫Objective-C 過去多年間能夠成為一種流行的用戶界面開發語言而且至今沒有消亡,因為一方面用它可以實現底層系統編程,另一方面可以支持利用動態架構進行開發。
前段時間在公司實習,有一研二的學長就精通此語言,獨自一人負責iphone終端上的應用程序開發,頗得老闆賞識。
7、VB
VB是快速的界面生成語言,是快速的資料庫程序開發語言。vba是vb的應用版,嵌入在MS office中。編寫MS office上的程序很好用。缺點是只能在Windows平台運作。
8、 Python
Python是一種腳本語言,可以與C緊密整合。它可以與動態載入的C庫模塊交換數據,也可以作為內嵌腳本語言而從C中調用。其語法類似C和模塊化語言的雜合,不過有一個獨一無二的特徵,就是以縮進來確定語句塊。
Python語言非常乾淨,設計優雅,具有出色的模塊化特性。它提供了面向對象能力,但不強迫用戶進行面向對象設計。其類型系統提供了強大的表達能力,類似Perl,具有匿名lambda表達式,這點又讓Lisp黑客們感到親切。Python依靠Tk提供方便的GUI界面開發能力。
在所有的解釋型語言里,Python和Java最適合多名程序員以漸進方式協同開發大型項目。在很多方面,Python比Java要簡單,它非常適合與構造快速原型,這一點使得它對於Java有獨特優勢:對於那些既不很複雜,又不要求高效率的程序,Python十分合適。
Python的速度沒法跟C/C++相比,不過在今天的高速CPU上,合理地使用混合語言編程策略使得Python的上述弱點被有效地彌補。事實上,Python幾乎被認為是主流腳本語言中最慢的一個,因為它提供了動態多態性。在大量使用正則表達式的小型項目,它遜於Perl。對於微型項目而言,shell和Tcl可能更好,Python顯得太過強大了。
總結:Python最出色的地方在於,它鼓勵清晰易讀的代碼,特別適合以漸進開發的方式構造大項目。其缺陷在於效率不高,太慢,不但跟編譯語言相比慢,就是跟其他腳本語言相比也顯得慢。
9、Perl
Perl是原本為文本處理而開發的通用型編程語言,但是自2010年開始,它便廣泛的應用於包括系統管理、網站開發、網路編程、遊戲、生物信息學和 GUI開發等領域。
10、Javascript
Javascript是一種基於對象和事件驅動並具有相對安全性的客戶端腳本語言,廣泛應用於客戶端web開發的腳本語言,常用來給HTML網頁添加動態功能。
此前我在公司實習就主要弄這。有興趣的可以百度下Ajax,Javascript,Jquery,Json,node.js
11、Ruby
Ruby是一種動態、反射、通用、面向對象的編程語言,結合了來源於Perl的語法。Ruby在90年代中期起源於日本,最初由松本行弘「Matz」設計並開發。
12、 Delphi
此處省略500字。
13、 Lua
百度一下「憤怒的小鳥」用什麼語言開發的你就知道了。我的好友劉世洋童鞋研究過,大家可以向他請教。要此人QQ者,可以聯繫我或直接聯繫其本人,不過此人已心有所屬。
你的讚賞是我堅持原創的動力
讚賞共 0 人讚賞
推薦閱讀: