Matz的程式世界遊記--評《松本行弘的程式世界》

出版圈郭志敏發表於2011-10-20

原文連結

作者:莊表偉

一位我非常喜歡的日本偵探小說家東野圭吾,曾經寫過一篇小說:《超讀書機器殺人事件》,其中介紹了一種非常先進的“高機能讀書機”,不但能夠寫出一本小說的故事概要,更能夠歸納書的內容、撰寫心得並輸出書評。最神奇的是,這個機器一共有五種評價模式可供選擇,包括:“阿諛奉承”、“花言巧語”、“誠樸篤實”、“犀利毒舌”、“尖酸刻薄”。

在看Matz(松本行弘)這本書時,我的心情一直起伏不定,一會兒想寫成“阿諛奉承”的模式,一會兒又想寫成“尖酸刻薄”的模式,按理說作為一篇客觀的書評,自然應該寫成“誠樸篤實”的模式,但是,真的很難做到啊。最終,我決定將這篇書評,分為三個部分來寫。

一、阿諛奉承篇 作為一個Ruby語言的fans,我在2005年的時候,就開始關注和推崇Ruby與Rails。到現在已經成為一個儘可能只用Ruby完成日常工作的Ruby程式設計師了。而Matz作為ruby語言之父,在我們這些fans的心目中,地位當然是至高無上的。Ruby之父寫的書,怎麼可以錯過的?更何況,這還不是一般的Ruby語言介紹的書,而是“從一個程式語言設計者的角度去看待各種各樣的流行程式語言,分析他們有哪些特點,以及Ruby程式語言是如何取捨的。”——摘自範凱(ITeye網站創始人)的推薦序。而Matz在前言中也說:“最好將本書看成是一幅粗略勾勒出了程式設計世界諸要素之間關係的‘世界地圖’……我的願望是這些知識能夠激發讀者學習新技術的求知慾。”。這樣的一本書,我是絕對不能錯過的!

本書的第一章,Matz介紹自己為什麼開發Ruby,談到的一些觀點,深得我心:“程式語言會影響開發者的思想”。所以,在我看來,不同的語言社群,具有差異巨大的社群文化,也應該從語言的特性中去尋找根本原因。Matz設計的Ruby語言的目標是:輕鬆程式設計,進而提高開發效率。code for fun是Ruby社群的基本特色。Ruby語言從一開始就制定的三個設計原則:“簡潔性、擴充套件性、穩定性”,也進而引導Ruby社群,不斷追求簡潔、美觀、方便擴充套件的程式碼與框架。整個社群也因此而欣欣向榮。

在談到名字的重要性時Matz的一段話我非常認同:“我設計上的一個座右銘就是名字很重要,設計任一功能時,我首先會著重考慮它的名字。在我作為程式設計人員的生涯中,名字好的功能都成功了。”是的,Matz甚至偏執到“僅僅因為名字不好聽,就不往Ruby的語言裡新增一些別人要求的特性”,並且坦言“對於因為不喜歡名字而沒有實現的功能,之後我也沒有覺得後悔。”

嗯,我真喜歡這樣的Matz!

還有一段話,我也覺得很值得抄出來給大家分享:Matz對於設計模式的看法,發生過幾次轉變,一開始也認為不過是GoF在誇誇其談,後來認識到給最佳實踐起一個好名字的重要性,並且認為:23個設計模式,應該只是一個開始,以後應該會有一個收錄更多模式的目錄之類。但是,Matz話鋒一轉,說到:“很遺憾,這種目錄還沒有出現,也許人們連現有的23種模式都沒能夠靈活運用,還沒有進化到需要追求更多模式的階段。”

哈哈,Matz真是個腹黑男啊!

二、尖酸刻薄篇 在閱讀本書的過程中,我不時的會看著看著,大喊一聲:“坑爹啊!”這本書,坑爹的部分無論是數量還是質量,都非常驚人。第二章談物件導向,2.4節兩個誤解,Matz解釋到:“物件是對現實世界中具體物體的反應,繼承是對物體分類的反應。這個觀點是錯誤。”另一個誤解是:“多重繼承是不好的,Mix-in不錯。”在過去的書和言論者,Matz可能曾經引導過這樣的誤解,因此他打算再次講解一下物件導向程式語言和多重繼承。

但是,您就以這樣的理由,把類似的內容再寫一遍嗎?2.3.12介紹了一遍Ruby的Mix-in,圖2-20給了一段Ruby程式碼,解釋include module的用法。2.4.6、2.4.7再次介紹馴服多重繼承的方法,在Ruby中採用了Mix-in,圖2-25又給出了Ruby如何include module。我覺得,這樣的重複並無必要。

更加驚人的重複,出現在第三章。3.2.4節介紹Enumerable模組,列出表3-2中30多個方法,從P69到P70。到了3.3.4再次介紹Enumerable模組,表3-4中又一次列出了30多個一模一樣的方法,從P79到P80。而從P71開始的對於Enumerable模組中各個方法的介紹,在P81以後,又以類似的例子再次出現。P72中的條件指定,與P82中的3.3.7用來指定條件的select方法,舉的例子,寫的程式碼都一模一樣。我想問的是:Matz,您真的這麼健忘?居然連10頁前出現過的內容都忘記了?還是存心一樣的內容多寫兩遍,以便加深我們的記憶?

翻譯的同學,本書的編輯,在審稿的時候,有沒有發現這些問題呢?有沒有覺得這樣是個問題呢?還是莫名其妙的寫,糊里糊塗的翻,睜一眼閉一眼的審,最後就把書印出來賣了呢?

三、誠樸篤實篇 實話實說,我在閱讀這本書的最初三章時,就出現了劇烈的情緒波動,等到我將後續的章節,以較為平和的心態閱讀一遍之後,收穫還是非常豐富的。

1、每一章的最後一段作者的話,通常相當精彩,是Matz多年經驗的總結與提煉,值得細細品味。

2、相當多的章節,如果能夠沉下心來閱讀,都給我們帶來很多有價值的思考。例如第六章,對於Rails背後的Ruby語言特性,特別是“猴子補丁”的分析,第七章,對於文字編碼的背景介紹和梳理,以及第十四章第5小節,討論為什麼要開源的一些觀點,都很有價值。

3、本書的很多章節,頗有草草而就的痕跡,例如第十四章名叫函數語言程式設計,卻混入了程式碼生成、垃圾收集、C語言擴充套件以及開源協議的內容,真正與函數語言程式設計相關的,只有第一節。

總的來說,這本書如果以七五折以下的價格出售,就值得果斷入手一本。如果能夠仔仔細細的通讀一遍,就一定值回票價的。

相關文章