隨著Ruby和Rails的不斷升溫,可以預見很快就會有更多闡述某一細部的技術書籍出現,各種經驗與模式也會結集出版。也許不久之后,就再也沒人能像作者這樣給出一份“Ruby完全讀書指南”了。所
以,能讀到這樣一篇文章,就當做是Ruby與你的緣分吧。
看到這樣一個題目,大概很多讀者會記起這樣一張圖片:左邊堆著高高一摞關于Java的技術書籍,右邊則是區區兩本關于Ruby的。炮制
這張圖片的用意顯而易見,不過隨著Ruby和Rails的急速竄紅,Ruby圖書也開始如同雨后春筍般紛紛問世——這也意味著學習者們需要花越來越多的時
間和精力來挑選適合自己的書了。 也許Ruby(以及Rails)正在像Java(以及J2EE)一樣,不可逆轉地變得越來越龐大,因此也需要越來越多的圖書來闡
釋。不過至少現在,我們還可以把所有關于Ruby的圖書列舉一遍——對于Java,這已經是一個不可能的任務。說句題外話,之所以我迫不及待地急著寫這篇
書評,正是因為我相信它在不久之后也會成為一個不可能的任務。
Programming Ruby(2nd Edition)
??? 這似乎已經不是怪事:關于一種編程語言的經典教材,作者不是這門語言的創造者。就像Stan
Lippman之于C++、Joshua Bloch之于Java、Martin Fowler之于UML一樣,Dave
Thomas也許是這個世界上最善于向別人講解Ruby語言的人——至少超過Matsumoto是毫無問題的。也許正是因為自己也經歷了“不懂到懂”的學習過程,有時候“旁觀者”反倒比“創造者”更清楚學習者們需要什么。
所以這本書就是Ruby的經典教材。關于Ruby的基本語法和常用工具,書中第一部分和第二部分做了詳細的介紹。第三部分“Ruby
Crystallized”更加闡述了Ruby語言的一些細節和設計理念,其中第23章“Duck
Typing”是剛從Java或者.NET平臺走出來的讀者不可錯過的,因為對于類型與契約的理解、對于類與類型的理解,正是Ruby這種動態語言與Java/C#等靜態語言最大的區別之一。隨后的第四部分提供了Ruby基礎類庫的速查手冊。
Dave Thomas和Andy Hunt這兩個“Pragmatic
Programmer”并非浪得虛名:這本Programming
Ruby雖然不是一本稱職的參考手冊,卻足夠幫助一個初學者步入Ruby世界而不致誤入歧途,并且能夠在很少見的一些情況下——譬如說忘了yield的用
法——給有經驗的Ruby程序員提供幫助。在我看來,這也就足夠奠定它作為經典教材的地位了。由于封面上有一柄丁字鎬,這本書也被昵稱為“鎬頭書”——它
正是你發掘“紅寶石”(Ruby)寶藏的必備工具。
Agile Web Development with Rails ???
Rails的作者David Heinemeier
Hansson說過一句大實話:“我從來不會為了學語言而學語言。”大多數人在大多數時候學習一種新的語言不是為了比較語言的優劣,而是因為這個語言底下
的某個工具能給他的工作帶來幫助。Ruby世界里的這個“殺手應用”,讓Ruby在短短一年時間里成為焦點的這個工具,就是Rails。
這是第一本介紹Rails的圖書,又是由Rails的作者DHH和前面提到的Dave
Thomas共同撰寫,其價值可謂不言而喻了。許是兩位作者有太多的“干貨”想要交給讀者,這本書的第一版被他們——不幸地——寫到了558頁之厚。書中
首先展示了一個規模不大的在線購物網站,讓讀者親身體驗用Rails進行敏捷開發的感受;然后針對Rails框架的各個組件和安全、部署等延伸話題展開了
深入的討論。其內容之全面、探討之深入,令人嘆為觀止。看起來,和Matsumoto不同,DHH很清楚應該怎么介紹自己的作品——不管是“淺出”還是
“深入”。 值得中國讀者高興的是,這本書的第一版已經由林芷薰翻譯,電子工業出版社付梓。Rails仍然處在高速發展的階段,從本書第一版截
稿至今,Rails已經發生了相當大的變化,因此這本中譯本甫一面世便已經有很多過時之處。但這本書畢竟不是參考手冊,作者更多地是在其中闡述Rails
的設計理念和最佳實踐。對于英文閱讀無法達到最快速度的讀者來說,這個譯本未嘗不可以是一個稱職的向導。
Rails開發者助手兩種
不難想象,有很多性急的程序員會——就像我一樣——草草了解Ruby語法之后就一頭扎進Rails的絢麗宮殿,體驗快速開發web應用
的成就感,卻不得不時時因為缺乏對Ruby語言的深入了解而感到迷惑:這個類里什么都沒有,它為什么會工作?那個地方寫的代碼是什么意思?可是,要全面系
統地學習Ruby,又實在令人望而生畏。還好,我們有這本Ruby for
Rails。書中介紹了一些Ruby語言特性——既有普通的也有高級的,都是Rails中使用到的。簡而言之,這就是一本專門為Rails應用開發者提供
的Ruby指南。更有趣的是,書中還用了一章(第17章)篇幅專門介紹“如何探索Rails源代碼”,真可謂是“授人以漁”的典范了。 另一個“助手”則是Chad Fowler——他也是Programming Ruby的合著者——的Rails
Recipes。和任何一本“菜譜”(recipe)一樣,這本書不會教你如何使用菜刀與炒勺、如何把蔬菜切片——你可以從別的很多地方學到這些技巧。這本RailsRecipes教給讀者的,是如何在
Rails環境下急就章地完成一個你需要的功能。譬如說“用戶登錄與身份驗證”這件事,每個網站、每個開發者都曾經做過不止一次,這本書中就給了讀者一個簡單而可靠的解決方案,讀者只要抄抄改改,幾分鐘就可以完成這個功能。對于初接觸Rails(以及Web
2.0)、面對很多問題尚且無從下手的新兵來說,這本書確實可以幫助他們解決一些實際問題。
不過這本書的局限也同樣明顯:如果你需要的菜色超出了這份菜譜的范圍,它就只好愛莫能助了;而且,僅僅給出解決問題的代碼,卻沒有對應的單元測試,也讓習慣了TDD的讀者多少有些忐忑。在我看來,這本書對“授人以魚”的專注恰好和前一本Ruby
for Rails構成了一對“可怕的對稱”,也讓這兩本書有理由共存于Rails開發者的案頭。
Ruby In A Nutshell,以及Ruby老書四種
作為Ruby語言的締造者,Yukihiro
Matsumoto只能寫一本“果殼書”,這本身就是一件耐人尋味的事情。O’Reilly的“果殼書”系列歷來褒貶不一:有人認為它們缺乏深度,也有人
認為它們是快速入門的好幫手。但Matsumoto最大的問題在于:他創造了Ruby,卻沒有真正意識到這種語言到底有多大的威力——后來他經常在
Ruby on Rails討論組活動,從中了解一些精妙的Ruby用法。其結果也很自然:這本Ruby In A
Nutshell作為語言參考中規中矩,但對于實際應用中的妙處——例如在DSL方面的應用——卻語焉不詳。再加上它所針對的Ruby版本是略顯過時的
1.6版,也讓這本書的地位略顯尷尬。
和這本“略顯尷尬”的Ruby In A
Nutshell比起來,另外的幾本老書基本上已經失去了可讀的價值:它們出版于2001或者2002年,既不針對最新的Ruby版本,又沒趕上Rails的熱潮,作為語言參考也缺乏Matsumoto那樣的權威性,所以這幾本書也就被歸入“不值一讀”之列了。它們是:
Ruby Developer’s Guide,Syngress Publishing 2002
??? The Ruby Way,Sams 2001
??? Making Use of Ruby,Wiley 2002
Teach Yourself Ruby in 21 Days,Sams 2002
Ruby 奇書兩種 稱它們為“奇書”,因為它們的主題實在偏頗。先看這本Enterprise Integration with
Ruby:雖說腳本語言常常被稱為“膠水”,有多少人會當真想到用Ruby去做企業應用集成?不過細看之下,這本書多少有些名不副實之嫌,因為它真正介紹
的無非只是如何訪問數據庫、如何操作XML、如何通過SOCKET通信之類比較底層的技術而已。在一個生僻的題目之下寫著另一些生僻的內容,盡管這些內容
算得上有趣,但我還是要對那些沒有讀過這本書的Ruby程序員說:你沒有錯過太多——盡管這本書與你想象的并不一樣。 最后要介紹的這本書更是備受爭議:有人盛贊它是“精通Ruby的必經之路”,也有人批評它沉溺于奇技淫巧缺乏實用價值。但無論褒貶,更多的讀者正在逐一挑戰其中的謎題——這本書就是James
Edward Gray所著的Best of Ruby
Quiz。這本書(目前出版的是第一卷)列舉了25道題目,讀者大多可以想出一種辦法來解決這些問題,往往還能
通過思考和重構找到第二種優雅的設計,但這本書卻給你列出了第三種、第四種真正精巧的解決方案——充分利用Ruby技巧才能得出的解決方案。這些題目的最
終解法之巧妙,常常令人拍案叫絕(或是破口大罵)。不過這些“奇技淫巧”也并非全無用處,例如書中很多題目在解答時都用到了正則表達式,理解這些解答對于
深入學習正則表達式的用法是很有幫助的。 草率而又艱難地,我們粗粗瀏覽了2006年6月之前出版的所有Ruby圖書。迄今為止,所有這些Ruby圖書都是針對整個Ruby
語言、或是針對Rails框架的,只是關注角度各有區別。隨著Ruby和Rails的不斷升溫,可以預見很快就會有更多闡述某一細部的技術書籍出現,各種
經驗與模式也會結集出版。也許不久之后,就再也沒人能像這樣給出一份“Ruby完全讀書指南”了。所以,能讀到這樣一篇文章,就當做是Ruby與你的緣分
吧。 |