Matz的程式世界遊記--評《松本行弘的程式世界》
作者:莊表偉
一位我非常喜歡的日本偵探小說家東野圭吾,曾經寫過一篇小說:《超讀書機器殺人事件》,其中介紹了一種非常先進的“高機能讀書機”,不但能夠寫出一本小說的故事概要,更能夠歸納書的內容、撰寫心得並輸出書評。最神奇的是,這個機器一共有五種評價模式可供選擇,包括:“阿諛奉承”、“花言巧語”、“誠樸篤實”、“犀利毒舌”、“尖酸刻薄”。
在看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語言擴充套件以及開源協議的內容,真正與函數語言程式設計相關的,只有第一節。
總的來說,這本書如果以七五折以下的價格出售,就值得果斷入手一本。如果能夠仔仔細細的通讀一遍,就一定值回票價的。
相關文章
- 《松本行弘的程式世界》 - 不一樣的Ruby程式世界
- 《松本行弘的程式世界》精彩書摘
- 《松本行弘的程式世界》推薦序
- 帶您走進松本行弘的程式世界
- 《松本行弘的程式世界》贈書活動通知
- 徵集與松本行弘訪談話題——走進松本行弘的程式世界
- 認識《松本行弘的程式世界》這本書
- 讀《松本行弘的程式世界》啟發頗多
- 《松本行弘的程式世界》樣章讀後感
- Ruby中的設計模式——《松本行弘的程式世界》設計模式
- 《松本行弘的程式世界》中文版原作者序
- 圖靈教育帶您走進松本行弘的程式世界圖靈
- 讀讀《松本行弘的程式世界》,儘管是Ruby語言
- Ruby之父松本行弘(Matz)評論《黑客與畫家》黑客
- 《松本行弘的程式世界》讀書筆記(上)——物件導向、程式塊、設計模式、ajax筆記物件設計模式
- 《松本行弘的程式世界》讀書筆記(下)——文字編碼、整數、浮點小數筆記
- 松本行弘:程式碼的未來
- 松本行弘:程式碼的未來(圖靈訪談)圖靈
- 來自松本行弘的技術剖析
- 程式碼世界中的Lambda
- 瘋狂的程式設計世界程式設計
- 雲遊世界系統軟體開發丨雲遊世界原始碼丨雲遊世界dapp丨nft原始碼APP
- 程式設計世界的熵增原理程式設計熵
- 世界上最大的程式碼庫
- 程式設計師世界的縮寫程式設計師
- 帶你走程式序員的世界
- 程式世界裡的不信任原則
- 世界上最短的時鐘程式碼
- 松本行弘為什麼要開發Ruby
- 真實世界中 Rust 程式的安全實踐Rust
- 程式設計師的世界盃觀戰指南程式設計師
- 開啟神秘程式設計世界的大門程式設計
- 《虛構世界》:是音遊又不是音遊的音樂遊戲遊戲
- 農民世界鏈遊元宇宙遊戲系統技術開發程式元宇宙遊戲
- 悠遊世界/遊戲/系統技術開發/悠遊世界養成遊戲開發解析遊戲開發
- 30張地圖 30個世界《坦克世界》1.0地圖旅遊指南地圖
- 未來這五年,軟體工程師如何安身立命? (下) ——Ruby之父松本行弘談《程式碼的未來》軟體工程工程師
- 未來這五年,軟體工程師如何安身立命? (上) ——Ruby之父松本行弘談《程式碼的未來》軟體工程工程師