天天看點

不要學習“網紅”程式設計語言

編譯 | 核子可樂、Tina

Ruby on Rails 的衰落是毋庸置疑的,而且今年以來的衰落速度比以往更快。

先看 Google Trends,雖然不太科學、但至少能說明一點問題。無論是 Ruby 還是 Ruby on Rails,多年來在 Google Trends 都處于一路走低的狀态。

不要學習“網紅”程式設計語言

如上圖所示,二者先是急劇上漲、然後是一路橫盤。但從 2016 年開始明顯下跌後,它們的命運就基本已經注定了。不知道為什麼 2020 年這裡又有一次斷崖式下降,這可能隻是 Google 資料出了問題。但不管怎麼說,狀态不好是肯定的。

十年前,極受追捧

Ruby 是一種用于面向對象程式設計的解釋性腳本語言,核心優勢就是允許開發者快速建構并啟動應用程式。Ruby 語言本身采用大量英語單詞,是以上手難度更低。但由于可擴充性不佳,Ruby 應用程式的運作速度往往不及其他語言。

這門程式設計語言由 Yukihiro Matsumoto 于 1993 年開始建立,于 1995 年正式釋出。雖然和 Java 基本上可以算是同時期(Java 誕生于 1993 年,正式釋出于 1995 年),但在 2004 年 David Heinemeier Hansson 釋出 Ruby on Rails 之前,Ruby 一直非常小衆。

Ruby on Rails (也簡稱為 Rails)是一個使用 Ruby 程式設計語言的開源 Web 應用程式架構,曾一度大受歡迎,Rails 的出現極大的推動了 Ruby 語言的發展。在 2004 年之後,Rails 社群貢獻出了廣泛的插件(Gems)、書籍(光 2006 年就有 10 本關于 Rails 的書籍問世)、教育訓練、一個主要會議(RubyConf)等等。随着 Rails 風頭正勁,甚至連最保守的公司都開始考慮采用 Ruby。

《From Java to Ruby》一書的作者 Bruce Tate,曾是一位 Java 程式員,在當時也變成了一名 Ruby 狂熱分子,他曾在 2007 年提出一個“木馬計(Trojan Horse)”的方法,讓一些領路人在保守的公司裡為 Ruby 樹立威望:

先找到一個不那麼令人興奮的技術問題。

私底下使用 Ruby 解決此問題,盡可能在管理層發現不了的情況下工作。

建立一個草根階級聯盟,通過培養文化的方式培養 Ruby 布道者。

“實作一個試點項目,用這個政策來暗度陳倉,在眼皮底下把 Ruby 整合進系統。剩下的工作讓 Ruby 完成就可以了。不過,為了建立你的試點項目,你首先需要建立一個案例,讓 Ruby 看起來足夠吸引眼球,進而讓大家甘心冒這個風險。接着,你得在你的試點政策裡面添筋加骨。鑒于人們對采用一門新語言與生俱來的抵抗力,你要選擇一個不給疑慮留任何餘地的方法。最終,你得願意為成功建立制度根基。”

從 2000 年開始,到該時代中期,Ruby 受歡迎程度在 TIOBE 指數評級中逐漸達到頂峰,人們認為 Ruby 還有它的旗艦級 Rails 架構,可以大大提高生産力。不少現在的大型網站,比如 Twitter 和 Groupon 在當時都是這門架構的使用者之一。

隻不過,人們也逐漸發現它存在一些緻命缺陷。Groupon 工程師 Sean McCullough 在 2013 年的一個技術會議上講道,“要在 Groupon.com 整個網頁上更改一種顔色,估計需要三個月的時間。這導緻我們無法以需要的速度進行疊代。”

Groupon 工程師不得不研究 Ruby on Rails 的一系列替代方案,最終選擇了流行的 Node.js,并花了一年時間進行遷移。Groupon 還表示,更換之後頁面加載速度得到了顯著提升,高達 50%。從 2008 年引進,到 2013 年替換掉,Groupon 在這個坑裡掙紮了 5 年。而在同一時期,備受擴充性問題困擾後,Twitter 也放棄了 Ruby on Rails。

現在,Ruby 确實不咋行了

接下來,讓我們一起從課程、實踐、社群情況來看看當年盛極一時的網紅程式設計語言發展現狀。

現在,很多朋友可能注意到,專門的 Ruby 播客或者新聞網站已經越來越少。除了一個每周通訊網站( https://rubyweekly.com/ )還能保持高品質,其他的真就沒什麼了。

這就突出了 Ruby 語言正陷入惡性循環:因為缺乏好的資訊和教程,新手開發者就不願選擇它;而因為沒有足夠的新人,市場對資訊和教程的需求也随之減少。

因為在勞動力市場上不被看好,編碼訓練機構 Coding Dojo 決定從 2017 年開始将 Ruby 課程從全美六大學區内盡數撤下,同時增加 Java 的全棧開發課程。Coding Dojo 課程負責人 Speros Misirlakis 曾表示,“我們一直在關注各地市場、把握技術需求,并發現 Java 的人氣位居榜首。相比之下,Ruby on Rails 在招聘熱度、市場需求和開發者關注度等方面都遠遠落後。”

到現在,以 Udemy 為例,截至 2022 年 3 月,上面隻有 109 種關于 Ruby(on Rails)的課程。但 Python、Java 和 JavaScript 等語言的課程量都超過 10000 種。目前品質最高的 Rails 課程之一最後公開更新是在 2020 年。當然,go-rails 等其他服務也在提供相關課程,但 Ruby 衰落的趨勢已經非常明顯。

十年前,Ruby 背後還有高度活躍的社群,比如 GitHub、熱門 repo。現在情況也發生了變化,支援并使用 Ruby 的開發者越來越少,曾被經常提起的 gems 服務,現在基本屬于無人問津。再舉個典型的例子,Rails 的 Azure 支援。

對微軟 Azure 的支援狀态可謂一團糟。相關一部分成果無人維護,過去幾年來也毫無動靜。大量問題被提出之後就長期擱置。例如,Azure 官方庫中有 22 個問題仍在開放,其中的依賴性問題大多源自 Nokogiri 庫版本過老。我知道這例子有點極端,但它确實能反映出生存狀态的一個側面。

最近十年來,現代 SaaS 方案中的 API 幾乎都不提供官方 Ruby 用戶端或 SDK。

形成鮮明對比的是,Java、JavaScript、Python 甚至是 Rust 可都在支援之列。

Slack 沒有官方的 Ruby 用戶端或者 SDK(其他語言都有),Dropbox 也一樣。之前提到過,Azure 倒是有,但基本沒有維護。在所有 HubSpot API 實施意見中,Ruby 版本的人氣(根據 stars 和 forks 判斷)和更新頻率都是最低的。像 Monday、Teamleader 或者 Notion 這樣的現代項目管理方案都沒提到過 Ruby。這裡要澄清一下,我舉的都是不支援 Ruby 的 SaaS 項目。支援 Ruby 的也不少,從 AWS 到 Square,都提供一流且維護良好的 gems 供使用者選擇。

雖然沒對 Ruby gems、repo、待解決問題等量化名額做過資料分析,但單是浏覽一下基本情況就已經看得出相當負面的趨勢。而且從部分 SaaS 服務上看,Ruby 确實不太受待見。

2010 年時 Ruby 的 SDK 和 API 用戶端都是最亮眼的,之是以出色,是因為當時的 API 與 SaaS 開發團隊往往會自己動手編寫 Ruby 版本,是以用戶端品質自然不在一個層面上。但近年來情況大變,而相應的社群版本要麼維護不善、要麼壓根沒有。

關注大型 SaaS 或者軟體公司,我們會發現運作在 Ruby(on Rails)上的成果基本都有點年頭了。

特别是在 2020 年之後,已經很難找到任何立足 Rails 建構的成功 SaaS 産品。GitHub 誕生在 2008 年,Shopify 是 2006 年,Twitter 是 2006 年,Groupon 是 2008 年,Zendesk 是 2007 年,Airbnb 是 2008 年,Fiverr 則是 2010 年。我能想到的誕生于 2010 年之後、而且運作在 Ruby 或 Rails 上的成功廠商就隻有 Stripe(2011 年)和 Gitlab(2014 年)。在比較流行的 Ruby 開源項目方面,我能想到的也隻有 Discourse 和 Mastodon。但這裡确實也有幸存者偏差的因素:成功的企業需要經曆漫長的磨練才會顯露,是以不管用不用 Rails,成功的 SaaS 都得用時間證明自己。

2010 年那會 Rails 的成功催生出使用模型視圖控制器(MVC)架建構立快速應用開發(RAD)架構的市場需求。可以肯定地說,Rails 這類架構确實擁有比較明确的市場定位,但還不至于火到那個程度。這些架構的解決能力和适用範圍都比較差,是以無論使用哪種語言,Rails 本身的流行度下降甚至在根源上來自 MVC 和 RAD 方法的逐漸衰落。

2021 年 StackOverflow 的調查結果也支援了這樣的判斷:Ruby 與 Rails 在各項評比中基本都處于象限底端。Ruby 得到的“贊”和“踩”基本相當。很遺憾,StackOverflow 并不提供可供通路的趨勢名額,倒是有一款基于标簽活動的獨立工具。經過查閱,發現 Ruby 這幾十年來持續下滑、而且身處底部象限。TIOBE 指數也給出了類似的結論,Ruby 穩定保持着每況愈下的生存狀态,逐漸落後于其他語言。

請謹慎選擇學習

雖然徹底消亡并不容易,就像 Pascal、COBOL 乃至 Perl 當下也仍然存在一樣。Ruby 的情況要好一些,這艘船還遠遠沒沉、隻是速度越來越慢。

不過人氣并不能直接決定語言的品質。畢竟如果用人氣來衡量,那 IE 6 将是人類曆史上最好的網絡浏覽器。Ruby 仍然保持着 2005 年時的出色開發體驗,而且體驗隻會越來越好。Rails 也仍是實作原型設計示範的好方法,能幫助大家在幾天之内更穩妥地建構起最小可行性産品。

那我們是不是不該在職業規劃中學習 Ruby 或者 Rails?話可不能這麼說。市場對于 Rails 和 Ruby 開發者的需求仍然相當旺盛,或者說市場對任何語言的開發者都需求旺盛。自 2008 年以來出現的一切 SaaS,在未來幾十年中都需要新的開發者加入進來。

但我們也要考慮到,在 Ruby 陷入萎縮的同時,Node.js 開始快速流行。在過去的十年裡,開發領域的創新成果可謂百花齊放。HTML5、Node.js、Angular 和 React 已經在前端和後端遍地開花。JavaScript 與 Python 在市場需求穩定性上也越來越具有優勢。Python 是過去十年中增長速度最快的主流程式設計語言,目前已經擴充到 Web 開發、資料科學、科學程式設計等多個領域。Stack Overflow 的調查也顯示出,JavaScript 已經成為全球應用最廣泛的語言。

另一方面,很多技術都會有自然的生命周期。開發者們的關注和精力就那麼多,流向了其他地方、自然也就不再流向這裡。

是以這裡還是想提醒大家,如果 Ruby 繼續保持過去十年來的衰落趨勢,那各位一定要認真考慮學習這門語言的風險——也許 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/

繼續閱讀