本文涉及到的編程語言: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、D
涉及到的工具:sed、awk、grep
我們現在學一門語言,大部分是要用到了才學(基本上是中國的公司用什麼我們學什麼),基於興趣的不多。
比如,大頭肯定是C++和java,因爲這個最容易混飯喫。最近多玩用了Erlang,還有不少公司跟風上了Erlang,讓這個沉默了好久的語言忽然被明星了。
大公司一般除了C++外,都會招Java,事實上,互聯網公司,Java佔了半壁江山(當然,沒選java架構的除外,有不少.net族的)。所以,生活在貧困線上的廣大中國程序猿很少有人會去看看諸如scala之類的玩意。不過作爲膠水,python、perl還是有一定的用戶量的。
似乎,我們生活中只有這麼幾種語言。。。
貌似,遇到一個問題,我們該選擇什麼語言呢?雖然每個語言本質上都是圖靈完備的,但是能用prolog寫出來的東西,如果用別的語言寫,會無比痛苦。這就是不同語言存在的原因:不同的問題,不同思考方式(編程範式)。
- 解決問題case:已知大量事實,和事實之間的約束,要求挖掘關係。
例如,漢諾塔、地圖着色、數獨問題、八皇后問題等這種考驗智商,並且需要從已知規則中發現模式的問題。擁有一大堆已知案例的應用(例如大部分的人工智能情況)
- 應用程序case:從小到超大型應用程序,非完全互聯網應用
這也是大部分軟件公司遇到的情況。一般有幾種沒辦法分出高下的解決方案:C++,Java,C#,VB。當然,這裏面可以有CLR和JVM的不同衍生。例如,理論上,你也可以用scala來代替(不過估計大型公司不會冒這個險)。還是在理論上,你也可以用函數式編程的Clojure和Haskell來做(估計沒人會那麼傻)。還是在理論上,也可以用Ada這種強悍的通用語言,但估計沒人願意接收比C++還複雜的編程語言。理論上(基本只能在理論上),不嫌棄的話smalltalk也行。還是在理論上,python、ruby等配合一定的圖形界面庫也可以勝任(但項目大到一定的程度是,你會欲哭無淚)。
但是,我另起一行。有個語言:D語言。我個人不認爲不可以列入首選名單。但是貌似知名度不行啊。。。。企業支持少啊。。。。。確實是門優秀的語言。C++太尾大不掉,需要一種語言,讓C++成爲純粹的C++。
稍小一點規模的,無法接受面向對象的程序員,有不少用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:自動化測試
- 特殊應用case:系統底層
這個肯定是C了。操作系統,驅動,底層軟件,大部分都是C寫的,調用API,如果不用微軟的Activex之類的技術,還是得老老實實用C API的。
- 特殊應用case:系統管理
- 特殊情況case:蘋果平臺
- 特殊領域:嵌入式
- 特殊應用:網頁
- 特殊應用:數據庫
- 特殊應用:並行,分佈式
- 特殊應用:特定語言的功能增強
- 特殊應用:人工智能