避免盲目追求“网红”编程语言

发表时间: 2022-03-12 19:00

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/