編譯丨千山
如果你在Web開(kāi)發(fā)領(lǐng)域摸爬滾打了許久,你就會(huì)親眼見(jiàn)證眾多語(yǔ)言和框架的興起和衰落。在群星明滅中,Ruby和它的Web應(yīng)用框架Ruby on Rails就像一顆流星,在爆發(fā)出璀璨光華后又漸漸歸于寥落。
曾經(jīng),Rails的出現(xiàn)極大地推動(dòng)了Ruby語(yǔ)言的發(fā)展。在Rails風(fēng)頭正勁時(shí),即使是最保守的公司也開(kāi)始考慮采用Ruby,甚至業(yè)界提出過(guò)“Ruby將挑戰(zhàn)Java”的言論。
但現(xiàn)實(shí)是,站在十幾年后的今天回望,Ruby將取代Java的想法似乎很可笑。根據(jù)TIOBE公布的2023年1月編程語(yǔ)言排行榜,Ruby位列第十六,介于MATLAB和Object Pascal之間,同時(shí)Java的人氣依舊,排行第四。而且相較Java,Ruby在招聘熱度、市場(chǎng)需求和開(kāi)發(fā)者關(guān)注度等方面都遠(yuǎn)遠(yuǎn)落后。
TIOBE 2023年1月編程語(yǔ)言排行榜,圖源:互聯(lián)網(wǎng)
但是,暫時(shí)還是不要把Ruby和某些已經(jīng)“入土”的語(yǔ)言放在一起。盡管Ruby不再占據(jù)主導(dǎo)地位,但在編程語(yǔ)言界仍然有它的一席之地。本文試圖追溯這門(mén)語(yǔ)言的興衰,通過(guò)一批Ruby程序員之口,解析Ruby為何崛起、又如何從鼎盛期衰落,以及為什么他們認(rèn)為Ruby仍然有未來(lái)。
1、Ruby的光輝歲月:因何偉大
Ruby是一種用于面向?qū)ο缶幊痰慕忉屝阅_本語(yǔ)言,核心優(yōu)勢(shì)就是允許開(kāi)發(fā)者快速構(gòu)建并啟動(dòng)應(yīng)用程序,特別是對(duì)于前端應(yīng)用程序,這一點(diǎn)始終未變。
這門(mén)語(yǔ)言由松本行弘在1993年創(chuàng)建,1995年正式發(fā)布,基本和Java算是同期。但相比Java的“光環(huán)”,Ruby一直非常低調(diào)。
直到2004年,David Heinemeier Hansson發(fā)布了世界上首個(gè)Web MVC框架Ruby on Rails。這個(gè)小眾語(yǔ)言開(kāi)始讓世界為之驚喜。
Ruby的發(fā)展可以說(shuō)適逢其會(huì)。1994年萬(wàn)維網(wǎng)誕生,十年后,Web 2.0逐漸興起。這期間,Rails的誕生又加速了Ruby的發(fā)展。從2000年開(kāi)始,Ruby以“黑馬”之姿走出日本,受到全球開(kāi)發(fā)者的關(guān)注,其受歡迎程度在TIOBE指數(shù)評(píng)級(jí)中逐漸達(dá)到頂峰。當(dāng)時(shí),不少大型網(wǎng)站,比如Twitter和Groupon都對(duì)這門(mén)語(yǔ)言青睞有加。
松本行弘曾在接受采訪時(shí)如此評(píng)價(jià)Ruby的“盛世”:“首先是得益于Web的快速發(fā)展,幾乎所有的軟件開(kāi)發(fā)平臺(tái)都在瞄準(zhǔn)Web這個(gè)領(lǐng)域。也就是說(shuō),在Web上能夠開(kāi)發(fā)的應(yīng)用變多了,這是一個(gè)主要的背景。另外,Ruby的優(yōu)勢(shì)在于開(kāi)發(fā)效率比較高。這兩點(diǎn)結(jié)合起來(lái),我認(rèn)為就是Ruby on Rails成功的主要原因。”
歸根結(jié)底,促成Ruby崛起的因素有很多,但離不開(kāi)這門(mén)語(yǔ)言自身的特質(zhì)。
首先,開(kāi)發(fā)速度快。“Ruby on Rails仍然是小團(tuán)隊(duì)影響大團(tuán)隊(duì)的好方法,”《Programming Ruby 3.2》一書(shū)的合著者Noel Rappin說(shuō):“從零開(kāi)始構(gòu)建真正有價(jià)值的產(chǎn)品,這仍然是最快的方法之一。”尤其對(duì)于創(chuàng)業(yè)公司以及最小化可行產(chǎn)品的開(kāi)發(fā)來(lái)說(shuō),試錯(cuò)成本高,任何小小的延誤都可能招致失敗,因此Ruby on Rails就成了一種戰(zhàn)略上的選擇。
再者,使用簡(jiǎn)單。由于Ruby語(yǔ)言本身采用大量英語(yǔ)單詞,上手難度低,而且Ruby on Rails的語(yǔ)法簡(jiǎn)單明了,程序員只需編寫(xiě)少量代碼就可以解決復(fù)雜的任務(wù)。清晰的語(yǔ)法可以讓開(kāi)發(fā)人員在多個(gè)項(xiàng)目之間切換,這讓開(kāi)發(fā)和維護(hù)代碼更為便利。
最后,社區(qū)的支持。強(qiáng)大而又凝聚力的社區(qū)對(duì)Ruby的發(fā)展發(fā)揮了巨大作用。Qwoted的首席技術(shù)官Kevin Trowbridge認(rèn)為,這與語(yǔ)言本身的性質(zhì)有很大關(guān)系。“它是所有編程語(yǔ)言中最通俗易懂的,易讀易寫(xiě),這種理念不但有助于優(yōu)化產(chǎn)品,更能提升開(kāi)發(fā)人員的生產(chǎn)力和幸福感,這也解釋了為什么它有如此強(qiáng)大的社區(qū)支持。”
當(dāng)然編程語(yǔ)言界的競(jìng)爭(zhēng)向來(lái)激烈,Ruby在向前推進(jìn)的同時(shí),其他語(yǔ)言和框架也沒(méi)有停滯不前。甚至隨著時(shí)代的發(fā)展,當(dāng)互聯(lián)網(wǎng)公司逐漸更關(guān)注規(guī)模伸縮等問(wèn)題時(shí),Ruby開(kāi)始暴露出可擴(kuò)展性不佳等缺陷。
2、來(lái)自JavaScript和Python的挑戰(zhàn)
“Rails出現(xiàn)在網(wǎng)絡(luò)轉(zhuǎn)型和發(fā)展的風(fēng)口浪尖,它既受益于這種增長(zhǎng),也推動(dòng)了這種增長(zhǎng),但它不會(huì)是唯一成功的個(gè)例。這是一個(gè)既定的結(jié)論。”從2006年開(kāi)始成為Ruby開(kāi)發(fā)人員的Matthew Boeh這樣描述。
在他看來(lái),某種程度上甚至可以說(shuō)“Ruby是其自身成功的受害者”。
“因?yàn)樗纳鐓^(qū)是近年來(lái)命令行復(fù)興的主要驅(qū)動(dòng)力。在本世紀(jì)初,它向那些從未聽(tīng)說(shuō)過(guò)Lisp的人介紹了repr驅(qū)動(dòng)的開(kāi)發(fā),向那些被Perl的CPAN嚇跑的人介紹了包管理,向Java世界之外的人介紹了測(cè)試驅(qū)動(dòng)的開(kāi)發(fā)……這些在今天都是習(xí)以為常的必需品。盡管這些都不是Ruby的原創(chuàng),但都是Ruby愛(ài)好者推廣和使用的。”
如果說(shuō)現(xiàn)在有一種語(yǔ)言在Ruby曾經(jīng)統(tǒng)治的領(lǐng)域占據(jù)主導(dǎo)地位,那就是JavaScript。
“隨著JavaScript發(fā)展成為一種全棧語(yǔ)言,工程師們可以用一種語(yǔ)言,甚至一個(gè)共享代碼庫(kù)來(lái)構(gòu)建前端、后端和移動(dòng)項(xiàng)目,”New Relic開(kāi)發(fā)總監(jiān)Jemeah Sius說(shuō),“Ruby很容易學(xué)習(xí),有很高的安全標(biāo)準(zhǔn),還有一個(gè)活躍的社區(qū)。但當(dāng)有人想到全棧時(shí),他們想到的是JavaScript、Node.js、React或其他他們喜歡的框架。”
Qwoted的首席技術(shù)官Trowbridge指出,JavaScript之所以能夠填補(bǔ)這一空白,是因?yàn)樗呀?jīng)從開(kāi)發(fā)人員曾經(jīng)不屑一顧的語(yǔ)言中得到了改進(jìn)。事實(shí)上,隨著時(shí)間的推移,它變得更像Ruby了。“瀏覽器廠商在正規(guī)化、標(biāo)準(zhǔn)化、簡(jiǎn)化和增強(qiáng)方面做出了努力,”他說(shuō)。“它比過(guò)去的JavaScript好太多了。”
“當(dāng)前形式的JavaScript生態(tài)系統(tǒng)在2004年是不可想象的——它需要命令行復(fù)興和網(wǎng)絡(luò)平臺(tái)的起飛,”Boeh補(bǔ)充道。“從1999年到2009年,整整十年時(shí)間才發(fā)布了一個(gè)新的JavaScript標(biāo)準(zhǔn)版本。而現(xiàn)在是一年一次。”
與此同時(shí),Python已經(jīng)主導(dǎo)了當(dāng)今最熱門(mén)的開(kāi)發(fā)領(lǐng)域之一,人工智能和機(jī)器學(xué)習(xí)。“Python在科學(xué)界流行起來(lái),因?yàn)樗麄兛梢员纫酝斓亟⒛P秃退惴ㄔ停运萊uby領(lǐng)先了幾年”,Bhardwaj說(shuō),“另一方面,Ruby被認(rèn)為執(zhí)行緩慢,因而沒(méi)有得到更多關(guān)注。”
New Relic的Sius對(duì)此表示贊同。“當(dāng)有人想到一種多功能語(yǔ)言,可以創(chuàng)建從游戲到VR到AI到ML的所有東西時(shí),每個(gè)人都知道Python是明顯的贏家。”
3、Ruby的衰落
JavaScript和Python能在和Ruby的較量中占據(jù)上風(fēng)的因素有很多,而且并不局限于語(yǔ)言本身的特性。
Qwoted的Trowbridge說(shuō):“Python和Ruby有很多相似處,比如,它們都是動(dòng)態(tài)的解釋性腳本語(yǔ)言,適合在服務(wù)器上使用。它們運(yùn)行效率不高,所以運(yùn)行起來(lái)很昂貴,但它們都有令人難以置信的靈活性,所以對(duì)初學(xué)者來(lái)說(shuō)也很友好。”
但當(dāng)涉及到數(shù)據(jù)科學(xué)時(shí),由于TensorFlow和Keras等框架的現(xiàn)成可用性,Python無(wú)疑更有優(yōu)勢(shì)。Bhardwaj說(shuō):“這些框架使程序員更容易構(gòu)建數(shù)據(jù)可視化和編寫(xiě)機(jī)器學(xué)習(xí)程序。”
與此同時(shí),JavaScript已經(jīng)產(chǎn)生了數(shù)不勝數(shù)的庫(kù),開(kāi)發(fā)人員可以輕松下載并適應(yīng)乎所有目標(biāo)。其中許多庫(kù)都是由社區(qū)成員開(kāi)發(fā)的,這也推動(dòng)了其他人的貢獻(xiàn),就像滾雪球一樣,任何參與開(kāi)源的人都熟悉這種效應(yīng)。
在這場(chǎng)博弈中,還有一個(gè)不可忽視的大玩家在發(fā)揮著巨大的影響力,那就是主導(dǎo)了TensorFlow發(fā)布的谷歌。
谷歌將Python作為其內(nèi)部腳本語(yǔ)言,同時(shí)對(duì)提升JavaScript也表現(xiàn)得興趣盎然。Trowbridge認(rèn)為谷歌使JavaScript比以前更快,內(nèi)存效率更高。與此同時(shí),人們普遍認(rèn)為Ruby在性能上落后,部分原因是它缺乏類(lèi)似的企業(yè)贊助商和資源來(lái)改進(jìn)它。
在Ruby曾經(jīng)興盛的一些領(lǐng)域,它還沒(méi)有被其他語(yǔ)言所取代。更確切地說(shuō),整體環(huán)境已經(jīng)發(fā)生了變化,所以這些利基市場(chǎng)已經(jīng)不再被識(shí)別。Boeh表示:“我最初是為一家本地創(chuàng)意機(jī)構(gòu)的客戶(hù)制作營(yíng)銷(xiāo)網(wǎng)站和在線商店,我認(rèn)為人們很容易忽視網(wǎng)絡(luò)開(kāi)發(fā)世界的底層已經(jīng)被自動(dòng)化取代了。幾年之內(nèi),整個(gè)業(yè)務(wù)就不復(fù)存在了——當(dāng)他們可以用WordPress或Shopify做得相當(dāng)不錯(cuò)時(shí),沒(méi)有人對(duì)這樣的定制網(wǎng)站感興趣。”
4、還有未來(lái)
2023年,Ruby已經(jīng)30歲了。相較Pascal、COBOL乃至Perl這些語(yǔ)言來(lái)說(shuō),Ruby的情況要好一些,但衰落之勢(shì)似乎不可逆轉(zhuǎn)。就像遠(yuǎn)行之船,固然沒(méi)有下沉,但航速還是越來(lái)越慢。
Ruby到底還有沒(méi)有未來(lái)?面對(duì)這一質(zhì)疑,一眾開(kāi)發(fā)人員還是表現(xiàn)樂(lè)觀。
其中,電子商務(wù)巨頭Shopify是最大的原因之一,因?yàn)镽uby on Rails是它的主要開(kāi)發(fā)平臺(tái)。Bhardwaj說(shuō):“Ruby仍然是開(kāi)發(fā)電子商務(wù)應(yīng)用程序的最佳工具,因?yàn)樗哂袆?dòng)態(tài)功能和靈活性。你可以通過(guò)不同的模塊構(gòu)建應(yīng)用程序,然后再進(jìn)行修改。這讓我們更容易更新應(yīng)用以獲得更多功能。”
雖然Shopify的運(yùn)營(yíng)規(guī)模遠(yuǎn)不如谷歌,但它仍然致力于成為Ruby的贊助人,就像谷歌為其青睞的語(yǔ)言所做的那樣。例如,Shopify最近開(kāi)發(fā)了YJIT,這是一個(gè)即時(shí)編譯器,可以提高Ruby的性能,并已內(nèi)置于Ruby標(biāo)準(zhǔn)中。
Trowbridge表示,Ruby“作為一種出色的服務(wù)器端‘粘合劑’語(yǔ)言,它在Web應(yīng)用程序的服務(wù)器組件上表現(xiàn)出色,就像Rails的‘只使用API’模式一樣”。他指出,在某些方面這個(gè)角色“讓Ruby基本上回到了它的起點(diǎn)”。
“總而言之,幾乎所有與我交談過(guò)的人都相信Ruby和Ruby on Rails將繼續(xù)在許多環(huán)境中使用。就像很多語(yǔ)言雖然不再像以前那樣流行,但仍在大量使用。我認(rèn)為Java就是個(gè)典型案例,Ruby和Java將會(huì)有相似的發(fā)展軌跡。”
最后,還有很多人認(rèn)為,Ruby的社區(qū)對(duì)Ruby始終抱有溫暖和熱情,這是很難在其他語(yǔ)言中找到的。就像Lumenova AI的首席技術(shù)官Cosmin Andriescu所說(shuō):“Rails仍然有一個(gè)主要的優(yōu)勢(shì),它有大量的Ruby gem庫(kù)。相較之下,不少JavaScript框架的API不穩(wěn)定,在必要的Web開(kāi)發(fā)工具方面還不夠成熟。”
Boeh補(bǔ)充道:“現(xiàn)在Ruby世界有很多令人興奮的發(fā)展。Ruby永遠(yuǎn)不會(huì)再成為下一個(gè)重要的新事物,但我認(rèn)為它會(huì)一直存在下去。”
5、寫(xiě)在最后:到底還要不要學(xué)習(xí)Ruby
軟件的生命周期有其固有的規(guī)律,一門(mén)編程語(yǔ)言能夠堅(jiān)持走過(guò)三十年絕非易事。
“Ruby有很多特性,我覺(jué)得最為大家喜愛(ài)的是它的簡(jiǎn)潔、高效以及人性化。但同時(shí)也有開(kāi)發(fā)者不喜歡Ruby,因?yàn)橐坏?yīng)用到工作中,由于Ruby太靈活,犯錯(cuò)的概率會(huì)隨之增大。還有人說(shuō)Ruby很多東西都是在運(yùn)行時(shí)來(lái)決定的,比較麻煩。”Ruby之父松本行弘在接受采訪時(shí)曾如是說(shuō)。
他認(rèn)為,這實(shí)際是一個(gè)取舍的問(wèn)題。“從使用Ruby的角度來(lái)說(shuō),我個(gè)人認(rèn)為最重要的是靈活性,當(dāng)然容易寫(xiě)出bug的確很煩,不過(guò)我還是想要保留Ruby最重要的特性。而且,Ruby會(huì)持續(xù)改進(jìn),進(jìn)一步提高開(kāi)發(fā)效率。”
對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),是否要在職業(yè)規(guī)劃中學(xué)習(xí)Ruby,同樣是一個(gè)取舍問(wèn)題。一方面,在過(guò)去的十年中,開(kāi)發(fā)領(lǐng)域可謂百花齊放,Node.js、Angular和React在前端和后端各領(lǐng)風(fēng)騷,JavaScript在市場(chǎng)需求穩(wěn)定性上越來(lái)越具有優(yōu)勢(shì),Python后來(lái)者居上快速“殺入”主流編程語(yǔ)言圈;另一方面,不少公司對(duì)Ruby和Rails的開(kāi)發(fā)者依舊有需求,自2008年以來(lái)出現(xiàn)的一切SaaS,在未來(lái)幾十年中都需要新的開(kāi)發(fā)者加入進(jìn)來(lái)。說(shuō)到底,任何語(yǔ)言都是有應(yīng)用場(chǎng)景限制的,而場(chǎng)景的變化是非常快的。不管你學(xué)不學(xué)、用不用Ruby,你總得深入一個(gè)語(yǔ)言。深入以后,才會(huì)有進(jìn)一步衡量與評(píng)估的眼界。
參考鏈接:
??https://www.infoworld.com/article/3687219/whatever-happened-to-ruby.html??
??https://zhuanlan.zhihu.com/p/108825259?utm_source=wechat_session??