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

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