不走尋常路——《七週七語言》

出版圈郭志敏發表於2012-04-09

假如我想新學一門程式語言或一種程式設計框架,一般會找一篇速成互動教程看看。因為這類教程中,先做什麼、後做什麼都已精心設計好。通過它們,我們可以更容易體會語言的妙處所在。當然,扔掉教程,直接動手實踐也未嘗不可,但說白了,我就是想盡快發現語言的動人心絃之處,儘快對它的語法糖 和核心概念有個大體印象。

然而多數情況下,我找不到稱心如意的教程。受到篇幅限制,那些教程往往只介紹各門語言間相去無幾的皮毛。而這些皮毛,我又早已熟知。若想領會一門語言的精髓,它可就無能為力了。我想要的是那種痛快淋漓、深入探索語言本質的感覺。

本書就將給你這種感覺。不是一次,而是七次。你將從書中找到以下問題的答案。

  • 語言的型別模型是什麼?強型別(Java)或弱型別(C語言),靜態型別(Java)或動態型別(Ruby)。本書側重於介紹強型別語言,但各種靜態型別和動態型別語言也都有所涉及。你將看到,語言在型別模型間的權衡會對開發者產生何種影響。語言的型別模型會改變你對問題的處理方式,還會控制語言的執行方式。就型別模型而言,書中的每門語言都堪稱獨樹一幟。
  • 語言的程式設計範型是什麼?是物件導向(object-oriented,OO)、函式式、過程式,還是它們的綜合體?本書介紹的語言涵蓋了4種程式設計範型,有些語言還由幾種範型組合而成。你將看到一門基於邏輯的程式語言(Prolog)、兩門完全支援物件導向思想的語言(Ruby和Scala)、四門帶有函式式特性的語言(Scala、Erlang、Clojure和Haskell)及一門原型語言(Io)。這裡有Scala這樣的多範型(multiparadigm)語言,也有Clojure這種多方法(multimethod)語言,後者甚至允許你實現自定義範型。本書最重要的任務之一,就是學習新的程式設計範型。
  • 怎樣和語言互動?語言可編譯也可解釋,可以有虛擬機器也可以沒有。在本書中,如果某門語言帶互動命令列,將先通過互動命令列探索這門語言,當我們處理規模較大的專案時,還會轉而採用檔案程式設計。我們接觸的專案不會特別大,因此無需深入研究打包(packaging)模型。
  • 語言的判斷結構(decision construct)和核心資料結構是什麼?或許你會驚訝,在作判斷時,居然如此多的語言都用到了與if和while的各種變型都不相同的結構。你會見識到Erlang的模式匹配,還有Prolog的合一(unification) 。至於資料結構,集合(collection)在任何語言中都扮演著至關重要的角色。對Smalltalk和Lisp這類語言,集合刻畫了語言特徵,而在C++和Java等語言中,集合更可謂無所不在,它們決定著使用者體驗,若沒了它們,語言勢必成為一盤散沙。因此,無論用哪一類語言,都必須全面、透徹地理解集合。
  • 哪些核心特性讓這門語言與眾不同?有些語言支援併發程式設計的高階特性,有些語言提供獨一無二的高階結構,比如Clojure的巨集(marco)和Io的訊息解釋(message interpretation);有些語言包含效能強勁的虛擬機器,如Erlang的BEAM,它能讓 Erlang構建的容錯分散式系統遠遠快於其他語言;有些語言提供專門針對特定問題的程式設計模型,比如利用邏輯規則解決約束問題。 就算把這些問題全弄個一清二楚,你也不會成為哪怕一門語言的專家。但你會明白,這幾門語言各自擁有哪些獨門絕技。下面,我們先看看本書介紹了哪幾門語言。 摘自:《七週七語言》

相關文章