透明思考


Transparent Thoughts


铁道下的红宝石:点评Ruby畅销书三种

对于Ruby这种语言,很多人都和我一样,是因为一个突然风靡全球的、号称能够极大提升web应用开发效率的、名叫Railsweb框架而顺带了解到的。在为Rails的神奇魔力所折服的同时,我们也常常心生疑惑:这种强大的力量究竟来自何方?如果换成JavaC#或是别的什么语言,一个web框架能否同样高效?除了这多少有些“虚”的思考之外,我们还常常在各大论坛上看到“应该如何学习Ruby”这样的问题——Rails尽管方便易用,但要真正穷其千里目,仍须在Ruby语言这里更上一层楼才行。

好在书中自有黄金屋。不论是要深入探索Ruby语言的奥妙之处,还是只想在工作中遇到问题时查找参考,都有好书可以提供帮助。在Amazon网站上,抛开专讲Rails框架的Agile Web Development with Rails之外,销量排名前三位的Ruby图书分别是Programming Ruby(第二版)、Ruby CookbookThe Ruby Way(第二版)。

镐头书:Programming Ruby(第二版)

由于封面上赫然画着一柄丁字镐,这本Programming Ruby也被Ruby程序员们亲切地昵称为“镐头书”——和历史上大名鼎鼎的“龙书”、“紫皮书”一样,拥有一个独特的昵称本身就证明了这本书的地位。虽然Ruby语言的作者Matsumoto并没有参与撰写此书,但Dave ThomasAndy Hunt这两位“用本主义程序员”的大名也足以撑起一部经典教材了。

所以这本书就是Ruby的经典教材。关于Ruby的基本语法和常用工具,书中第一部分和第二部分做了详细的介绍。第三部分“Ruby Crystallized”更加阐述了Ruby语言的一些细节和设计理念,其中第23章“Duck Typing”是刚从Java或者.NET平台走出来的读者不可错过的,因为对于类型与契约的理解、对于类与类型的理解,正是Ruby这种动态语言与Java/C#等静态语言最大的区别之一。随后的第四部分提供了Ruby基础类库的速查手册。

身为“用本主义程序员”的两位作者并非浪得虚名:这本Programming Ruby虽然不是一本称职的参考手册,却足够帮助一个初学者步入Ruby世界而不致误入歧途,并且能够在很少见的一些情况下——譬如说忘了yield的用法——给有经验的Ruby程序员提供帮助。在我看来,这也就足够奠定它作为经典教材的地位了。

不可读,不可不读:Ruby Cookbook

写作这本书是为了帮你节约时间。人们常说‘时间就是金钱’,没错,不过别忘了,时间还是你的生命。我们有限的生命最好是用于创造有趣的新事物,而不是跟自己的错误较劲,或是试图解决那些早已有人解决过的问题。我们花了不少时间来写这本书,只希望它帮助所有读者节约的时间能够值回票价。”

这段话出自Lucas CarlsonLeonard Richardson两位作者为Ruby Cookbook所写的前言。说得没错。人们把太多的时间浪费在实现通用算法、做别人已经做过的事、调试错误和重复劳动上;在想要避免重复劳动时,他们又把太多的时间浪费在搜索、试用和学习别人提供的库上。就像两位作者所说,这本Ruby Cookbook的问世正是为了帮助人们节省这些时间。

而它也毫无疑问能够兑现自己的承诺。这本Cookbook涵盖的内容从字符串处理到数组与Hash的用法、从代码块到元编程、从文件读写到数据库持久化、从互联网服务到分布式Ruby程序设计……简而言之,Ruby程序设计中的各种常见问题在这里都有所提及。除了编程任务之外,这本书还包括了测试、调试、性能优化、打包发布、日常任务自动化等内容。说得夸张一点,也许Ruby程序员们遇到问题时第一个咨询的对象不应该是Google,而是这本Ruby Cookbook

但——在我个人看来——它有一个致命的缺点:太过厚重。涵盖如此大量的内容,代价就是两位作者把这本书写到了近千页之厚。当然我们并不是没读过厚达千余页的大书,但Ruby毕竟不是C++,如何期望那些满怀激情的web 2.0创业者捧着一本鸿篇巨著正襟危坐孜孜苦学?所以,也许你应该把这本书放在案头,遇到问题时立即翻查,但你很可能不会有兴趣去细细读它。

解说Ruby之道:The Ruby Way

Rails变得炙手可热之后,我不止一次地听到这样一种——不无醋意的——论调:只要学习Rails框架的设计思想,用别的语言(譬如Java)也能够做出同样优雅、同样高效的web框架。其实正如维特根斯坦曾说的,语言本身已经为思想划下了界限。选择一种语言远远不止是选择它的语法,还意味着选择其中的模式、惯用法、套路和思维方式。或者说得更玄一点,你不仅要接受它的“器”,更重要的是掌握它的“道”。

但“道”是很难形容的。“我能够感受到它,但未曾尝试过用语言来解释它。这太难了,即使是用我的母语日语。但Hal Fulton这样做了,且第一次就做得很不错。由于得到了Ruby社区许多人的帮助,他的第二次尝试更出色。”Ruby语言的创造者Matsumoto如是说。从篇章选材来说,Fulton所著的这本The Ruby Way与前面介绍的Ruby Cookbook大同小异:无非是各方面的常见问题及其解决方案。不同之处在于:它不仅讲解如何解决这些问题,还揭示出解决方案背后隐藏着的Ruby的思维方式——Ruby之道。这也让这本书——尽管其厚度并不逊于Ruby Cookbook——有了更多的可读性。

作者把“Ruby之道”分为两部分:Ruby设计的哲学,以及“如何使用Ruby”的哲学。Ruby语言具有某种“无名特质”,其中最大的特点就是“简单”:它让程序员们能够以更简单的方式解决问题。但Ruby并不是一种简单的语言——简直可以说它“相当复杂”。那么,这种复杂的语言是如何让使用者的生活反而变得简单的?了解其中的奥妙,不仅有益于快速掌握Ruby语言,对于读者今后的软件设计思路也不无裨益。带着这个问题来阅读这本The Ruby Way,相信读者能够更好地看出作者的良苦用心。

作为“Web 2.0时代”的产物,这本书的第二版相比第一版也加入了很多新鲜内容,例如测试驱动、开发工具、社区介绍等等。此外Rails的作者David Heinemeier Hansson也指出:本书在阐述元编程,很多Rail理念的灵感都来自本书的第一版,尤其是现为第11章的内容。不过如果你恰好是刚开始接触Ruby,我强烈建议你从第14章“脚本编程与系统管理”读起,因为学习一种编程语言的最佳途径就是从现在开始用它,每天都用。

*

诚如Martin Fowler所说,Ruby是一种神奇的语言。不论你是被这种神奇的语言本身所吸引,还是为了赶上Rails的热潮而学习Ruby语言,本文所介绍的三本书应该就能满足你的需要。其实除了Rails之外,Ruby的世界里还有众多的“红宝石”闪烁着迷人的光芒,但愿这几本书能帮你发现更多“铁道下的红宝石”。最后,就祝你阅读愉快、编程愉快吧。