根据我的观察,习惯于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的世界里,编程快乐!

熊节

ThoughtWorks咨询师

2006年12月16日

西安

Ruby.say_hello——Programming Ruby中文版序相关推荐

  1. 《Programming Ruby 中文版第二版》P577页singleton_method_undefined方法说明有点问题

    "当一个singleton方法在这个接受者中没有定义(??)时,singleton_method_undefined作为回调函数会被调用" 这是书上P577页的说法,看看官网的原文 ...

  2. Ruby编程语言(The Ruby Programming Language) 中文版

    Ruby编程语言(The Ruby Programming Language) 中文版 转载于:https://www.cnblogs.com/gavinhughhu/archive/2009/11/ ...

  3. Programming Ruby学习笔记一

    最近在学习Programming Ruby,做点读书笔记来记录下自己的成长也是不错的.当然更希望的是各位大牛能指出本人的不足,在这里先谢谢大家了. 第一章     入门 讲的是如何安装Ruby,在Ru ...

  4. 【翻译】Programming Ruby——正则表达式

    正则表达式 Ruby大部分的内置类型都和其它的编程语言很相似.主要有strings,integers,floats,arrays等等.然而,只有脚本语言, 如Ruby,Perl,和awk等提供了内置表 ...

  5. centos下安装ruby,删除ruby

    简言 由于centos7下面,直接使用yum install ruby,安装的是2.0.0版本,太低了,没法部署redis集群,redis集群需要2.3版本,所以我们需要安装更高的版本 注意 在新版r ...

  6. 从自己实现Ruby单例模式揭秘Ruby模块内幕

         从自己实现Ruby单例模式揭秘Ruby模块内幕 缘起 整个故事要从某一天开始说起,那天,我看到一篇文章介绍了Ruby中实现单例模式的模块.Singleton模块,只要include  Sin ...

  7. ruby array_在Ruby中使用Array.pop和Array.shift方法从Array中删除元素

    ruby array Ruby Array.pop和Array.shift方法 (Ruby Array.pop and Array.shift methods) If you are reading ...

  8. ruby array_在Ruby中使用Array.delete()和Array.delete_at()从Array中移除元素

    ruby array Ruby Array.delete()和Array.delete_at()方法 (Ruby Array.delete() and Array.delete_at() method ...

  9. JNI官方规范中文版——序

    JNI官方规范中文版--JNI程序设计总结 2012-10-14 09:50 阅读(644) 评论(2) JNI官方规范中文版--使用JNI时容易出错的地方 2012-10-14 09:45 阅读(5 ...

最新文章

  1. fastJson反序列化异常,JSONException: expect ‘:‘ at 0, actual =
  2. C#中用NPOI的excel导出
  3. cs_EmailQueue_Failure///cs_Emails_Dequeue///cs_Emails_Enqueue
  4. CentOS_6.5配置iptables防火墙策略
  5. websocket receive方法内 有循环怎么退出_认识HTML5的WebSocket
  6. ML与math:机器学习与高等数学基础概念、代码实现、案例应用之详细攻略——基础篇
  7. AI:一个20年程序猿的学习资料大全—结构分析软件/办公软件/电气制造控制/高级语言编程/平面三维设计/视频编辑/FQ格式转换软件——只有你不想要的,没有你找不到的
  8. WGAN-GP与GAN及WGAN的比较
  9. 机器学习java_Java机器学习,第1部分
  10. EF for Firebird
  11. 基于界面自动化测试框架的发展
  12. pluswell双机软件基本概述
  13. 不记得撞得有多痛了,可是,那个电线杆,永远都在
  14. 第七章 Android嵌入式组态软件
  15. 2021-09-13 《鸟叔Linux私房菜》阅读纪录 第一章-Linux是什么如何学习-Linux 是什么Torvalds的Linux 发展
  16. VDN平台各种数据库连接设置
  17. ubuntu 安装 notepad++
  18. 技术团队如何高效开会
  19. 医保卡不用填写也可以报销的医院(A类定点医疗机构)
  20. GMap.Net 实现离线地图

热门文章

  1. python blit_pygame入门
  2. 二苯并环辛炔-三磺酸-Cy5.5 triulfo-Cyanine5.5-DBCO
  3. 一路去**ddss第三天(祝贺中心找了一批人才)
  4. thinkphp5.1获取当前域名的方法
  5. Centos8安装MySQL8
  6. 如何开发一个动漫网站,AI人物转动漫图像系统毕业设计毕设作品
  7. ubuntu的快捷键
  8. 元宇宙:一个熟悉的故事超越一个世界
  9. stm32f334高级定时器TIM1
  10. STM32高级定时器TIM1生成互补PWM