上一篇文章提到了,今天又讀到Lisp的一些內容html
《爲何Lisp如此先進》ruanyifeng(Link)。關於Lisp的八卦,能夠參考我前面兩篇文章正則表達式
http://www.cnblogs.com/charlesblc/p/6110484.html 以及算法
http://www.cnblogs.com/charlesblc/p/6123411.htmlshell
先看一個 "格林斯潘第十定律"(Greenspun's Tenth Rule):編程
"任何C或Fortran程序複雜到必定程度以後,都會包含一個臨時開發的、只有一半功能的、不徹底符合規格的、處處都是bug的、運行速度很慢的Common Lisp實現。"小程序
編程語言如今的發展,不過剛剛遇上1958年Lisp語言的水平。瀏覽器
Lisp的做者 約翰.麥肯錫(John McCarthy) 圖靈獎得到者,是把圖靈老師 阿隆佐·邱奇的λ演算,發展成了一門編程語言。並且開始的時候,只打算把Lisp做爲一種規則,而不是語言。網絡
爲何上個世紀50年代的編程語言,到如今尚未過期?簡單說,由於這種語言本質上不是一種技術,而是數學。數學是不會過期的。你不該該把Lisp語言與50年代的硬件聯繫在一塊兒,而是應該把它與快速排序(Quicksort)算法進行類比。這種算法是1960年提出的,至今仍然是最快的通用排序方法。app
選擇哪種編程語言,許多項目是無所謂的,反正不一樣的語言都能完成工做。通常來講,條件越苛刻的項目,強大的編程語言就越能發揮做用。可是,無數的項目根本沒有苛刻條件的限制。大多數的編程任務,可能只要寫一些很小的程序,而後用膠水語言把這些小程序連起來就好了。你能夠用本身熟悉的編程語言,或者用對於特定項目來講有着最強大函數庫的語言,來寫這些小程序。框架
其餘內容,包括用一個返回功能函數的例子來對比各類語言編程能力的內容,就不詳細摘錄了,能夠參考原文:
http://www.ruanyifeng.com/blog/2010/10/why_lisp_is_superior.html
正好,還有一篇文章提到了
http://www.ruanyifeng.com/blog/2010/03/programming_language_evaluations_revised.html
1、C
C語言的優勢是,運行效率高和接近機器語言。它特別適用於如下幾種程序:
1. 對運行速度要求很高的程序。
2. 與操做系統內核關係密切的程序。
除此以外,學習C語言有一個最大的理由,那就是它能幫助咱們學會,在硬件層次上考慮問題。若是你想以編程做爲本身的人生事業,C是必定要學習的。
C的最大缺點是,在編程過程當中,你不得不花不少時間,考慮與你要解決的問題徹底無關、且很是複雜的硬件資源管理問題。
2、C++
C++在80年代中期推出,支持OO(面向對象編程),原意是做爲C語言的取代者。
可是它沒能作到作一點,緣由有如下幾個:
1. 它也沒有解決"內存管理"問題,雖然比C有所改善。
2. 標準化不成功。各個編譯器都只支持本身選擇的一個子集,致使跨平臺性不如C。
3. 過度的精細和複雜了。C++的複雜度,超過了C和OO的複雜度之和。
4. OO並無帶來多少優點,反而帶來了一些反作用,好比厚重的膠合層和龐大的代碼體積。
總的來講,C++的優點仍是程序效率,以及面向對象編程能力,糟糕之處是它鼓勵複雜的設計。
注:另外,我以爲,功能庫不完善,分散,不易管理。開發速度慢。
Shell, Perl 忽略。
5、Python
Python發佈於1991年,是一種與C語言緊密集成的腳本語言。
Python的優勢是很是乾淨優雅,鼓勵清晰易讀的代碼,易學易用;提供了面向對象編程的可能,但並不把這個選擇強加於設計者;具備出色的模塊化特性,同Java同樣,適合用來作須要協同開發的大型複雜項目。(這一句值得懷疑)由於Python解釋語言的特性,使得版本管理變得很tricky。
在不少方面,它都比Java簡單。此外,Python標準中包括了對許多網絡協議的支持,所以也很適合網絡管理任務。
Python的缺點主要是效率低下,速度緩慢。在執行速度上,它不只沒法與C/C++競爭,並且也不如其餘主要的腳本語言。可是,這其實並非一個嚴重的問題,有時網絡或磁盤的延遲,會徹底抵消Python自己消耗的時間。並且由於Python特別容易和C結合起來,所以性能關鍵的 Python模塊,能夠很方便地轉化成C語言來提升速度。
總的來講,對於小型項目和大量依靠正則表達式的項目,Python不如Perl的表達能力強。至於更小的項目,Python則是大材小用,shell也許更適合。
6、Java
Java發佈於1995年,設計目標有兩個。
一個是"write once, run anywhere"(一次編寫,處處運行),即不依賴於特定的平臺;另外一個是在網頁中嵌入交互程序(applet),能夠在任何一個瀏覽器中運行。因爲它的全部者Sun公司的一系列失誤,第一個目標並無徹底實現,第二個目標則是完全失敗。可是Java依然在系統編程和應用編程方面很是強大,足以挑戰C和 C++。
Java的優勢是比C++小巧簡單,能夠自動管理內存,支持相似C的語法和OO編程,與C程序的結合也很好。
Java的缺點是某些部分過於複雜,好比內部類和匿名類的運用會產生很混亂費解的代碼;某些部分功能不完善,也沒法利用操做系統提供的功能接口,好比在Java中讀取和處理文本文件,並不像其餘語言那樣容易。此外,Java配置環境和版本的混亂,也讓人很頭疼。
總的來講,除了系統編程和某些對運行速度要求很高的編程以外,Java都是比C++更好的選擇。若是和Python相比,Java可能在大型項目上有優點,可是也不是絕對的。
注:如今Java是絕對的語言中的王者。從TIOBE編程語言排名,能夠看出,Java好久以來,穩居第一。
另外,TIOBE, 是「The Importance Of Being Ernest」的縮寫,頗有意思,它是奧斯卡·王爾德的一部劇做,雖然我不清楚這跟程序設計語言有什麼關係。它可以經過各類搜索引擎以及谷歌博客、維基百科甚至YouTube進行語言跟蹤。
有篇文章,說Java強大在4個地方(Link)。其中我只承認1,而二、3和4我認爲是個語言就有:
1. James Gosling 是 Java之父。他將Java描述爲「藍領」的程序設計語言。它能使開發者花最小的代價完成工做,同時還能使得開發者在一段時間以後,還能繼續完成別人的(甚至本身的)代碼而且明白其中的意思。
因此,好維護。
2. 向下兼容 3. 可擴展性
Hadoop,Cassandra和Spark,大數據工程的基礎框架,無不使用Java或者Scala而且在JVM虛擬機上運行的。若是你想要良好的拓展性和性能,Java和JVM是最好的選擇。
4. 2014年10月份開始,Java的受歡迎程度有了顯著的提高,這恰好是在JDK8發行以後。JDK8對Java開發者來來講有了顯著的變化,它引入了Lambda表達式和Stream API。忽然間Java開發者可以在不用學習一整套新語言(如Scala)的狀況下以一個更加有效的方式進行開發。
個人理解:
Java是趁了大數據和互聯網的春風。
首先大數據的Hadoop, Spark無不和Java密切相關,這讓傳統的系統級語言C/C++倍受打擊。而Java開發雖不如Python、PHP語言那麼快,可是勝在系統性強、強類型語言、易調試。易擴展,JVM上可運行Scala等多種語言。並且足夠藍領,門檻低。並且性能不差,JVM一直在優化。
而後是互聯網春風,國內阿里等公司對Java的推廣,也起了很大做用。
本人既用PHP,又用Java,不得不說,PHP太草根了,Java寫出來的代碼,要規範化的多。
附一份最新的 2016年11月份的 TIOBE編程語言排行榜:
(完)