http://blog.csdn.net/myan/archive/2006/09/25/1281151.aspx
相信很多人都聽過一個禪宗故事,說是兩個僧人趕路,趟過一條小河的時候,看到一個漂亮的少婦困于其中,向他們呼救。其中一個有心施以援手,但想到佛家的色戒,便猶豫起來,不知如何是好。可另一個和尚卻大大咧咧地沖過去,抱起少婦,趟過小河。于是前者的心里就很不舒服,一路上悶悶不語,后來實在忍不住,就問自己的同伴,既然身為佛門中人,怎能不顧清規(guī)戒律,如此輕薄。然而那位和尚卻回過頭來,淡淡地說:“我已經(jīng)把她放下了,你還抱著呢?”
也許不太貼切,但是這幾天中外豪杰們圍繞Ruby和Rail爆發(fā)的口水戰(zhàn),讓我不由得想起這個小故事。
前幾天著名大嘴Joel Spolsky在自己的一畝三分地里對Ruby進(jìn)行了FUD性的攻擊,引發(fā)互聯(lián)網(wǎng)上一片口水戰(zhàn),Ruby之父matz和Rails之父DHH都卷入其中。似乎是要與此相呼應(yīng),在國內(nèi)技術(shù)論壇上,這幾天圍繞Ruby的爭論也突然攀登新高峰了。國外的大氣候和國內(nèi)的小氣候都有共同特點,就是站在傳統(tǒng)技術(shù)立場上的人對于RoR的火爆看不下去了,首先站出來發(fā)難,從而引發(fā)Ruby支持者們的回?fù)?,然后雙方廝殺在一起,連帶旁邊相干不相干的看熱鬧的、拉架的、含沙射影的、慷慨激昂的,瞬間就浩浩蕩蕩,橫無際涯了。而爭論來爭論去,無非還是Ruby的性能問題、可用性問題、前景問題,等等等等。
可能是老生常談了,但倒R派的觀點讓我想起多年前我們這些C++ fans對Java的鄙視言論。那個時候C++程序員們說,Java只能用來在頁面上用applet作一些可笑的小動畫,Java只能對對火柴棍排序,Java慢得像牛車,Java有內(nèi)存泄露,Java狂耗內(nèi)存,Java愚蠢的弱類型容器可以把鯨魚裝進(jìn)一個筆筒,Java居然沒有指針,Java做不了系統(tǒng)程序設(shè)計,Java寫不了操作系統(tǒng),Java解決不了我手頭的超超級復(fù)雜的巨牛無比的難題,諸如此類,不一而足。冠冕堂皇的理由可以找出一大籮筐,但大皮襖下面無非就是一個“私”字而已。骨子里的想法是,我費(fèi)了好大的牛勁才混了個C++三品頂戴,你Java一鬧騰,就把我的似錦前程給攪黃了,怎能不妒火中燒,羞憤交加?
可是這些年過去了,當(dāng)時我們吐那點酸水起了什么作用了嗎?Java統(tǒng)治了企業(yè)計算,統(tǒng)治了手機(jī)應(yīng)用開發(fā),統(tǒng)治了大學(xué)教育。不但如此,Java在開源領(lǐng)域里也如日中天,接Eclipse之威在桌面應(yīng)用中也占了一座大山頭。一些傳統(tǒng)上屬于系統(tǒng)程序的項目,比如編譯器、語法分析器、高性能的服務(wù)器軟件等等,也大量轉(zhuǎn)用Java開發(fā)。不錯,Java還是不能用來寫F-22戰(zhàn)斗機(jī)的火控系統(tǒng),但是這跟我們這些坐在cubic里寫民用軟件的家伙有個鬼的關(guān)系!人們對于簡單、標(biāo)準(zhǔn)化和生產(chǎn)率的要求不可阻遏地突破了早期對Java筑起的FUD防線。面對Java的空前絕后的成功,我們這些當(dāng)年曾經(jīng)對革命力量翻白眼吐舌頭的家伙,在沉默的面對現(xiàn)實之后,已經(jīng)完成了一次觀念上的滌蕩。我們已經(jīng)認(rèn)識到,技術(shù)的發(fā)展趨勢是不以個人利益為轉(zhuǎn)移的,干這行就要有順應(yīng)技術(shù)大潮的勇氣,要有不斷破舊立新的魄力。我覺得我已經(jīng)放下了曾經(jīng)有的那種盲目的固執(zhí)和一廂情愿。
然而時間沒過多久,隨著Java成長和騰達(dá)起來的一代人(其實不少也就是我的同齡人),又開始重蹈覆轍。面對以Ruby為代表的新興動態(tài)語言的蓬勃發(fā)展,他們也有點坐不住了。靠革命起家的人最怕革命,當(dāng)年的下里巴人翻身做主了,搖身一變成闊佬了,就開始對新的革命力量擺譜使臉色,甚至以FUD戰(zhàn)術(shù)加以彈壓了。與當(dāng)年如出一轍,手段還是以攻為守,情緒還是慷慨激昂,筆法還是義正言辭,什么Ruby未經(jīng)驗證啦,什么Ruby性能低劣啦,什么Rails可擴(kuò)展性不佳啦,什么Ruby不能解決“大型的”、“復(fù)雜的”、“企業(yè)級的”、“高性能的”問題啦。最要命的是,哪怕自己90%的時間不過是在字符串處理,這些闊佬們也還是一致宣稱自己做著世界一流的、大型的、復(fù)雜的、企業(yè)級的、非Java不可、沒Java不行、沒Java就要上吊抹脖子跳樓挖坑的巨牛無比的大項目,聽著讓人心驚肉跳兼之無比崇敬。你說Java還能火幾年?我說怎么也得5年!5年?那是上升期!少說十年,后面還有平臺期。你還別不服,反正我退休之前Java說什么也別想涼下來,誰也別想威脅我的頂戴花翎。企業(yè)級啊,架構(gòu)師啊,經(jīng)驗啊,高手啊,我混成這樣我容易嗎我?誰冒出來我就跟誰急,我就用口水淹死他!
可惜,這些大話對于我這種記性不幸沒那么差勁的人來說,太似曾相識了,讓我一眼就看出這言論背后的“私”字來。想來也真是輪回,當(dāng)年我們C++這一批人放下的東西,原來你們Java這一批人還抱著呢。不過,技術(shù)的大潮真的是后浪推前浪,往后看吧,我相信,當(dāng)年C++擋不住的東西,今天Java也擋不住。大趨勢已經(jīng)擺在這了,接不接受、什么時候接受,那是個人的問題,但是總體的發(fā)展是無可逆轉(zhuǎn)的。
Ruby的興起,其實只不過是一個積累了幾十年的技術(shù)趨勢的能量釋放。世界上第二個程序設(shè)計語言Lisp及其后續(xù)家族成員都是最最動態(tài)的語言。早在七十年代,伴隨著圖形界面的出現(xiàn),Smalltalk就以其純粹的面向?qū)ο蠛图兇獾膭討B(tài)性獲得有識之士的認(rèn)可。自1986年代Perl出現(xiàn)以來,大量開發(fā)者就認(rèn)識到,動態(tài)語言開發(fā)效率高,限制少,能夠自由的表達(dá)思想,輕松完成在傳統(tǒng)語言中非常困難的工作。很多人都預(yù)言動態(tài)語言遲早會成為主流。然而在整個1990年代,無論是計算機(jī)硬件條件還是軟件工程的水平,都還不夠成熟,再加上Perl自身存在一些問題,動態(tài)語言始終只是作為主流語言的一種有力的補(bǔ)充而存在。2000年之后,PHP大流行,在Web開發(fā)領(lǐng)域三分天下有其一。但是PHP本身完全是為Web而做,當(dāng)擴(kuò)展到其他領(lǐng)域時,就凸顯出先天不足的劣勢,因此地主穩(wěn)坐,霸業(yè)難成。直到現(xiàn)在,無論是硬件條件、軟件開發(fā)的方法,還是客觀應(yīng)用環(huán)境都逐漸成熟,在這個時候,Ruby借Rails框架贏得廣泛關(guān)注,當(dāng)然不是偶然的現(xiàn)象。在TIOBE全球程序設(shè)計語言排名表中,Ruby排名一年間跳升15位,而根據(jù)O’Reilly公司對于圖書市場的統(tǒng)計,Ruby相關(guān)書籍的銷量在2005年增長15倍的基礎(chǔ)之上,今年又增長了7倍,已經(jīng)超過Python和Perl。再看看是誰在關(guān)注Ruby,拋開一手把Ruby炒熱的“Pragmatic Programmer二人組”Dave Thomas和Andy Hunt不說,一大批編程老槍都在嘗試或者已經(jīng)轉(zhuǎn)向Ruby,這其中的著名人物包括Robert C. Martin、Martin Fowler、Bruce Tate等。如果這些還不夠令人印象深刻的話,我們應(yīng)該注意一下近期有關(guān)Ruby的一些事件。最近Sun雇用了開源項目JRuby的兩名主要開發(fā)者,讓他們可以全職開發(fā)JRuby,從而正式將Ruby語言搬上JVM。同時,微軟也在上個月的一次有關(guān).NET語言的技術(shù)會議上邀請RubyCLR的主要開發(fā)者John Lam發(fā)表演講,外界傳言他將加入IronPython開發(fā)者Jim Hugunin所在的團(tuán)隊,從而加速Ruby for .NET的開發(fā)進(jìn)程。另一個致力于Rich Internet Application的軟件巨頭Adobe于幾天前剛剛發(fā)布了用以將Flex 2.0整合到Ruby on Rails中的SDK。對于那些整天盯著巨頭們臉色行事的人來說,這些消息就算不是金口玉言,至少也是明確的跡象了吧。
然而,比上面一切都更為重要的是,今天的世界已經(jīng)變了,已經(jīng)不是15年前C++統(tǒng)治一切的那個世界,也不是10年前Java中彩票的那個世界,甚至也不是5年前Visual Basic狂練葵花寶典的那個年代?;ヂ?lián)網(wǎng)改變了太多的東西,經(jīng)濟(jì)形態(tài)和公司業(yè)務(wù)的形式和途徑都已經(jīng)并且仍在發(fā)生迅速的、根本性的變化。開放、互聯(lián)、敏捷、整合、平等、自由、高速、專業(yè),所有這些給我們帶來了新的經(jīng)濟(jì)運(yùn)行模式,也對軟件的開發(fā)提出了新的要求。Ruby,以及Ruby所代表的一類動態(tài)的、自由的程序設(shè)計語言和開發(fā)思想已經(jīng)迎來了它們的時代,它們將和其他的科技一起,在下一個輪回中改變我們的工作,改變我們的生活,改變我們的觀念,直到下下個輪回將它們掃進(jìn)歷史的功勞簿中為止。
所以,該放下的時候,就勇敢地放下吧。當(dāng)然,如果想再跟發(fā)展大勢打一打,那就打一打,反正在技術(shù)進(jìn)步的路上,保守的一方終究是要被解決的。