Ruby Ruby 怎么就是网红了?

FrankFang · 2022年04月07日 · 最后由 haohaodehao 回复于 2022年05月25日 · 3009 次阅读

我最近看到的一篇叫做《不要学习「网红」编程语言》,里面提到 Ruby 和 Rails 的衰落,并且告诫大家慎重学习 Ruby。

我看完真的挺想吐槽的……

Ruby 和 Rails 是网红?

首先,最近十年中国的网红编程语言怎么排也排不到 Ruby 吧?最红的 Python 已经被培训机构卷成红海,排名第二的网红我不知道应该选 JavaScript 还是 Java,曾经红极一时的 PHP 现在怎么也是网红前三吧?最近一年的网红当属 Go 和 Rust 这对兄弟了。可 Ruby 何时在中国成为网红过?我觉得这篇文章的作者应该是捡软柿子捏,找了个最不红的 Ruby 吐吐槽,可能是以为中国的 Ruby 程序员已经死绝了,可惜我就是 Ruby 程序员……

好吧,不讲国内只看国外,Ruby 确实在国外红过,但 Ruby 在国外也还没死啊。

Tiobe 语言排名中 Ruby 还排在 Rust、Dart、Lua、TypeScript、Clojure 前面。

如果是看趋势,那 PHP 的颓势妥妥地超过了 Ruby:

Stackoverflow 提问量

Google 搜索热度

所以在我看来,Ruby 在国内从来没红过,在国外也不是死得最快的,作者只是挑了个粉丝最少的怼。

不推荐学 Ruby 和 Rails?

其次,不知道作者为什么不推荐学习 Ruby 和 Rails 却推荐 Node.js 和 Python。我虽然也不是很推荐大家学 Ruby on Rails,但是我「更」不推荐 Node.js 和 Python。

  • Node.js 的 Express 是借鉴了 Ruby 的 Sinatra,为什么我这么说?因为这是 Express 的作者 TJ 在 Express 1.0 beta 的发布日志中说的原话

    Yesterday I released Express 1.0.0beta, a Sinatra inspired Node web development framework.

  • Python 的 Flask 据说也是受 Sinatra 启发而开发的。(我并没有找到原话)

  • Node.js 的 Yarn 借鉴了 Ruby 的 bundler,以及 Rust 的 Cargo 还有 npm

  • Node.js 的 SASS 就是从 Ruby 社区拿来的

  • Node.js 的 Sails.js 后端框架试图模仿 Rails 但是失败了

Ruby 社区有太多经典设计值得程序员搬运到其他语言了。

如果有人叫你不要去看 Ruby / Rails,我猜是他不知道 Ruby / Rails 里有多少宝藏。

学 Ruby 和 Rails 的正确姿势

读到这里你可能认为我的意思是推荐大家「学」Ruby 和 Rails。但并不是。

我的意思是推荐大家用其他语言去「抄」Ruby 和 Rails。

毕竟用 Ruby 和 Rails 的商业公司很少,所以我推荐大家用 JS、GoLang、Rust、Java 把 Ruby 和 Rails 里面做得好的东西抄袭过来。

但「抄」的前提是你要了解 Ruby 和 Rails。

所以你一定要看看 Ruby 和 Rails 里的宝藏,虽然你大概率不可能靠 Ruby 和 Rails 吃饭,但你可以靠「抄」Ruby 和 Rails 晋升。你没有听错。比如我就曾在阿里巴巴看到有后端用 Java 和 Groovy 造出了一个类似 Rails 的框架,极大地提高了开发效率,广受好评,最后晋升(真事儿)。


后面是我的新项目课介绍,就不贴在这里了。

如果 Ruby 继续保持过去十年来的衰落趋势,那各位一定要认真考虑学习这门语言的风险

我觉得原文这话说的有点。。。想象力?原作者不仅定义了“网红”,还定义了“风险”。

我在想原作者是不是收到个命题作文的要求,硬给凑了一篇。

原文中“只不过,人们也逐渐发现它存在一些致命缺陷。Groupon 工程师 Sean McCullough 在 2013 年的一个技术会议上讲道,要在 Groupon.com 整个网页上更改一种颜色,估计需要三个月的时间。这导致我们无法以需要的速度进行迭代。” 看到这里就不用看了

从 Ruby 里直接搬运东西的基本都失败了,因为没有理解到 Ruby 语言本质的不同,比如 Meta Programming,在主流竞争语言里没有一个实用的替代。

有句话说得好,大多数从 Ruby 社区搬运过去的东西,都只是“摹其形”而不能“得其魂”,这是由 Ruby 语言的特点决定的。

相反的是 Elixir 社区,从 Ruby 社区吸取优秀特性的同时,针对自身语法定位的特点,大胆地摒弃一些 Ruby 中的习惯用法,形成了具有自己独特价值的框架。

xinyifly 回复

js 有 proxy 之后能完全实现 ruby 的元编程功能,decorator 甚至可能比 ruby 更方便,rails 难抄很大部分是 codebase 的复杂度,但是这个复杂度即使是今天的 ruby 程序员也未必当成值得骄傲的事

ruby 没有真正的多线程,只能开多线程,对于成熟商业项目是致命的性能弱点。虽然现在有了 ractor,可惜仍然非常难用……

评价一个事物,需要跳出来看看。比如西瓜好吃,那需要尝尝几种其他水果,甚至是和蔬菜,肉对比一下。

微信公众号里看到这篇文章,习惯了 XXX 已死这个论调,仅仅把它当成一种娱乐文。 非常有争议的话题,点击量赚满。文章在 Marketing 方面值得学习。

月经贴,丁真鉴定完毕 🤔

无法确定方法的返回值类型,没有文档或者不能相信文档,只能耗费时间理解之前的代码,这是 ruby 的痛,也是低效的 ruby

我只知道,ruby 对于 macOS,是必须的存在。

haohaodehao 回复

RBS 不够吗?

DouO 回复

RBS Support 目前还没有进入很实用的阶段

以前觉得 InfoQ 内容应该是有筛选的,没想到还能发这篇

这玩意就是屌丝翻身的幻想 不接受反驳

DouO 回复

有个问题,动态的语言,靠标注类型来确定,这样还怎么动态。底层用指针标识动态,完了再代码上写明类型,结果再次赋值就不能动态了吧?结果是动态语言只要限制了类型也就别动态了,那跟直接使用 java、c++ 比,即失去了动态性也失去了效率。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号