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

Terry.Shi · 发布于 2018年01月05日 · 最后由 jasl 回复于 2018年01月06日 · 1250 次阅读
96

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

共收到 22 条回复
9442

马太效应

5917

是的

60a8f6

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

A908ae

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

808

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

C5fc5e

没啥新的增长点。。。

1107

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

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

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

1107

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

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

96
1107jasl 回复

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

96

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

1107
32Terry.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 的性能好,不如直接用他们了。

1107

虽然看业务逻辑上语言的优势可以忽略不计,但是为了支撑表达业务逻辑,不同的语言、技术带来的生产力差异是非常大的。

比如 ORM 领域,ActiveRecord 可以称为地表最强。

.Net 的 Entity Framework 可以说一般场景下不输 AR,因为 EF 有地表最强 IDE VS 提供工具支持去方便的生成模型的代码,并且在 C# 的 partial class 的支持下,可以对开发者隐藏掉这些生成出来的代码,让代码组织更干爽,在 C# Linq 的支持下允许写出类似 AR 的链式查询或者用类 sql 的 DSL 去查询,灵活性甚至胜了 AR 一筹。

但是 Java 的 Hibernate 呢?手动声明字段,Migration 不管,Getter、Setter 自己搞,甚至还得学个 HQL。

为啥 ActiveRecord 只在 Ruby 上有,其他语言抄不走?因为 Ruby 提供了必要的基础设施。而 ActiveRecord 已经可以称为一种 pattern 了,是 pattern 导致的开发效率的差距。

一个例子就是,我最近在公司内部、在论坛、在线下聚会都在推我写的 form_core 还有他所采用的 动态虚拟模型生成 的手法,我们都知道 AR 的模型(或者说数据结构)很容易使用,包括数据验证等等常见的需求都满足了,但是 AR 的模型只解决静态的数据结构,动态的数据结构呢?比如类似京东,不同的商品类型的商品参数是不同的且由用户去定义。这个场景很常见,比如过去我在知人,员工的档案需要 HR 定制、工作流的表单也是用户定制的,我也研究过 Redmine 任务的字段也是可以定制的,但是他们在解决这个场景上做法就很传统,Java、PHP 任何语言也都那么去做,那用 Rails 还有啥开发效率优势?但是用了我的动态虚拟模型手法就不同了,动态定义的数据结构最后转化成一个符合跟 AR 一样的模型,类似数据验证直接交给模型去处理了,不需要额外的开发工作,开发效率自然巨幅提升,而且扩展性、代码可维护性也有保障。

而这个手法也是来自当时解决工作的灵感的总结,所以我就产生了年头,如果关键业务场景的解法能总结成模式,那么生产力重新和其他语言产生代差,会不会在现有条件下(没有新的增长点)让 Rails 再热一次?

举个例子,最近我收到很多帮招人的邀请,是做数字货币的交易所,为啥。。。因为 貔貅 是世界上唯一一个开源的产品级交易所

1107
32Terry.Shi 回复

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

96
1107jasl 回复

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

1107
32Terry.Shi 回复

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

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

Ee61c1

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

775

首先如何定义“尴尬”?

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

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

15420
32Terry.Shi 回复

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

96

我今天本来写了个帖子的,后来忘了 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 元编程默秒全~

Ee61c1

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

C5fc5e
1107jasl 回复

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

1107
C5fc5esharpx 回复

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

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