五个月的假期基本上快过去了。在假期中一直想对自己的技术做一下突破,一直想学点东西。针对自己的时间条件考察了一下,当初把目标定位在Ruby上。
我第一次知道Ruby是在一次如厕中在手中用来消遣的《程序员合订本》里看到的。哪一年已经忘了,那时一个小系列的文章,介绍了Ruby这一语言的语法等等。当时我看了一下,感觉就是把对象做的很足的脚本语言,没有什么稀奇的,还是日本人发明的,估计不会有多大作为,因为那时感觉Perl、Python已经把脚本语言搞的快饱和了,虽然那时Python的应用也远不如现在。那时还没有Rails,要么就是有了但国内还没听说过,因此那时Ruby也不如近年来这么火。于是我也没有多在意。
后来就是听说了Rails,但更多的方面是Ruby本身吸引了我。虽然我那时候没有系统的读过Ruby的书,也没有觉得有什么非要学Ruby的必要。毕竟它的语法和脚本语言类似,我也不觉得学起来会很难。
真正激起我学Ruby的兴趣的是在2007年圣诞节的时候从pluskid的blog上看到了RubyConf2007的视频下载。当时正在寒假中,没什么事情做,这些视频也很不错,于是我就用Python写了一个脚本,把高清的视频都下载下来看。那些视频看的我很激动,给我的最大冲击倒不是演讲的内容,而是这样一个活跃的社区。看了几个视频后,我不禁仰天长叹:“为什么在Perl和Python领域没有这样的conference视频可以看呢?”因此从那时,我就对Ruby的社区印象特别深刻。
现在想起来,这和语言以及语言的发明者的特色性格有一定关系的。Larry崇尚自由散漫,而且Perl5语言在这几年已经熟透了,因此有一个CPAN收集大家的模块就OK了。散漫的社区的公开技术讨论就不多了。Python是在近几年才开始流行的,但我看过的寥寥几个关于Python的视频,都是Guido在Google讲的。Python的社区也跟语言的语法一样,很稳重,不怎么活跃。Ruby则更年轻一些。另一个角度上,语言的扩展上来看,似乎也有这方面的体现。Python没有流行的模块集中管理工具,下载下来的模块,要么手工拷贝,要么运行模块自带的setup.py。Perl的CPAN shell则好了一些,但相对于Ruby的Gem来说就落后、麻烦多了。很明显,从Python到Perl再到Ruby,它们的模块管理工具是从松散到集中发展的。我觉得这也在一方面体现了社区的紧密程度。
后来我在上《面向对象》这门课中,老师除了用Java和C++作为讲解对象外,还讲了Ruby中的对象。这时我也发现,在加拿大的人们,对于Ruby似乎比Python更热衷一些。我周围的同学中还没有遇到过平时用Python来解决问题的,多数是用Ruby。而老师们也相对于Python更愿意用Ruby来作为用例来讲解课程。
因此在这个假期中,我着重在看《Programming Ruby》。英文版为主,中文版辅助。看了一点新东西,就用来把过去的一些实际例子用Ruby来重写一遍。对于此类图书,我更愿意在床上看,而不是在计算机上看电子版。之前的文章我也写过不打算买纸质图书了,因此也没买这本书。其实就算买,我也不是很想买这种看一遍就OK的语言类图书。
说道语言类书籍,除了过去买的有用的和没有用的C/C++/Java等书,在脚本语言中我一共买过三本──《Learning Perl中文版(第二版)》、《Programming Perl中文版》和《Python 2.1宝典》。这样的顺序也是我对这三本书的评价等级:第一本是最爱;第二本限于我的水平还没有完全利用;第三本对我基本上没有用。《Learning Perl》是我看过的最好的讲解编程语言的书──风趣、好用、印象深刻。当初买这本书是一个意外,那时我看了一篇对与Perl的介绍,其中书籍部分自然首推《Programming Perl》,然后是《Learning Perl》。那时还沉浸于“高大全”思想的我自然就去书店搜索《Programming Perl》,结果没有,只好退而求其次,买了《Learning Perl》这本。当时看到薄薄的一本还不大想买,觉得是不是不够用的。结果从前言开始看就无法收拾,不管手中有没有计算机来实践,我总能看得津津有味,我至今都觉得我的Perl知识都是从这本书上来的。后来我一直惦记着那篇介绍Perl的文章中说《Programming Perl》多么精彩,于是就去书店订了这本书,请书店专门为我进这门一本。后来拿到手上看,觉得也不过尔尔。而那本《Python 2.1宝典》是我想学Python的时候买的。那时候Python的权威资料不多,国内也没有基本O’Reilly的书籍,于是我就找了当时能找到的最好的来看。后来也没有什么感觉。最后我的Python是在加拿大的时候看《Dive into Python》电子版学会的,那本书真是不错。现在我因为对买了后看不上的书比较恐惧,因此没有买Ruby图书的念头,尽管《Programming Ruby》人人都说好。
这种学习开始时感觉不错,但后来还是遇到了瓶颈,和我学习Python的时候如出一辙。当时我学Python的时候,总觉得学不下去,远没有当初看《Learning Perl》时的那股劲头。后来感觉是因为对Perl用熟了后,总是用Perl的思想来体会Python,自然学的慢。后来看《Dive into Python》的时候也是强逼着自己把Perl的思想压下去,才慢慢的看下去的。现在似乎是同时有Perl和Python的两种思想来影响我学Ruby。这样的结果是Ruby的语法学起来没有难度,而Ruby的思想则无法接受。现在我用起Ruby来总是觉得别扭,就是这样。
至于Ruby的语言结构,我觉得和Python有的一拼。如果Python是拘谨的,那我觉得Perl和Ruby是各自的在自由散漫上的两个方向,当然Perl走的更远一些。虽然Ruby有借鉴Perl的语法,但用Ruby更容易写出严格缩进的、配对的代码来。Ruby的复杂在于语法的复杂,块啊、元编程之类的总让我有些困惑,必须打起精神来才能看懂;而Perl则纯是自由、没有规矩的代码书写造成的,但是语法与C非常相向,因此一旦把代码排版好了,理解上是很容易的。
在前几天中,我一直看《Programming Ruby》,还比较不错。但还没有构筑好Ruby的思想。同时,我也希望能有一本类似《Learning Perl》那样的书,这样学习起来会更容易一些。我觉得80/20规则在Ruby上一样适用──“你日常中遇到的80%的问题用语言的20%就能解决”。《Learning Perl》自己就说到它的面向就是这20%。现在Ruby的书也不少了,我还不知道有哪本书可以胜任。