不要學(xué)習(xí)“網(wǎng)紅”編程語言
以下內(nèi)容來自公眾號逆鋒起筆,關(guān)注每日干貨及時送達(dá)
?來源 | infoQ、編譯 | 核子可樂、Tina
Ruby on Rails 的衰落是毋庸置疑的,而且今年以來的衰落速度比以往更快。
先看 Google Trends,雖然不太科學(xué)、但至少能說明一點問題。無論是 Ruby 還是 Ruby on Rails,多年來在 Google Trends 都處于一路走低的狀態(tài)。

如上圖所示,二者先是急劇上漲、然后是一路橫盤。但從 2016 年開始明顯下跌后,它們的命運就基本已經(jīng)注定了。不知道為什么 2020 年這里又有一次斷崖式下降,這可能只是 Google 數(shù)據(jù)出了問題。但不管怎么說,狀態(tài)不好是肯定的。
十年前,極受追捧
Ruby 是一種用于面向?qū)ο缶幊痰慕忉屝阅_本語言,核心優(yōu)勢就是允許開發(fā)者快速構(gòu)建并啟動應(yīng)用程序。
Ruby 語言本身采用大量英語單詞,所以上手難度更低。但由于可擴(kuò)展性不佳,Ruby 應(yīng)用程序的運行速度往往不及其他語言。
這門編程語言由 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 布道者。
“實現(xiàn)一個試點項目,用這個策略來暗度陳倉,在眼皮底下把 Ruby 整合進(jìn)系統(tǒng)。剩下的工作讓 Ruby 完成就可以了。不過,為了建立你的試點項目,你首先需要創(chuàng)建一個案例,讓 Ruby 看起來足夠吸引眼球,從而讓大家甘心冒這個風(fēng)險。
接著,你得在你的試點策略里面添筋加骨。鑒于人們對采用一門新語言與生俱來的抵抗力,你要選擇一個不給疑慮留任何余地的方法。最終,你得愿意為成功建立制度根基?!?/span>
從 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)行迭代?!?/span>
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 確實不咋行了
接下來,讓我們一起從課程、實踐、社區(qū)情況來看看當(dāng)年盛極一時的網(wǎng)紅編程語言發(fā)展現(xiàn)狀。
現(xiàn)在,很多朋友可能注意到,專門的 Ruby 播客或者新聞網(wǎng)站已經(jīng)越來越少。除了一個每周通訊網(wǎng)站(https://rubyweekly.com/)還能保持高質(zhì)量,其他的真就沒什么了。
這就突出了 Ruby 語言正陷入惡性循環(huán):因為缺乏好的信息和教程,新手開發(fā)者就不愿選擇它;而因為沒有足夠的新人,市場對信息和教程的需求也隨之減少。
因為在勞動力市場上不被看好,編碼訓(xùn)練機構(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)落后。”
到現(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?,F(xiàn)在情況也發(fā)生了變化,支持并使用 Ruby 的開發(fā)者越來越少,曾被經(jīng)常提起的 gems 服務(wù),現(xiàn)在基本屬于無人問津。再舉個典型的例子,Rails 的 Azure 支持。
對微軟 Azure 的支持狀態(tài)可謂一團(tuán)糟。相關(guān)一部分成果無人維護(hù),過去幾年來也毫無動靜。大量問題被提出之后就長期擱置。
例如,Azure 官方庫中有 22 個問題仍在開放,其中的依賴性問題大多源自 Nokogiri 庫版本過老。我知道這例子有點極端,但它確實能反映出生存狀態(tài)的一個側(cè)面。
最近十年來,現(xiàn)代 SaaS 方案中的 API 幾乎都不提供官方 Ruby 客戶端或 SDK。
形成鮮明對比的是,Java、JavaScript、Python 甚至是 Rust 可都在支持之列。
Slack 沒有官方的 Ruby 客戶端或者 SDK(其他語言都有),Dropbox 也一樣。之前提到過,Azure 倒是有,但基本沒有維護(hù)。
在所有 HubSpot API 實施意見中,Ruby 版本的人氣(根據(jù) stars 和 forks 判斷)和更新頻率都是最低的。像 Monday、Teamleader 或者 Notion 這樣的現(xiàn)代項目管理方案都沒提到過 Ruby。
這里要澄清一下,我舉的都是不支持 Ruby 的 SaaS 項目。支持 Ruby 的也不少,從 AWS 到 Square,都提供一流且維護(hù)良好的 gems 供用戶選擇。
雖然沒對 Ruby gems、repo、待解決問題等量化指標(biāo)做過數(shù)據(jù)分析,但單是瀏覽一下基本情況就已經(jīng)看得出相當(dāng)負(fù)面的趨勢。而且從部分 SaaS 服務(wù)上看,Ruby 確實不太受待見。
2010 年時 Ruby 的 SDK 和 API 客戶端都是最亮眼的,之所以出色,是因為當(dāng)時的 API 與 SaaS 開發(fā)團(tuán)隊往往會自己動手編寫 Ruby 版本,所以客戶端質(zhì)量自然不在一個層面上。但近年來情況大變,而相應(yīng)的社區(qū)版本要么維護(hù)不善、要么壓根沒有。
關(guān)注大型 SaaS 或者軟件公司,我們會發(fā)現(xiàn)運行在 Ruby(on Rails)上的成果基本都有點年頭了。
特別是在 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 年之后、而且運行在 Ruby 或 Rails 上的成功廠商就只有 Stripe(2011 年)和 Gitlab(2014 年)。
在比較流行的 Ruby 開源項目方面,我能想到的也只有 Discourse 和 Mastodon。但這里確實也有幸存者偏差的因素:成功的企業(yè)需要經(jīng)歷漫長的磨練才會顯露,所以不管用不用 Rails,成功的 SaaS 都得用時間證明自己。
2010 年那會 Rails 的成功催生出使用模型視圖控制器(MVC)架構(gòu)建立快速應(yīng)用開發(fā)(RAD)框架的市場需求??梢钥隙ǖ卣f,Rails 這類框架確實擁有比較明確的市場定位,但還不至于火到那個程度。
這些架構(gòu)的解決能力和適用范圍都比較差,所以無論使用哪種語言,Rails 本身的流行度下降甚至在根源上來自 MVC 和 RAD 方法的逐漸衰落。添加微信studyingJava,免費領(lǐng)取你需要的任何學(xué)習(xí)資料
2021 年 StackOverflow 的調(diào)查結(jié)果也支持了這樣的判斷:Ruby 與 Rails 在各項評比中基本都處于象限底端。
Ruby 得到的“贊”和“踩”基本相當(dāng)。很遺憾,StackOverflow 并不提供可供訪問的趨勢指標(biāo),倒是有一款基于標(biāo)簽活動的獨立工具。
經(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ā)體驗,而且體驗只會越來越好。Rails 也仍是實現(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/
