好書妙評之《Erlang/OTP併發程式設計實戰》

連城發表於2012-05-19

為了配合《Erlang/OTP併發程式設計實戰》一書的釋出,譯者從亞馬遜上摘錄並翻譯了Erlang and OTP in Action的三篇書評,以饗讀者。三篇之中好評兩篇、差評一篇:倒不是偏心,實在是因為這本書在亞馬遜上只有這麼一篇差評……

身為本書的譯者,同時也作為一名曾被Erlang/OTP官方文件繞得雲裡霧裡的開發者,個人認為本書最大的優點有二:第一是清晰地拆解了OTP中最為繁瑣的內容,如釋出映象、版本控制、部署;第二是在闡述OTP概念的同時給出了大量產品級(而非Hello World級)的程式碼例項。

下文中那篇差評的部分觀點我也很贊同,這本書的確不太適合完全沒有接觸過Erlang/OTP的初學者。我想,這是“實戰”這一定位決定的。雖然全書花費了1/3的篇幅來講解Erlang語言的基礎知識,這一部分卻略顯雞肋。作為完整的語言參考,它還略顯不足——正如作者在第二章開頭處所說:“我們希望這些材料足以助你消化本書後續的內容;不過在將Erlang用到正式專案上之前,你最好還是備上一本更完整的Erlang程式設計指南。”儘管如此,2.15小節仍然非常適合尚未習慣函數語言程式設計的初學者閱讀,這一小節很好地解釋了尾遞迴,以及怎樣用尾遞迴來代替常規命令式語言中的迭代結構(如“for”、“while”等)。

如果你對Erlang的基本語法已經相當熟悉,初步接觸過OTP,卻在官方文件中屢撞南牆,那麼這本書就是為你準備的了。OTP中各種關鍵概念之間的關係、常用行為模式的最佳實踐、釋出和部署環節中各種錯綜複雜的配置,本書悉數給出了細緻入微的闡述。

王婆賣瓜到此為止,下面來看看亞馬遜上的讀者們對本書的評價吧。

好一本菜鳥高手兩相宜的Erlang/OTP開發大作!

  • 作者:Mr. Bookish, Mild and Meek
  • 評分:★★★★★
  • 反饋:14人中有13人認為這篇書評有用

這本書我剛看完一半,後半部分還只是草草瀏覽了一遍,但我已經愛上這本書了。

Erlang跟C#、Java等物件導向/命令式語言大相徑庭,當初在看Joe Armstrong的Programming Erlang: Software for a Concurrent World的時候我就覺得學習曲線應該會比較陡。那本書總體上還不錯,但有些地方我還是沒太看明白,即便是最初幾章也同樣存在這種情況。於是我又找來了O'Reilly的Erlang Programming。這本稍微好點兒,但還是碰到了一些問題。80年代末90年代初的時候我曾經讀過電腦科學的研究生,對合一(Unification,數理邏輯和電腦科學中的一個概念——譯者注)、演繹型資料庫(Deductive Database)、函數語言程式設計、Lambda演算、Gul Agha的Actor併發程式設計以及分散式資料庫等領域都有一定程度的瞭解。即便如此,我還是碰上了這麼多困難。尤其是這兩本書中和OTP相關的內容,實在是把我給弄暈了。直到後來,我開始從頭拜讀Logan等人的這本書。幾位作者的那種以務實的口吻和實際的示例洗練地闡述問題的能力,著實令我歎服。這下好了,短短几天,Erlang和OTP就都沒問題了。第2章簡明扼要地介紹了Erlang程式設計。講解OTP及相關工具的章節更是沒的說。相對於僅對Erlang抱有“學術興趣”的讀者,本書更適合於那些打算將Erlang應用到實際產品程式碼中去的開發者。

就本書再多說兩句:Erlang/OTP相關的工具很多,比如Mnesia、附帶EXMPP庫的XMPP伺服器Ejabberd、web伺服器Mochiweb和YAWS(即所謂的LYME平臺)等等;在把玩了Erlang/OTP及這些工具之後,我認為它們共同構成了一套非常棒的應用系統開發平臺(依我之愚見,我敢說是最棒的),基於這一平臺,開發者可以乾淨利落地開發出健壯的世界級應用系統。很多人對這一平臺的效能、可伸縮性、併發支援、分散式支援、容錯性以及整合之便利大加讚賞;但就個人而言,我最在乎的還是它鶴立雞群的開發效率。畢竟只要賠上足夠的複雜度和精力,在Java EE、LAMP以及.NET等其它平臺上一樣能夠換取那些架構層面的特性。一個開發平臺,只需不到400頁便能把大部分問題講得一清二楚,本書作者固然功不可沒,但平臺自身的簡練與表達能力才是更為關鍵的因素。不信你針對.NET或者Java EE寫本同類的書試試!!

那麼,你可能就要問了,面對那麼多高成本、高難度、高出錯率的開發專案,開源LYME套件的優勢又那麼明顯,為何歷經二十多年都未能席捲全球呢?尤其是那些受資源和市場時機制約的獨立開發者以及小型開發團隊和軟體企業,他們為何不採用LYME呢?很快你便會意識到,Erlang的函式式特徵、異乎尋常的程式設計思想以及相對短缺的文獻,造成了一道陡峭的入門門檻。我想這本言簡意賅的書將可以幫助更多普通程式設計師邁過這道門檻,並最終讓軟體開發社群中的一大部分人享受到LYME的高效和便利。聽上去我好像是被Erlang給洗了腦了似的?各位不妨親自看看這本書,試試Ejabberd、CouchDB等NoSQL資料庫,還有YAWS等等;再拿它們跟你所熟知的同類產品做個比較,眼見為實。

最後,如果你和我一樣正進入Erlang/OTP領域,那麼不妨再看看Mitchell Hashimoto的Erlang部落格,上面有一系列和OTP相關的文章。Logan等人的書中有些地方並未著重說明,而是讓讀者參考Erlang的線上文件,Mitchell的這些文章是這部分內容的一個很好的補充。

涉獵廣泛無出其右

  • 作者:Richard J. Wagner
  • 評分:★★★★☆
  • 反饋:15人中有14人認為這篇書評有用

一部著眼於產品級程式碼開發的Erlang大作。

全書分為三大部分:

  1. Erlang及OTP基礎
  2. 構建產品級Erlang應用
  3. 整合和調優

第一部分介紹了Erlang和OTP框架相關的基礎知識。內容編排得當,非常適合初學者閱讀。書中每隔幾頁便會穿插一副簡圖,用以詮釋重要概念。OTP相關的內容尤為詳細,中高階使用者也會有所斬獲。這一部分本身就是一份不錯的Erlang指南,但又遠遠超出了指南的範疇。

第二部分以一個完整的應用構建場景為基礎展開。書中描述了一個飽受效能問題拖累的web應用,正打算用Erlang搭建一套快取以解燃眉之急。網路通訊正是Erlang的強項,本書將帶著讀者一起自力更生、從頭搭建一切必要的元件。眾所周知,從掌握語法到掌握應用開發的最佳實踐還有很長一段路要走,而這正是這一部分的價值所在。(本書既闡述了最佳實踐也涵蓋了語言的基礎知識。)這一部分的幾個章節慣用的手法都是先描述若干亟待實現的功能,再闡述如何用Erlang實現這些功能,最後一步步地給出完整實現。讀起來就像是一組逐步深入的教程。

第三部分講的是如何在Erlang應用中整合外部元件。示例中訊息層面的整合藉由JSON完成,更深層次的整合則在介紹Erlang語言層面的整合機制時進行了闡述。值得一提的是:Erlang-Java介面JInterface獨佔了一個章節(相較之下,其餘Erlang書籍在這一方面的介紹都較為有限)。

這本厚達400多頁的大部頭編排精良、內容翔實、講解清晰,非常值得一讀。在此我向各級Erlang開發人員推薦這本書。

另類看法

  • 作者:NewLibertarian
  • 評分:★☆☆☆☆
  • 反饋:8人中有6人認為這篇書評有用

最近,我花了幾周的業餘時間來學習Erlang(著實令人印象深刻)。我算是個資深程式設計師(從業20多年了),並且有5年的專業LISP經驗。我曾經讀過並強烈推薦了由Thompson和Cesarini合著的Erlang Programming。對於Erlang初學者來說,那是本極好的入門書籍。然而,書中卻沒有深入講解OTP。由於急於瞭解這一重要主題,我買來了Erlang and OTP in Action。首先,如果你從來沒有寫過Erlang程式,那麼它不適合作為你的第一本入門書籍。書中對Erlang的基礎知識只做了概要介紹。讀完跟OTP相關的第一個章節之後(費了牛勁兒了!),在那些金光燦燦的書評的反襯之下,我感到非常的惱火和失望。(我猜這些書評都是已經對OTP有所瞭解的人寫的吧?)問題出在哪兒呢?我原以為作者會以言簡意賅的方式闡述和OTP相關的概念並配上一兩個簡潔的示例,結果呢,作者卻搬出了一堆冗長晦澀的TCP伺服器之類的東西,把讀者徹底給弄暈了。對於不熟悉OTP的人來說,這種又臭又長的示例只會讓人抓不住重點。我當時就想——哇哦,看上去很難纏啊。為了嘗試換個角度,我轉而求助於erlang.org線上文件中的相關章節。我早該這麼幹的!!線上文件沒幾頁就把問題講清楚了,給出的一系列示例也同樣簡單明瞭。

也許對那些相對熟悉OTP的人來說這會是本好書。過段時間我應該還會再看看這本書,如果情況真是那樣,我會再給高分的。

更多來自國外亞馬遜網站讀者的評價。

相關文章