不要學(xué)習(xí)“網(wǎng)紅”編程語(yǔ)言
來(lái)源 | infoQ、編譯 | 核子可樂(lè)、Tina
Ruby on Rails 的衰落是毋庸置疑的,而且今年以來(lái)的衰落速度比以往更快。
先看 Google Trends,雖然不太科學(xué)、但至少能說(shuō)明一點(diǎn)問(wèn)題。無(wú)論是 Ruby 還是 Ruby on Rails,多年來(lái)在 Google Trends 都處于一路走低的狀態(tài)。

如上圖所示,二者先是急劇上漲、然后是一路橫盤(pán)。但從 2016 年開(kāi)始明顯下跌后,它們的命運(yùn)就基本已經(jīng)注定了。不知道為什么 2020 年這里又有一次斷崖式下降,這可能只是 Google 數(shù)據(jù)出了問(wèn)題。但不管怎么說(shuō),狀態(tài)不好是肯定的。
十年前,極受追捧
Ruby 是一種用于面向?qū)ο缶幊痰慕忉屝阅_本語(yǔ)言,核心優(yōu)勢(shì)就是允許開(kāi)發(fā)者快速構(gòu)建并啟動(dòng)應(yīng)用程序。
Ruby 語(yǔ)言本身采用大量英語(yǔ)單詞,所以上手難度更低。但由于可擴(kuò)展性不佳,Ruby 應(yīng)用程序的運(yùn)行速度往往不及其他語(yǔ)言。
這門(mén)編程語(yǔ)言由 Yukihiro Matsumoto 于 1993 年開(kāi)始創(chuàng)建,于 1995 年正式發(fā)布。雖然和 Java 基本上可以算是同時(shí)期(Java 誕生于 1993 年,正式發(fā)布于 1995 年),但在 2004 年 David Heinemeier Hansson 發(fā)布 Ruby on Rails 之前,Ruby 一直非常小眾。
Ruby on Rails (也簡(jiǎn)稱(chēng)為 Rails)是一個(gè)使用 Ruby 編程語(yǔ)言的開(kāi)源 Web 應(yīng)用程序框架,曾一度大受歡迎,Rails 的出現(xiàn)極大的推動(dòng)了 Ruby 語(yǔ)言的發(fā)展。
在 2004 年之后,Rails 社區(qū)貢獻(xiàn)出了廣泛的插件(Gems)、書(shū)籍(光 2006 年就有 10 本關(guān)于 Rails 的書(shū)籍問(wèn)世)、培訓(xùn)、一個(gè)主要會(huì)議(RubyConf)等等。隨著 Rails 風(fēng)頭正勁,甚至連最保守的公司都開(kāi)始考慮采用 Ruby。
《From Java to Ruby》一書(shū)的作者 Bruce Tate,曾是一位 Java 程序員,在當(dāng)時(shí)也變成了一名 Ruby 狂熱分子,他曾在 2007 年提出一個(gè)“木馬計(jì)(Trojan Horse)”的方法,讓一些領(lǐng)路人在保守的公司里為 Ruby 樹(shù)立威望:
先找到一個(gè)不那么令人興奮的技術(shù)問(wèn)題。 私底下使用 Ruby 解決此問(wèn)題,盡可能在管理層發(fā)現(xiàn)不了的情況下工作。 創(chuàng)建一個(gè)草根階級(jí)聯(lián)盟,通過(guò)培養(yǎng)文化的方式培養(yǎng) Ruby 布道者。
“實(shí)現(xiàn)一個(gè)試點(diǎn)項(xiàng)目,用這個(gè)策略來(lái)暗度陳倉(cāng),在眼皮底下把 Ruby 整合進(jìn)系統(tǒng)。剩下的工作讓 Ruby 完成就可以了。不過(guò),為了建立你的試點(diǎn)項(xiàng)目,你首先需要?jiǎng)?chuàng)建一個(gè)案例,讓 Ruby 看起來(lái)足夠吸引眼球,從而讓大家甘心冒這個(gè)風(fēng)險(xiǎn)。
接著,你得在你的試點(diǎn)策略里面添筋加骨。鑒于人們對(duì)采用一門(mén)新語(yǔ)言與生俱來(lái)的抵抗力,你要選擇一個(gè)不給疑慮留任何余地的方法。最終,你得愿意為成功建立制度根基?!?/p>
從 2000 年開(kāi)始,到該時(shí)代中期,Ruby 受歡迎程度在 TIOBE 指數(shù)評(píng)級(jí)中逐漸達(dá)到頂峰,人們認(rèn)為 Ruby 還有它的旗艦級(jí) Rails 框架,可以大大提高生產(chǎn)力。不少現(xiàn)在的大型網(wǎng)站,比如 Twitter 和 Groupon 在當(dāng)時(shí)都是這門(mén)框架的使用者之一。
只不過(guò),人們也逐漸發(fā)現(xiàn)它存在一些致命缺陷。Groupon 工程師 Sean McCullough 在 2013 年的一個(gè)技術(shù)會(huì)議上講道,“要在 Groupon.com 整個(gè)網(wǎng)頁(yè)上更改一種顏色,估計(jì)需要三個(gè)月的時(shí)間。這導(dǎo)致我們無(wú)法以需要的速度進(jìn)行迭代?!?/p>
Groupon 工程師不得不研究 Ruby on Rails 的一系列替代方案,最終選擇了流行的 Node.js,并花了一年時(shí)間進(jìn)行遷移。Groupon 還表示,更換之后頁(yè)面加載速度得到了顯著提升,高達(dá) 50%。
從 2008 年引進(jìn),到 2013 年替換掉,Groupon 在這個(gè)坑里掙扎了 5 年。而在同一時(shí)期,備受擴(kuò)展性問(wèn)題困擾后,Twitter 也放棄了 Ruby on Rails。
現(xiàn)在,Ruby 確實(shí)不咋行了
接下來(lái),讓我們一起從課程、實(shí)踐、社區(qū)情況來(lái)看看當(dāng)年盛極一時(shí)的網(wǎng)紅編程語(yǔ)言發(fā)展現(xiàn)狀。
現(xiàn)在,很多朋友可能注意到,專(zhuān)門(mén)的 Ruby 播客或者新聞網(wǎng)站已經(jīng)越來(lái)越少。除了一個(gè)每周通訊網(wǎng)站(https://rubyweekly.com/)還能保持高質(zhì)量,其他的真就沒(méi)什么了。
這就突出了 Ruby 語(yǔ)言正陷入惡性循環(huán):因?yàn)槿狈玫男畔⒑徒坛?,新手開(kāi)發(fā)者就不愿選擇它;而因?yàn)闆](méi)有足夠的新人,市場(chǎng)對(duì)信息和教程的需求也隨之減少。
因?yàn)樵趧趧?dòng)力市場(chǎng)上不被看好,編碼訓(xùn)練機(jī)構(gòu) Coding Dojo 決定從 2017 年開(kāi)始將 Ruby 課程從全美六大學(xué)區(qū)內(nèi)盡數(shù)撤下,同時(shí)增加 Java 的全棧開(kāi)發(fā)課程。
Coding Dojo 課程負(fù)責(zé)人 Speros Misirlakis 曾表示,“我們一直在關(guān)注各地市場(chǎng)、把握技術(shù)需求,并發(fā)現(xiàn) Java 的人氣位居榜首。相比之下,Ruby on Rails 在招聘熱度、市場(chǎng)需求和開(kāi)發(fā)者關(guān)注度等方面都遠(yuǎn)遠(yuǎn)落后?!?/p>
到現(xiàn)在,以 Udemy 為例,截至 2022 年 3 月,上面只有 109 種關(guān)于 Ruby(on Rails)的課程。
但 Python、Java 和 JavaScript 等語(yǔ)言的課程量都超過(guò) 10000 種。目前質(zhì)量最高的 Rails 課程之一最后公開(kāi)更新是在 2020 年。當(dāng)然,go-rails 等其他服務(wù)也在提供相關(guān)課程,但 Ruby 衰落的趨勢(shì)已經(jīng)非常明顯。
十年前,Ruby 背后還有高度活躍的社區(qū),比如 GitHub、熱門(mén) repo?,F(xiàn)在情況也發(fā)生了變化,支持并使用 Ruby 的開(kāi)發(fā)者越來(lái)越少,曾被經(jīng)常提起的 gems 服務(wù),現(xiàn)在基本屬于無(wú)人問(wèn)津。再舉個(gè)典型的例子,Rails 的 Azure 支持。
對(duì)微軟 Azure 的支持狀態(tài)可謂一團(tuán)糟。相關(guān)一部分成果無(wú)人維護(hù),過(guò)去幾年來(lái)也毫無(wú)動(dòng)靜。大量問(wèn)題被提出之后就長(zhǎng)期擱置。
例如,Azure 官方庫(kù)中有 22 個(gè)問(wèn)題仍在開(kāi)放,其中的依賴(lài)性問(wèn)題大多源自 Nokogiri 庫(kù)版本過(guò)老。我知道這例子有點(diǎn)極端,但它確實(shí)能反映出生存狀態(tài)的一個(gè)側(cè)面。
最近十年來(lái),現(xiàn)代 SaaS 方案中的 API 幾乎都不提供官方 Ruby 客戶(hù)端或 SDK。
形成鮮明對(duì)比的是,Java、JavaScript、Python 甚至是 Rust 可都在支持之列。
Slack 沒(méi)有官方的 Ruby 客戶(hù)端或者 SDK(其他語(yǔ)言都有),Dropbox 也一樣。之前提到過(guò),Azure 倒是有,但基本沒(méi)有維護(hù)。
在所有 HubSpot API 實(shí)施意見(jiàn)中,Ruby 版本的人氣(根據(jù) stars 和 forks 判斷)和更新頻率都是最低的。像 Monday、Teamleader 或者 Notion 這樣的現(xiàn)代項(xiàng)目管理方案都沒(méi)提到過(guò) Ruby。
這里要澄清一下,我舉的都是不支持 Ruby 的 SaaS 項(xiàng)目。支持 Ruby 的也不少,從 AWS 到 Square,都提供一流且維護(hù)良好的 gems 供用戶(hù)選擇。
雖然沒(méi)對(duì) Ruby gems、repo、待解決問(wèn)題等量化指標(biāo)做過(guò)數(shù)據(jù)分析,但單是瀏覽一下基本情況就已經(jīng)看得出相當(dāng)負(fù)面的趨勢(shì)。而且從部分 SaaS 服務(wù)上看,Ruby 確實(shí)不太受待見(jiàn)。
2010 年時(shí) Ruby 的 SDK 和 API 客戶(hù)端都是最亮眼的,之所以出色,是因?yàn)楫?dāng)時(shí)的 API 與 SaaS 開(kāi)發(fā)團(tuán)隊(duì)往往會(huì)自己動(dòng)手編寫(xiě) Ruby 版本,所以客戶(hù)端質(zhì)量自然不在一個(gè)層面上。但近年來(lái)情況大變,而相應(yīng)的社區(qū)版本要么維護(hù)不善、要么壓根沒(méi)有。
關(guān)注大型 SaaS 或者軟件公司,我們會(huì)發(fā)現(xiàn)運(yùn)行在 Ruby(on Rails)上的成果基本都有點(diǎn)年頭了。
特別是在 2020 年之后,已經(jīng)很難找到任何立足 Rails 構(gòu)建的成功 SaaS 產(chǎn)品。GitHub 誕生在 2008 年,Shopify 是 2006 年,Twitter 是 2006 年,Groupon 是 2008 年,Zendesk 是 2007 年,Airbnb 是 2008 年,F(xiàn)iverr 則是 2010 年。
我能想到的誕生于 2010 年之后、而且運(yùn)行在 Ruby 或 Rails 上的成功廠商就只有 Stripe(2011 年)和 Gitlab(2014 年)。
在比較流行的 Ruby 開(kāi)源項(xiàng)目方面,我能想到的也只有 Discourse 和 Mastodon。但這里確實(shí)也有幸存者偏差的因素:成功的企業(yè)需要經(jīng)歷漫長(zhǎng)的磨練才會(huì)顯露,所以不管用不用 Rails,成功的 SaaS 都得用時(shí)間證明自己。
2010 年那會(huì) Rails 的成功催生出使用模型視圖控制器(MVC)架構(gòu)建立快速應(yīng)用開(kāi)發(fā)(RAD)框架的市場(chǎng)需求??梢钥隙ǖ卣f(shuō),Rails 這類(lèi)框架確實(shí)擁有比較明確的市場(chǎng)定位,但還不至于火到那個(gè)程度。
這些架構(gòu)的解決能力和適用范圍都比較差,所以無(wú)論使用哪種語(yǔ)言,Rails 本身的流行度下降甚至在根源上來(lái)自 MVC 和 RAD 方法的逐漸衰落。
2021 年 StackOverflow 的調(diào)查結(jié)果也支持了這樣的判斷:Ruby 與 Rails 在各項(xiàng)評(píng)比中基本都處于象限底端。
Ruby 得到的“贊”和“踩”基本相當(dāng)。很遺憾,StackOverflow 并不提供可供訪問(wèn)的趨勢(shì)指標(biāo),倒是有一款基于標(biāo)簽活動(dòng)的獨(dú)立工具。
經(jīng)過(guò)查閱,發(fā)現(xiàn) Ruby 這幾十年來(lái)持續(xù)下滑、而且身處底部象限。TIOBE 指數(shù)也給出了類(lèi)似的結(jié)論,Ruby 穩(wěn)定保持著每況愈下的生存狀態(tài),逐漸落后于其他語(yǔ)言。
請(qǐng)謹(jǐn)慎選擇學(xué)習(xí)
雖然徹底消亡并不容易,就像 Pascal、COBOL 乃至 Perl 當(dāng)下也仍然存在一樣。Ruby 的情況要好一些,這艘船還遠(yuǎn)遠(yuǎn)沒(méi)沉、只是速度越來(lái)越慢。
不過(guò)人氣并不能直接決定語(yǔ)言的質(zhì)量。畢竟如果用人氣來(lái)衡量,那 IE 6 將是人類(lèi)歷史上最好的網(wǎng)絡(luò)瀏覽器。
Ruby 仍然保持著 2005 年時(shí)的出色開(kāi)發(fā)體驗(yàn),而且體驗(yàn)只會(huì)越來(lái)越好。Rails 也仍是實(shí)現(xiàn)原型設(shè)計(jì)演示的好方法,能幫助大家在幾天之內(nèi)更穩(wěn)妥地構(gòu)建起最小可行性產(chǎn)品。
那我們是不是不該在職業(yè)規(guī)劃中學(xué)習(xí) Ruby 或者 Rails?話(huà)可不能這么說(shuō)。市場(chǎng)對(duì)于 Rails 和 Ruby 開(kāi)發(fā)者的需求仍然相當(dāng)旺盛,或者說(shuō)市場(chǎng)對(duì)任何語(yǔ)言的開(kāi)發(fā)者都需求旺盛。自 2008 年以來(lái)出現(xiàn)的一切 SaaS,在未來(lái)幾十年中都需要新的開(kāi)發(fā)者加入進(jìn)來(lái)。
但我們也要考慮到,在 Ruby 陷入萎縮的同時(shí),Node.js 開(kāi)始快速流行。在過(guò)去的十年里,開(kāi)發(fā)領(lǐng)域的創(chuàng)新成果可謂百花齊放。HTML5、Node.js、Angular 和 React 已經(jīng)在前端和后端遍地開(kāi)花。
JavaScript 與 Python 在市場(chǎng)需求穩(wěn)定性上也越來(lái)越具有優(yōu)勢(shì)。Python 是過(guò)去十年中增長(zhǎng)速度最快的主流編程語(yǔ)言,目前已經(jīng)擴(kuò)展到 Web 開(kāi)發(fā)、數(shù)據(jù)科學(xué)、科學(xué)編程等多個(gè)領(lǐng)域。Stack Overflow 的調(diào)查也顯示出,JavaScript 已經(jīng)成為全球應(yīng)用最廣泛的語(yǔ)言。
另一方面,很多技術(shù)都會(huì)有自然的生命周期。開(kāi)發(fā)者們的關(guān)注和精力就那么多,流向了其他地方、自然也就不再流向這里。
所以這里還是想提醒大家,如果 Ruby 繼續(xù)保持過(guò)去十年來(lái)的衰落趨勢(shì),那各位一定要認(rèn)真考慮學(xué)習(xí)這門(mén)語(yǔ)言的風(fēng)險(xiǎn)——也許 Ruby 終有一天也會(huì)像 COBOL 或者 Perl 那樣成為時(shí)代的眼淚。
參考鏈接:
https://berk.es/2022/03/08/the-waning-of-ruby-and-rails/
https://www.infoq.cn/article/From-Java-to-Ruby--Strategies
https://www.datacenterknowledge.com/archives/2013/12/06/need-speed-groupon-migrated-node-js
https://siliconangle.com/2013/11/11/how-groupon-web-traffic-moves-from-legacy-ruby-on-rails-to-node-js/
