相信很多人都听过一个禅宗故事,说是两个僧人赶路,趟过一条小河的时候,看到一个漂亮的少妇困于其中,向他们呼救。其中一个有心施以援手,但想到佛家的色戒,便犹豫起来,不知如何是好。可另一个和尚却大大咧咧地冲过去,抱起少妇,趟过小河。于是前者的心里就很不舒服,一路上闷闷不语,后来实在忍不住,就问自己的同伴,既然身为佛门中人,怎能不顾清规戒律,如此轻薄。然而那位和尚却回过头来,淡淡地说:“我已经把她放下了,你还抱着呢?”
也许不太贴切,但是这几天中外豪杰们围绕Ruby和Rail爆发的口水战,让我不由得想起这个小故事。
前几天著名大嘴Joel Spolsky在自己的一亩三分地里对Ruby进行了FUD性的攻击,引发互联网上一片口水战,Ruby之父matz和Rails之父DHH都卷入其中。似乎是要与此相呼应,在国内技术论坛上,这几天围绕Ruby的争论也突然攀登新高峰了。国外的大气候和国内的小气候都有共同特点,就是站在传统技术立场上的人对于RoR的火爆看不下去了,首先站出来发难,从而引发Ruby支持者们的回击,然后双方厮杀在一起,连带旁边相干不相干的看热闹的、拉架的、含沙射影的、慷慨激昂的,瞬间就浩浩荡荡,横无际涯了。而争论来争论去,无非还是Ruby的性能问题、可用性问题、前景问题,等等等等。
可能是老生常谈了,但倒R派的观点让我想起多年前我们这些C++ fans对Java的鄙视言论。那个时候C++程序员们说,Java只能用来在页面上用applet作一些可笑的小动画,Java只能对对火柴棍排序,Java慢得像牛车,Java有内存泄露,Java狂耗内存,Java愚蠢的弱类型容器可以把鲸鱼装进一个笔筒,Java居然没有指针,Java做不了系统程序设计,Java写不了操作系统,Java解决不了我手头的超超级复杂的巨牛无比的难题,诸如此类,不一而足。冠冕堂皇的理由可以找出一大箩筐,但大皮袄下面无非就是一个“私”字而已。骨子里的想法是,我费了好大的牛劲才混了个C++三品顶戴,你Java一闹腾,就把我的似锦前程给搅黄了,怎能不妒火中烧,羞愤交加?
可是这些年过去了,当时我们吐那点酸水起了什么作用了吗?Java统治了企业计算,统治了手机应用开发,统治了大学教育。不但如此,Java在开源领域里也如日中天,接Eclipse之威在桌面应用中也占了一座大山头。一些传统上属于系统程序的项目,比如编译器、语法分析器、高性能的服务器软件等等,也大量转用Java开发。不错,Java还是不能用来写F-22战斗机的火控系统,但是这跟我们这些坐在cubic里写民用软件的家伙有个鬼的关系!人们对于简单、标准化和生产率的要求不可阻遏地突破了早期对Java筑起的FUD防线。面对Java的空前绝后的成功,我们这些当年曾经对革命力量翻白眼吐舌头的家伙,在沉默的面对现实之后,已经完成了一次观念上的涤荡。我们已经认识到,技术的发展趋势是不以个人利益为转移的,干这行就要有顺应技术大潮的勇气,要有不断破旧立新的魄力。我觉得我已经放下了曾经有的那种盲目的固执和一厢情愿。
然而时间没过多久,随着Java成长和腾达起来的一代人(其实不少也就是我的同龄人),又开始重蹈覆辙。面对以Ruby为代表的新兴动态语言的蓬勃发展,他们也有点坐不住了。靠革命起家的人最怕革命,当年的下里巴人翻身做主了,摇身一变成阔佬了,就开始对新的革命力量摆谱使脸色,甚至以FUD战术加以弹压了。与当年如出一辙,手段还是以攻为守,情绪还是慷慨激昂,笔法还是义正言辞,什么Ruby未经验证啦,什么Ruby性能低劣啦,什么Rails可扩展性不佳啦,什么Ruby不能解决“大型的”、“复杂的”、“企业级的”、“高性能的”问题啦。最要命的是,哪怕自己90%的时间不过是在字符串处理,这些阔佬们也还是一致宣称自己做着世界一流的、大型的、复杂的、企业级的、非Java不可、没Java不行、没Java就要上吊抹脖子跳楼挖坑的巨牛无比的大项目,听着让人心惊肉跳兼之无比崇敬。你说Java还能火几年?我说怎么也得5年!5年?那是上升期!少说十年,后面还有平台期。你还别不服,反正我退休之前Java说什么也别想凉下来,谁也别想威胁我的顶戴花翎。企业级啊,架构师啊,经验啊,高手啊,我混成这样我容易吗我?谁冒出来我就跟谁急,我就用口水淹死他!
可惜,这些大话对于我这种记性不幸没那么差劲的人来说,太似曾相识了,让我一眼就看出这言论背后的“私”字来。想来也真是轮回,当年我们C++这一批人放下的东西,原来你们Java这一批人还抱着呢。不过,技术的大潮真的是后浪推前浪,往后看吧,我相信,当年C++挡不住的东西,今天Java也挡不住。大趋势已经摆在这了,接不接受、什么时候接受,那是个人的问题,但是总体的发展是无可逆转的。
Ruby的兴起,其实只不过是一个积累了几十年的技术趋势的能量释放。世界上第二个程序设计语言Lisp及其后续家族成员都是最最动态的语言。早在七十年代,伴随着图形界面的出现,Smalltalk就以其纯粹的面向对象和纯粹的动态性获得有识之士的认可。自1986年代Perl出现以来,大量开发者就认识到,动态语言开发效率高,限制少,能够自由的表达思想,轻松完成在传统语言中非常困难的工作。很多人都预言动态语言迟早会成为主流。然而在整个1990年代,无论是计算机硬件条件还是软件工程的水平,都还不够成熟,再加上Perl自身存在一些问题,动态语言始终只是作为主流语言的一种有力的补充而存在。2000年之后,PHP大流行,在Web开发领域三分天下有其一。但是PHP本身完全是为Web而做,当扩展到其他领域时,就凸显出先天不足的劣势,因此地主稳坐,霸业难成。直到现在,无论是硬件条件、软件开发的方法,还是客观应用环境都逐渐成熟,在这个时候,Ruby借Rails框架赢得广泛关注,当然不是偶然的现象。在TIOBE全球程序设计语言排名表中,Ruby排名一年间跳升15位,而根据O’Reilly公司对于图书市场的统计,Ruby相关书籍的销量在2005年增长15倍的基础之上,今年又增长了7倍,已经超过Python和Perl。再看看是谁在关注Ruby,抛开一手把Ruby炒热的“Pragmatic Programmer二人组”Dave Thomas和Andy Hunt不说,一大批编程老枪都在尝试或者已经转向Ruby,这其中的著名人物包括Robert C. Martin、Martin Fowler、Bruce Tate等。如果这些还不够令人印象深刻的话,我们应该注意一下近期有关Ruby的一些事件。最近Sun雇用了开源项目JRuby的两名主要开发者,让他们可以全职开发JRuby,从而正式将Ruby语言搬上JVM。同时,微软也在上个月的一次有关.NET语言的技术会议上邀请RubyCLR的主要开发者John Lam发表演讲,外界传言他将加入IronPython开发者Jim Hugunin所在的团队,从而加速Ruby for .NET的开发进程。另一个致力于Rich Internet Application的软件巨头Adobe于几天前刚刚发布了用以将Flex 2.0整合到Ruby on Rails中的SDK。对于那些整天盯着巨头们脸色行事的人来说,这些消息就算不是金口玉言,至少也是明确的迹象了吧。
然而,比上面一切都更为重要的是,今天的世界已经变了,已经不是15年前C++统治一切的那个世界,也不是10年前Java中彩票的那个世界,甚至也不是5年前Visual Basic狂练葵花宝典的那个年代。互联网改变了太多的东西,经济形态和公司业务的形式和途径都已经并且仍在发生迅速的、根本性的变化。开放、互联、敏捷、整合、平等、自由、高速、专业,所有这些给我们带来了新的经济运行模式,也对软件的开发提出了新的要求。Ruby,以及Ruby所代表的一类动态的、自由的程序设计语言和开发思想已经迎来了它们的时代,它们将和其他的科技一起,在下一个轮回中改变我们的工作,改变我们的生活,改变我们的观念,直到下下个轮回将它们扫进历史的功劳簿中为止。
所以,该放下的时候,就勇敢地放下吧。当然,如果想再跟发展大势打一打,那就打一打,反正在技术进步的路上,保守的一方终究是要被解决的。