30種編程語言的比較選擇問題

http://blog.csdn.net/ljy1988123/article/details/7782700本文涉及到的編程語言:C、C++、Java、C#、Prolog、VB、Scala、Clojure、Haskell、Ada、Python、Ruby、Pascal(Delphi)、Fortran、Lisp、matlab、Perl、Erlang、Boo、Tcl、Bash、C shell、Objective-C、PHP、PL-SQL、Transact-SQL、ASP、JSP、Lua、smalltalk、R、Djavascript

涉及到的工具:sed、awk、grepphp

咱們如今學一門語言,大部分是要用到了才學(基本上是中國的公司用什麼咱們學什麼),基於興趣的很少。前端

好比,大頭確定是C++和java,由於這個最容易混飯吃。最近多玩用了Erlang,還有很多公司跟風上了Erlang,讓這個沉默了很久的語言突然被明星了。java

大公司通常除了C++外,都會招Java,事實上,互聯網公司,Java佔了半壁江山(固然,沒選java架構的除外,有很多.net族的)。因此,生活在貧困線上的廣大中國程序猿不多有人會去看看諸如scala之類的玩意。不過做爲膠水,python、perl仍是有必定的用戶量的。python

彷佛,咱們生活中只有這麼幾種語言。。。linux

貌似,遇到一個問題,咱們該選擇什麼語言呢?雖然每一個語言本質上都是圖靈完備的,可是能用prolog寫出來的東西,若是用別的語言寫,會無比痛苦。這就是不一樣語言存在的緣由:不一樣的問題,不一樣思考方式(編程範式)。程序員

 

 

  • 解決問題case:已知大量事實,和事實之間的約束,要求挖掘關係。
果斷用 prolog族語言。

 

例如,漢諾塔、地圖着色、數獨問題、八皇后問題等這種考驗智商,而且須要從已知規則中發現模式的問題。擁有一大堆已知案例的應用(例如大部分的人工智能狀況)正則表達式

 

 

  • 應用程序case:從小到超大型應用程序,非徹底互聯網應用

 

這也是大部分軟件公司遇到的狀況。通常有幾種沒辦法分出高下的解決方案:C++,Java,C#,VB。固然,這裏面能夠有CLR和JVM的不一樣衍生。例如,理論上,你也能夠用scala來代替(不過估計大型公司不會冒這個險)。仍是在理論上,你也能夠用函數式編程的ClojureHaskell來作(估計沒人會那麼傻)。仍是在理論上,也能夠用Ada這種強悍的通用語言,但估計沒人願意接收比C++還複雜的編程語言。理論上(基本只能在理論上),不嫌棄的話smalltalk也行。仍是在理論上,python、ruby等配合必定的圖形界面庫也能夠勝任(但項目大到必定的程度是,你會欲哭無淚)。sql

可是,我另起一行。有個語言:D語言。我我的不認爲不能夠列入首選名單。可是貌似知名度不行啊。。。。企業支持少啊。。。。。確實是門優秀的語言。C++太尾大不掉,須要一種語言,讓C++成爲純粹的C++。shell

 

稍小一點規模的,沒法接受面向對象的程序員,有很多用C的。雖然OOP程序員看他們像是不開化的人,可是他們有他們的哲學(我從嵌入式開發過來,至關長時間內也擺脫不了C,總本能的排斥OOP)

 

  • 解決問題case:程序規模不是很大的偏數學問題

 

曾經不少人用Pascal(包括擴展的Delphi),曾經不少人用Fortran,可是都明顯在退步。大型通用語言(C++、Java、C#)代表了他們在各類環境的適應能力。lisp系列也在一些問題上展示出古老的魅力。(但這個語言遠沒有《黑客與畫家》的做者給咱們描述的那樣神奇,我的認爲。不過個人C++風格思想佔了主導,可能沒辦法公正的評價lisp,可是據個人使用lisp經驗,在大部分狀況下,我最後仍是放棄了它。由於大部分狀況下我總能找到用C++(或其餘OOP語言)更好的緣由)

 

另外,讀研的通常都用過matlab。這個工具,兩個字:強大!不過僅指科學計算方面。脫離了這個方面,就得考慮合不合適了,畢竟固定的矩陣思惟不是啥狀況都有效的。我用matlab最多的是神經網絡,圖片和信號處理。絕不誇張的說,matlab活脫脫一個photoshop啊。。。(固然,你得會用。。。)不過matlab的神經網絡確實不行,作的太差了,小規模的網絡能夠,3層不用BP的F網,幾十個就掛掉了。有這個需求的用ANN吧。(仍是C++,偷笑)

 

  • 特殊應用case:須要大量處理字符串的應用

 

首選利器是Perl,不過若是你習慣了sed、awk、grep,也能很方便的完成相同的功能,但perl是吸取三家所長作的。

其次是C++,別拍我。諸位用過regex嗎?就是boost裏的那個,最近被併入C++11啦。有了正則表達式的C++,處理字符,無敵了不少哇。固然,Java程序員別拍我,我知道這種庫一個大型的通用語言都會有。我提C++,通常順帶着不否認Java和C#能以類似的代價完成相同的功能。

 

 

  • 特殊應用case:須要一個膠水,粘結不一樣語言寫出來的程序

 

首選是python。倆字:精簡(呀,這麼說一個強大的語言有點過輕浮了,但比起ruby,確實簡單吶。。。)(另外Boo在.net是能夠用來取代python)

其次是ruby。倆字:複雜

畢竟,沒有rails,ruby根本火不起來。事實證實,python的哲學很對。固然兩種語言有不少細節的不一樣,甚至在編程範式上不一樣(真想不明白白ruby支持多種範式怎麼多是個優勢?市場證實了python的純粹)

 

  • 特殊應用case:自動化測試
不用問了,確定是 tcl了。
因爲這個特殊應用,因此我的用戶基本用不到,大部分是嵌入式公司。華爲、數通、邁普等。。。

 

 

 

  • 特殊應用case:系統底層

 

這個確定是C了。操做系統,驅動,底層軟件,大部分都是C寫的,調用API,若是不用微軟的Activex之類的技術,仍是得老老實實用C API的。

 

 

  • 特殊應用case:系統管理
這個系統管理,通常指linux的。首選確定是各類 shell啦: Bash、C shell
 
 
  • 特殊狀況case:蘋果平臺
咱們沒得選。。。。 objective-C
 
  • 特殊領域:嵌入式
 大部分都是C了。不過andriod平臺和蘋果平臺就得聽話了。 gmszone 網友建議把Ada也放在這裏,我不否認Ada在嵌入式領域的廣闊將來和實實在在的實力。但C主導了嵌入式這麼久,程序員基本沒辦法接受別的思惟了。好比ARM,三年前我用的Xscale,我實在不肯意想象放棄C。嵌入式的玩意對錯有時候根本沒辦法說,因此很重要的是經驗,前人的積累,因此就像壟斷同樣,不是革命性的優秀根本沒法動搖根基的。我用過spartan的FPGA,我記得當時選的core也所有是用C作編程接口。因此,很抱歉這裏我沒法接收該網友的意見。
 
 
  • 特殊應用:網頁
 
嵌入網頁內的,最火的確定是 PHP(後端)和 javascript(前端)了。前者代替了古老的cgi。
可是,java系的 jsp內嵌java,asp內嵌C#,都是php的強勁對手。
通用語言在各個方面咄咄逼人。
 
  • 特殊應用:數據庫
就是比哪一個SQL版本更被人接收。標準sql天然沒必要說,根據排名, PL(SQL)/Transact-SQL上榜。
 
  • 特殊應用:並行,分佈式
並行愈來愈重要了。
首選 Erlang
可是,基於已有的條件,仍是考慮選用通用語言的並行優化。 C++、Java、C#等都在這方面作了不少優秀的工做。
 
 
  • 特殊應用:特定語言的功能加強
 
不用問了,我想說的是 Lua。用C++寫實現,用Lua寫邏輯是好多遊戲的經典開發策略。(固然像Unity用的javascript,Unreal用的本身的。)
在通用大型語言的基礎上學會用Lua加速,是一種頗有趣的實踐。
 
 
  • 特殊應用:人工智能
 
人工智能上, prologlisp是寵兒。
R語言有時也被用於數據挖掘(可是太慢了)
相關文章
相關標籤/搜索