為什麼《七週七語言》選中的是這幾種語言?

turingbooks發表於2012-04-09

從眾多語言中,挑出本書包含的幾門語言,這一過程也許不像你想得那麼複雜。我們只不過發了些調查問卷,向本書的潛在讀者請教了一番。調查資料彙總上來時,有八門語言入選希望最大。不過,我先是把JavaScript“踢”了出去,因為它實在是過於熱門了,取而代之的是原型語言中熱門程度僅次於JavaScript的Io。隨後,我又把Python“踢”了出去,因為我只想給面嚮物件語言一個名額,而Ruby的票數多於Python。同時,這也給一個出人意料的候選者讓出了位置——名單上位列前十的Prolog。下面,我給出成功入圍本書的最終名單和挑選它們的理由

  • Ruby。這門物件導向語言高票當選,因為它不僅好用,而且好讀。我曾經考慮過不介紹任何一門物件導向語言,但我又想在其他程式設計範型與物件導向程式設計之間作一些比較,因此,至少介紹一門物件導向語言還是有必要的。相比於大多數程式設計師的日常用法,我想把它挖掘得更深入一些,以揭示設計者的良苦用心。我最終決定重點介紹Ruby超程式設計(metaprogramming),因為它可以擴充套件Ruby的語法。對於Ruby榜上有名的結果,我還是相當認可的。
  • Io。和Prolog一樣,Io也是本書頗具爭議的語言。它雖與商業成功無緣,但其兼具簡單性和語法一致性的併發結構,卻是十分重要的思想。它的最簡語法(minimal syntax)功能強大,與Lisp的相似性也頗能給人留下幾分印象。Io不僅和JavaScript一樣同為原型語言,還有著獨一無二、韻味無窮的訊息分發機制,因此在眾多程式語言之中,它也佔有小小的一席之地。
  • Prolog。沒錯,我知道Prolog年事已高,但它仍然力大無窮。它能輕鬆解出數獨問題,這不禁讓我大開眼界。而且用Java或C語言時,有些難題我殫精竭慮方能解決,用它卻能幹淨利落地搞定。承蒙Erlang的發明者Joe Armstrong出手相助,我得以深刻體會到Prolog之妙。同時,也正是深受Prolog影響,Erlang才得以問世。如果你此前從未用過Prolog,我保證,它定會帶給你驚喜。
  • Scala。作為執行於Java虛擬機器上的新一代語言,Scala為Java系統引入了強大的函式式思想,而且也並未丟棄物件導向程式設計。回顧歷史,我發現C++和它有著驚人的相似之處,因為從程式式程式設計過渡到物件導向程式設計期間,C++同樣起到了舉足輕重的作用。當你真正融入Scala社群之後,你就會明白,為什麼對於函式式語言程式設計師來說,Scala是異端邪說,而對於Java開發者來說,Scala是天降福音。
  • Erlang。作為名單上歷史最悠久的語言之一,Erlang不僅是一門函式式語言,而且在併發、分散式程式設計、容錯等諸多方面都有著優異表現,真是想不火都難。CouchDB(新興的基於雲的資料庫)的創始人就選擇了Erlang,並且義無反顧地一直用它,只要花上點時間瞭解這門分散式語言,你就會明白原因所在。在Erlang幫助下,設計帶有併發、分散式、容錯等特徵的應用程式將變得無比簡單。
  • Clojure。這又是一門Java虛擬機器語言,但正是這門Lisp方言,徹底顛覆了我們在Java虛擬機器上併發程式設計的思考方式。它是本書唯一在版本資料庫中使用同一種策略管理併發的語言。作為Lisp方言,Clojure或許擁有本書所有語言中最靈活的程式設計模型,因此絕不缺乏號召力。與其他Lisp方言不同的是,它不會帶那麼多括號 ,還有眾多Java庫和在各平臺上的廣泛部署作為堅強後盾。
  • Haskell。它是本書唯一的純函式式語言,這也意味著,它根本不存在可變狀態:只要使用相同的輸入引數呼叫相同的函式,就會返回相同的輸出。在所有強型別語言中,Haskell擁有最令人稱羨的型別模型。和Prolog一樣,它也需要你花一些時間理解,但你得到的回報絕對物超所值。

如果名單上沒有你鍾愛的語言,我深感抱歉。老實說,還真有語言狂熱分子給我發過好幾封恐嚇信。在本節開始提到的民意調查中,我們總共列出了幾十門語言。我挑的這幾門語言未必是其中最出色的,但它們特點突出、個性鮮明,都具有重要的學習價值。



相關文章