ruby,曾经风靡一时的脚本语言,曾经被一群教众捧上天的语言,而现在追随者却少的可怜,甚至可以说更多的只是用在了ROR上。

        有人说:ruby只是脚本语言,速度肯定没有C/C++运行快。有人说:windows有C#,linux有shell,为什么还要费劲装环境用ruby?......

        与ruby相遇还是在我同事某日和我提到python的时候,当时的我仅仅只有C的基础,对于脚本语言只知道VB。一副天真的表情看到了ruby。它的简单不仅符合运维人员偷懒的精神,也同时减轻了运维人员对代码编写的压力。这只是我看到ruby的第一瞬间,虽然想想当时的确相当幼稚,但是ruby对于一些支持它的人来说的确大部分的印象基本如此。

        经过3个多月的时间,在一边工作一边自己研究的情况下,写出了第一个ruby的脚本(仅仅是实现FTP对应服务器拉取apache和IIS日志的功能)。在放入计划任务的那一瞬间,我兴奋至极。然而事实永远都是在打击人的。之后公司需要做一个校验CRC功能的脚本或程序。当然我作为一个运维人员,这个重任并不在我这里,而是到了后台开发同事手上。但是为了展现ruby的简洁,我不自量力的和他们展开了竞赛。结果不言而喻,虽然同时完成了编写,但是处理速度上,ruby慢的可怕。我错在哪里?

      之后我又自学了java以及C#,终于我了解到了ruby真正的面貌和实力。重新拿起《ruby系统管理实战》,发现原本不清楚的地方一点点的揭开了面纱。

     ruby并不是神,也不需要膜拜,更不需要狂热的追捧,它的存在只是解放运维人员和程序员的双手。如果说C/C++是巨人的话,ruby则是站在巨人肩膀上的一个新生儿。它可以俯视很多语言,但它并不是巨人。说ruby是脚本语言的话,其实更应该说它是兼容性语言。正如ruby现在在国际上发展的趋势一样,它可以***到每一种非脚本语言中去,而它的目的并不是要取代,而是在一定程度上解放每一个写程序的人。

    作为一个运维人员应该对下面的这个命令(或者说是方法)非常熟悉:grep,那让我们来看看这条命令吧:ruby -ne 'puts $_ if $_=~ /foot/' /usr/share/dict/words  (出此《ruby系统管理实战》第二章)如果你有ruby环境的linux的话可以试下,效果和grep几乎相似。这时学习shell的朋友会吐槽了,既然linux都默认有shell了,你为什么还要用ruby呢?来考虑下下面这种情况吧,我有一个定时处理文件脚本本来是在linux上的,有一天系统要换成windows,这时ruby只需要更换下文件路径写法,而shell我必须去兼容win上的CMD或是写成其他语言。这就是ruby的兼容性,对于不同的系统你所要做的仅仅是在参数上去匹配当前系统的样式,而不需要去管系统是否兼容这里的任何一个方法。我可以用更多的时间去优化这个脚本而不需要浪费在移植上。

    ruby并不快,但也不会慢到你不想使用它。以我前面的CRC为例子,当时我怎么想都找不到原因,直到看到了ruby的profile。写得快和运行的快,永远都是2个极端,如何权衡好才是ruby真正的魅力。当你把一个ruby代码写的很快并且运用了很多类的时候请好好的检查下这些类你是否详细直到方法的运行过程,如果在你不知道的地方存在了额外的步骤,那ruby只能给你带来漫无止境的等待。这并不是吓唬人,而是真实的情况,有兴趣的朋友可以看下find类,我深受其害。find在查找文件或文件夹的同时还会运行test去判断相关资源分支的大小,虽然1个文件影响不大,但是文件一旦多,目录一深test就占据了绝大多数的运行时间。这个时候我们可以使用另一个方法来替代find:

Dir["**/**"].each do |f|

......

end

这个代码并不难,但是要第一时间想到用这个可能需要点时间,一般大家会很当然的去用find,这也是写得快和跑得快的比较简化的对比。

     希望更多的人来关注ruby,无论你是否会代码,无论你是程序员或是运维。ruby的未来只是便利与每一个人,而不是和其他语言抢占一席之地。  ruby也并不只有ror ,RpgMaker、Jruby、脚本应用都是ruby目前比较主要的用途。  

 

PS:最后吐槽。。。其实只是看到更多认识ruby的人都在用ror所以用了点时间把自己对ruby的认识进行了下总结,更多的带了点个人思想,有不同意见的也可以提出来。毕竟只有讨论才能得到进步才能知己知彼。