阅读更多
根据我的观察,习惯于Java或者C#的程序员在初初接触Ruby时,最能打动他们的往往就是像本文标题这样的一句代码:原本熟悉的字符串或者整数突然摇身一变,有了很多新的行为,甚至让整个Ruby语言都似乎变了个样。尽管“改变标准库的行为”并不总是值得推荐的做法,但如果使用得当,你能够在Ruby的基础上创造出一种贴近项目需求、易写易读的方言——也有人把这些方言叫做“领域专用语言”(DSL,Domain Specific Language)。更多的程序员是因为Rails这个框架才开始对Ruby语言产生兴趣,而Rails在很大程度上正是一种针对Web应用开发的DSL。
能够创造DSL,这是Ruby语言最大的魅力之一。但仅仅这一点并不足以解释为何有那么多优秀的程序员如此盛赞Ruby语言,更不足以解释为何它会突然间红透半边天——毕竟,在元编程方面更具实力的LISP和Smalltalk并没有像如今的Ruby这样流行。作为一个Java程序员的Mike Clark给了我们一个有趣的比喻:推绳子——他说“读了仅仅几页 Programming Ruby之后,再使用Ruby之外的语言编程感觉就像是在‘推绳子’(push rope)。”把一根软绵绵的绳子往前推,那种有劲使不上的感觉,正是用惯Ruby之后再回到Java/C#时的真实感受。
灵活、优雅、巧妙、便利……这些溢美之辞我们已经听得太多了。但在我看来,Ruby最大的特点就一个字:快。这不仅意味着你能够很快地为自己的问题找到现成的解决办法,更意味着你能够直观地描述自己心中的想法,并且在改变想法时能够很快地调整你的程序。这种能力对于今天的软件开发者而言显得尤为重要,因为世界在飞快地改变,软件项目的需求在飞快地改变。对于今天的软件客户来说,尽快得到可以工作的软件、尽快反馈、尽快看到调整的效果,比一个完美但尚未实现的设计要有价值得多。而Ruby这种“快速实现想法”的能力,正是众多开发者对之青睐有加的根源所在。
Ruby能够帮你描述心中所想——这句话,在某种意义上,也意味着你需要熟悉Ruby的思考方式。尽管自称是面向对象的脚本语言,Ruby的精神仍然与函数式编程(functional programming)一脉相承。这种精神不仅体现在语法层面上,还体现在构建系统的思路上。Ruby社群很少会一开始就把要实现的目标想得清清楚楚、或是首先制定种种规范标准,相反,他们会充分利用Ruby的灵活与简洁、优雅与巧妙,从一个简单的、能够工作的软件开始,逐步增加更多的功能,并通过不断重构和优化让良好的设计逐渐浮现。
是以,跨进Ruby的世界,也许你首先需要学会的是这种“渐进式”的思维方式——不仅仅是编写软件,就连“学习Ruby语言”本身也是一样。你不需要读18本书或者参加半年培训来学会Ruby编程——另一方面即便你这么做了也未必就能学会,如果你没有使用Ruby来编写真正有用的程序的话。所以,如果你对Ruby产生了兴趣,稍微了解一下,然后就开始写吧:把编写shell脚本的首选语言从Perl改为Ruby,用Rake来构建你的项目,或者——像大多数人那样——用Rails来开发一个小网站。你会遇到无数的问题,解决这些问题的过程就是对你的技术进行重构的过程。
但你至少还需要通过某种途径来“稍微了解”Ruby语言,而且在遇到问题时也需要一本手册来帮你排疑解难。在你手上的这本《Programming Ruby》正是为此而生的一本书。书中的精彩内容无须我在这里赘述,你大可以自己去发掘。我唯一想要告诉你的是:如果你想要开采最瑰丽的“红宝石”宝藏,这本书就是你不可或缺的“镐头”。锻造这柄镐头的是两位大名鼎鼎的“实用主义程序员”Dave Thomas和Andy Hunt,这两位撰写过一系列C++/Java/.NET技术图书的开发者最终选择用Ruby on Rails来开发他们自己的网站(PragmaticProgrammer.com),这本身就已经证明了Ruby的价值,同时也让我们对这本书的实用性更有信心。
所以,你还在犹豫什么呢?既然已经拿起了这本书,既然已经对Ruby产生了兴趣,就不要再浪费时间了。翻开书,跟着这两位讲求实效的作者一道,现在就开始你的Ruby编程之旅吧。Ruby已经向你说过“hello”了,你将会如何回应它呢?
最后,和以往一样,祝你在Ruby的世界里,编程快乐!