《架构师》2022年4月
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

观点 | Opinion

不要学习“网红”编程语言

作者 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/