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

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