瞎扯淡 Ruby 现在是不是很尴尬

Terry.Shi · 2018年01月05日 · 最后由 jasl 回复于 2018年03月26日 · 8305 次阅读

公司不愿意用 ruby 说根本招不到人。程序员不愿意学 ruby 说根本找不到工作。我是挺喜欢 ruby 的,对 ruby 不火感到很遗憾。

这段时间讨论这个的太多了,看得累了

ruby 的高开发效率是建立在用 ruby 的程序员能有比较高的个人素质上面,一个新手要能够成为即战力需要很长的时间。于是更加没有公司愿意培养 ruby 工程师了,一来需要的入手时间比较长,二来还需要这个人具有一定的潜力,从头培养根本划不来。不靠公司培养,新鲜血液全靠一些爱好者自学,这种生态真的很令人捉集。

感觉 RubyChina homeland 最近也不更新了~

没啥新的增长点。。。

大环境是还缺乏一些新的业务的增长点,最悲观的情况下,我个人判断 Ruby 最差会成为下一个 Lua。

写 Rails 的话其实也不用担心,起码北上深是不会愁工作的,论坛的招聘帖也集中这些城市,而且交流下来看的话是供小于求。

我个人另一个判断是现在 Web 行业处于转型期,WASM 还有 PWA 对于 Ruby 还有其他有兴趣做应用开发的语言都是新的机会,而且前端社区现在火的框架也在发展 SSR,最终可能会造成一种轮回

还有一个是,我相信 Rails 在企业级系统上会有很大作为,这种系统的特点是 业务复杂、对 UI 要求不高、需要配合公司管理模式长期迭代。

Rails 支撑多变的业务需求还有很大的发挥空间(我刚在公司做了这方面的分享),但是在社区层面缺乏总结。

jasl 回复

我知道的是现在的趋势是前后端分离。就是不知道前端社区现在为什么热衷 SSR,还是真的想要 js 一统天下😂

我们现在是在做类似这样的项目,UI 从一开始定稿之后出新需求都是直接套😂 但是需求变得很快。。我潜意识里还是认为 rails 适合做小而美的网站。。这是我的偏见吗

Terry.Shi 回复

(先声明:我现在说的都是主观观点)

我觉得 SSR 反而是拉回正轨了,JS 不是不可以一统天下,可以让 JS 接管和用户相关的工作,有微服务的加持下,后端让合适的技术解决合适的业务(Spark 做数据平台,Go 做 实时,Java 写业务系统等等),然后 JS 把这些离散的业务系统串联起来,再展示给用户,相当于现在的后端更后,让 JS 的“服务器端”做“后端的前端”(有点绕),这样产品形态(UI/UX)的变更就完全交给前端开发来完成了,按照产品的需要来组合后端提供的各种服务。

在这个模式之下,后端开发专注于实现业务,精进后端的技术栈。前端开发掌握 SSR 为了更高效的实现 UX,又避免了学习过多的传统后端的技术栈(在目前的形势下,前端即使有了 node.js,由于前端开发没有系统的受过数据库等后端技术栈的学习,实际上是给很多项目造成过负面贡献的,相信不少后端开发有这个体会)

我觉得这才是正确的道路。

Rails 的 SSR 能力非常强大,这就和 JS 的发展路线产生了冲突,目前来看 JS 或者说前端社区赢了,现在的前后端分离,Rails 的 SSR 能力等于废掉。

再看表达业务逻辑,做业务逻辑的精髓在于,精确地表达,即使是 Ruby,惯例上,也提倡不要炫技,用最朴素的代码去编写,根据我的经验,这个时候,代码量上 Ruby 不会比 Java 少多少,这就造成另一个尴尬,Java 的人好找,Go 的性能好,不如直接用他们了。

Terry.Shi 回复

小而美最后也是要变成巨无霸的,我个人经验认为 Rails 支撑大型项目没有问题

jasl 回复

我们项目目前也有这样的需求,就是一个模型部分字段是通用的,但是有一部分是不相同的,我们是把不同的部分存成了一个 jsonb 字段。动态虚拟模型应该是有普遍需求的!

Terry.Shi 回复

可以看看 https://github.com/jasl-lab/form_core 的 dummy 能做到的效果,我发现还有很多点可以去总结的。

另外我昨天还跟同事感慨,现在分享 Rails 使用技巧的帖子越来越少了,我自己也在想,这么多年来我自己独创的技巧估计都有不少了,但是我主观上有惰性去总结成帖子,因为感觉这些别人不知道其实也没啥影响,但是模式是能够带来巨大生产力差距的,值得去推广

@jasl 我支持你做一个类似 RailsCasts 的分享(不一定是视频哈,文本就好),你是 Ruby 圈的领头人,我们都愿意跟你走!我也曾有打算做分享的想法,但是由于工作原因(现在更多做业务吹牛逼去了)做不了,但是很希望 Ruby 圈子有更多优质的内容出来,聚集更多的人气。

首先如何定义“尴尬”?

如果从创始人的野心来看,Rails 更尴尬。Ruby 本来就是定位为取代 Shell 和 Perl 的脚本语言,能取得今天的地位难能可贵。而 Rails 定位为 SaaS 框架,在当前 SaaS 不再流行的大势下逐渐暗淡也是没有办法的。

可以总结一下现在论坛里对 Ruby 的赞美,无外乎“Ruby/某框架的思想先进”,或者“Ruby 让人快乐”,我觉得已经偏离了 Ruby 能不能做好的项目这个初衷。个人感觉 Ruby 没有静态类型检查,性能差和难于部署等缺点阻碍了 Ruby 项目的质量。现在越来越多的人意识到,软件部署只是软件开发的第一步,Ruby 已经越落越远。

Terry.Shi 回复

做大型网站完全没问题,做支撑较高并发的接口也没问题,你会发现最先出现瓶颈的地方常常是数据库

我今天本来写了个帖子的,后来忘了 Submit

姜叔叔 @jasl #12 楼的答案,其实 已经接近我想说的

我当初介绍 Ruby 好处的时候,其实有一个核心的地方就是【它是动态的】,这一点在所有强类型语言中都能 get 到他们没有的好处。

ActiveRecord、元编程的核心在于【动态注入】。

然而,所有的静态编译语言,在编译的时候都要做一件事情:行为检查。

这件事情,让静态语言没办法动态地为一个对象添加方法同时能在后续的代码中写出直面调用的代码。

比如,ObjC 允许你在 Runtime 注入一些东西,你可以给 obj 注入 getAttribute 到 Runtime,但是你在代码中写 [obj getAttribute] 是直接编译不过,告诉你 getAttribute method 不存在的。

Ruby 作为动态语言,就像 JavaScript:

var obj = {};
obj.name = 'test';
obj.age = 1;
obj.getName = function() { return this.name; }

你是可以为 obj 注入 getName,并且在下文马上调用它。

name_of_obj = obj.getName()

“这将允许你进行对象的后天编程,让喜欢抽象的程序员留了一大片自由幻想的天空。”

——《谈谈我对 Ruby 的看法》

文中给了例子,我在这里再贴一遍(单例类):

class Parent
  def say_hello
    p 'hello'
  end
end

child_a = Parent.new
child_a.say_hello // 孩子会父母的说 hello 行为

# 孩子 child_a 后天自己学会说 bye
def child_a.say_bye
  p 'bye'
end

child_a.say_bye // 说 bye

child_b = Parent.new // 父母又生了个孩子
child_b.say_bye // 但是他不会说 bye

我在那篇文章话浅,但指代的含义很深,如果有广泛编程经验的人,他们一定理解我说了什么。

JavaScript 现在比较火,吾辈看来,也是的得益于它无尽的抽象灵活的能力,它不需要太复杂的 OOP,能够像 lisp 那样轻而易举以 scope 撬动整个抽象出层层叠叠的多次元的世界。

可参考:为什么说 JavaScript 是披着 C 外衣的 Lisp? https://www.zhihu.com/question/20423080

很荣幸的是,Ruby 的单例类赋予了开发者这项能力。

所以,在写 Model 的时候,不用再去担心语言有没有像 ObjC 的 @property 辅助性设施帮你 sythesize getter setter,也不在像 Java 的注解辅助性给开发框架的人对属性 alias 或者别的操作。

残念,这些一切的一切,Ruby 元编程默秒全~

只能说,偏爱 Ruby 的,已经成为大叔,他们在承担起创业的重任,家庭小孩的责任,没有太多的时间叫嚣“Ruby VS xxx",但并不代表 Ruby 不火了。

jasl 回复

Python/Go 能干的事情更多一点,比如人工智能、区域链方向

sharpx 回复

能干什么事情跟语言没关系,是有人写轮子,没有 Rails 那 Ruby 还是能写 Web,只是不会有太多人去用的 Ruby 写 Web 了

我跟人觉得吧,现在许多人都有一种思想误区要特定语言才能干某些事情(当然也有些 DSL 是这样),当你说你想写爬虫很多人都叫你去写 Python,你想做 CMS 别人的第一反应会是 PHP。但像 Ruby,Python,Java 这些通用语言基本上可以满足日常的开发。Ruby 难找工作我也深有同感,拉勾上的招聘贴 Javascript 的数量比起 Ruby 多了何止 30 倍,作为一个开发者,我们似乎没有办法去控制 Ruby 的火热程度,就像我们没用办法控制 JavaScript 的火热程度那样(或许去开发各种各样的框架是一条路,但 Ruby 社区的人似乎更愿意去维护一个好用的框架,而不是去开发各种各样的框架让别人无从选择)。我现在在做前端开发,但是并不妨碍我对 Ruby 的喜爱,如果真的找不到 Ruby 相关的工作,我倒是愿意在工作之余的时间一些 Ruby 相关的东西,如果有机会给社区做点贡献也是很好的。

程序员不愿意学 ruby 说根本找不到工作 说到点上了感觉 我现在就在找工作 两年 ruby 经验不是很好找

非工业化语言,又没有 AI 加成,在个人开发者群体还算受欢迎,未来可能还不错的发展是 ruby 能进一步在个人开发者和小型创业公司流行,这就要靠社区大众努力的"忽悠"了..

mark 一下,不管 ruby 怎么好,现实的无力是实情。

jasl 回复

form_core 很赞!

Terry.Shi 关闭了讨论。 01月31日 16:58
需要 登录 后方可回复, 如果你还没有账号请 注册新账号