瞎扯淡 2019 年 了,是什么让你能够坚持使用 Ruby,或者是什么让你放弃了 Ruby?

rubyfan1 · 2019年07月31日 · 最后由 Imputes 回复于 2020年10月06日 · 14667 次阅读

我的答案:

  • 2019 年了,市场对 Ruby 的需求逐渐减少,Java 和 Python 大环境正在蚕食 Ruby
  • 国内技术市场重业务(Java Web)、数据(Java 大数据)和噱头(Python 深度学习),Ruby 没有一席之地
  • 目前各方向做的越来越精、分工越来越明确,而 Ruby 的套路往往为泛

这些因素,导致我在有工作压力的情况下,实在是腾不出时间学 Ruby(虽然自己很喜欢)。

一年前已经转 Java 了

一些优秀的东西,除了 ruby 没有别的版本啊,比如 gitlab,比如 redmine,还有很多不知名但很优秀的项目。

语言的表达能力。

换句话说,同样的代码我已经不想用其他语言来写/实现了。

Active Record

用 ruby 写代码快乐啊

Python 本身是做不了大数据、机器学习、深度学习之类的,现在它能做是因为它适合做胶水语言,调其他的轮子。其实 Ruby 也可以做到,只能说 Ruby 运气没有那么好。

公司用 python,自己的项目用 ruby。 在 web 开发领域,rails 目前还有微弱的优势。

开发效率 Rails 还是高(也可能我熟练度高)

正在放弃 Ruby 的路上,想换个工作实在是太难了😞

11 楼 已删除
ericguo 回复

启动 java 项目的时候,我总是在想,到底要不要传环境变量,这个环境是 dev 呢,还是 development 呢?schema 在哪呢,要怎么跑呢?

我写了小 100 行的 Java 代码,搞了一个批量获取的 API,RoR/Grape 10 行可以搞定吧?

Clojure 呢,语言本身不支持 debug。。。先完成什么,都靠干撸,都撸秃噜皮了,一手老茧。

有测试、开发环境的还好,很多都是没有的。。。

目录结构,完全看项目搭建者高兴。debug 都是从头 debug 到尾。

拼接字符串方便,好 debug。

yfractal 回复

Java 现在有了 SpringBoot,其实也没那么繁琐了

以后也许还会用 ruby,但作为工作语言估计没什么机会了,ruby 也就能做 web,但是即使在 web 已经没有太大优势了,不过 ruby 写起来真是舒服。

楼上 6 月注册,是第 80000 多位 User, 16-19 年,ruby china 上多了 5 万多人?

nine 回复

分析的很好

yfractal 回复

这个怎么说?

luoyegufei 回复

兄弟在哪里求职?

wushexu 回复

为什么说是运气问题,而不是语法或者性能问题?

因为 ruby 诱惑,节省脑力、体力,有美感 要是有 erlang 的并发能力就好了,话说 autofiber guild 什么时候加进来啊。什么时候 truffleruby 能用于生产啊。对未来还是有期待。

腾出时间学 ruby?你可以花时间学计算机基础,然后在需要用某个语言的时候,花一两天学习一下。

因为舒服呀

因为基础知识简单,难的入不了门

昨天我的好兄弟在实现一个比较复杂的业务逻辑的时候感慨了一句:还好是 Ruby. 这点我也很感慨,Ruby 的语音表达能力确实很强,我觉得写需求文档应该是 Ruby 最适合的场景,

rubyfan1 回复

就是拼字符串方便,dehug 方便。所以用啊。

没有放弃 一直在学习 ruby 只是写冗余的业务代码机会少了

求具体说一说。

比如 批量获取 ,用 SpringBoot 除了手撸以外,有没有更好的办法?

因为它优♂雅,有点想学,考完研找时间看看。24 岁,是学生。感觉 ruby 设计的很好,想学他而已,就这么简单。

yfractal 回复

指的什么方面的批量获取

msl12 回复

比如数据库里有 users 表,提供这样一个 API,一次可以拿 1000 个。 多次调用 API 后,可以拿到所有的 users。

38 岁,高校实验员,从 perl 过来,被其优雅吸引,会写些数据分析和文本搜索的脚本,简单网页。希望 ruby, 或其继承者 crystal 变得更好。

yfractal 回复

这个是 ORM 的功能不是 springboot 的功能,使用 jpa 的话直接写方法名就能实现一条查询语句。而其他的 ORM 比如 nutz dao之类的也不是随你喜欢用,总有一款适合你,毕竟有太多 java 实现了。并且只要支持 jdbc 的话让其支持 clickhouse 之类的也都能很方便的实现。(话说就没人想弄一个更好的 ORM 出来么,汽车引擎在怎么厉害也没法升级改造成跟飞船引擎不是

java 的累赘其实在于各种编程思想,比如需要定义一个借口跟其对应的实现类之类的,并且这方面因为所谓的业务代码的积累没法一下改变(我这 4、50 岁的大哥还在干编程相关的活,只不过是要不写 COBOL,要不写详细到方法名变量名的设计文档

ywjno 回复

我误以为 spirngboot 和 ror 一样是个全家桶。。。

既然说 orm,我们就把问题放在 orm 里讨论。

现在的问题是:遍历一样表,考虑到内存,需要分批次获取。

方便给代码吗?随便哪种 orm 的都可以,伪代码也行。

我知道 java 可以这么写(这种方法不是最好的,想知道更好的方法)

@Query("SELECT * FROM users WHERE id >= :startId"
       + " and ORDER BY id ASC LIMIT :limit")
List<User> getBatch(@Param("limit") long limit,
                         @Param("startId") long startId);

public List<User> getBatch(@NonNull Long limit, @NonNull Long startId) {
  List<User> users = this.dbRepository.getBatch(limit, startId);
  return users.stream().collect(Collectors.toList());
}

要遍历所有的,外面还要有一个循环。。。

RoR 里面,这么写

User.find_each do |user|
end

一样的功能,一次拿 1000 条,我忘了可不可以设置 1000 这个值了,但这个值一般没必要改。

yfractal 回复

如果确定是要遍历完,用 cursor 就好了,直接 jdbc(或 jdbcTemplate),不要 orm 了。 像 hibernate/JPA 这样的 orm 是有 session 的,遍历完一个表,session 都爆炸了。除非你每一批都打开新的 session,完成时关闭。

wushexu 回复

求代码,伪代码也行。

ror,不会内存溢出,因为每次拿 1000 个,就是上面的代码。

直接遍历,是每个都查一次 sql?数据量大一点,会很慢。

不为别的,就是每天能轻松的完成工作,早点下班回家,不用 996

工作机会越来越少了哦

numbcoder 回复

哈哈哈

学 rust 中,不过商城啥还是用 ruby,有时为了方便用 go 写接口,rust 还在学,主要没啥好的 web 框架,go 直接拿来就用,就是 if err != nil 写的蛋疼

ywjno 回复

你在银行工作?

yfractal 回复

find_each 方法有一个参数 batch_size,默认为 1000,这个值是可以动态指定的😀 ,比如:

User.find_each(batch_size: 500). do |user|
end
yfractal 回复

find_each 是 order by 主键的,加上排序会有问题。 送你一个带 order 的扩展

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true

  def self.find_eachs(limit: nil , batch: 1000 , order: :id , &block)
    count       = 0 
    last_offset = nil
    next_break  = batch
    data = self.order(order).limit(batch)

    until data.blank?
      data.each do |dt|
        count += 1
        block.call(dt)
        last_offset = dt.attributes[order.to_s]
        break if count >= next_break
        break if limit and count >= limit 
      end
      break if limit and count >= limit 
      next_break += batch
      data = self.where("#{order} > ?" , last_offset).order(order).limit(batch)
    end
    count
  end

  def self.find_each_datas(limit: nil , batch: 1000 , order: :id , &block)
    count       = 0 
    last_offset = nil
    next_break  = batch
    data = self.order(order).limit(batch)

    until data.blank?
      block.call(data)
      data.each do |dt|
        count += 1
        last_offset = dt.attributes[order.to_s]
        break if count >= next_break
        break if limit and count >= limit 
      end
      break if limit and count >= limit 
      next_break += batch
      data = self.where("#{order} > ?" , last_offset).order(order).limit(batch)
    end
    count
  end
end

numbcoder 回复

这点和 Ruby 有什么关系么?

nine 回复

非主键这样做有 bug 会漏数据

nine 回复

不是 uniq key,用了 limit,会漏数据。

虽然觉得对我没什么用,还是谢谢。

hooopo 回复

哈,默认 1000 条,满足大部分伪自增需求。

尽量自己做下伪自增工作。

Java 写 web 还是给那种超大工程或者时间太多的人用的,Java 那套设计模式真的非常不友好。有那些时间还不如学学语法糖。 高级语言是给人设计的,人生苦短,我更爱用以人为本而不是以机器为本的语言。

大佬们说了很多根本原因,根本原因导致现在市面对 ruby 工程师的招聘很少,工资待遇也不高,很多人都转了,毕竟还要生活。

广告做的差,领头的是日本人,不擅长在欧美推广

我是 2019 年才入坑 ruby,不知道是不是算太晚

wsdjeg 回复

类比今年学安卓

msl12 回复

我是出于兴趣,想多了解一门语言而已,反正已经学了那么多种语言,多一种也没啥坏事,基础入门打算花一周多点时间

https://github.com/wsdjeg/ruby-tutorial-cn

哎,放弃 ruby 一年多了。

已经转 elixir

los 回复

elixir 机会更少了,用了一阵还是转到 go 了

nyrf 回复

因为不考虑找工作的因素,所以无所谓这个。

有时候遇到暴涨的流量,用 elixir 还是省心不少的,比如我这个小项目,一个月内从上线到流量暴涨到千万以上一天,用 elixir 相对 ruby 省心不少的。 视频录的不是最高峰值,最高时候近 10 万用户同时在线。

los 回复

你这个实时更新是怎么实现的呢?

mengmeng 回复

这个统计用的是 Google Analytics

los 回复

你这是那个网站的访问量?

los 回复

这个统计,能否分享一下代码之类的哈哈哈

wsdjeg 回复

自己搞的一个 h5 小项目

mengmeng 回复

你之前没用过 Google Analytics 之类的第三方统计?

los 回复

elixir 性能是比 ruby 强太多,用过一阵,发现 go 更简单些,主要 elixir 学了还要再学点 erlang,我一看 erlang 头就大,😂

los 回复

兄弟这流量可以啊,用了几台什么配置服务器

los 回复

h5 游戏?

2019 了,https://discuss.python.org/ 依旧还是 Rails!

steve 回复

类似

los 回复

怎么获取收入呢?广告吗?

steve 回复

这些问题与本问题无关了。。

Umm。。。每次在 eclipse 里找各种按钮各种点一遍,controller 里写一堆 url,想直接返回个 executable javascript 我还得各种尝试,想死的心都有(别误会,没有贬低 java 程序员的意思,我只是说一下自己作为一个 java 小白的直观感受)。

如果是自己的项目,果断 Rails,能让我快速实现自己的想法而不至于陷入一些无关紧要的技术细节,即使周围的人都在学 java 用 spring,我还是坚持 Ruby,Rails。

个人观点,当年 Ruby 因为 Rails 而火,而如今已是 Nodejs 支撑下的大前端世界,Rails 这种全栈框架已经失去了自身的优势,前端已经不需要 Rails 参与了。

后端?不管你高不高兴,后端仍然是 Java 的天下,倒是可以和 PHP 竞争一下。 运维?也没 Ruby 什么事 AI?那是 Python 的天下 其它场景也好像没 Ruby 什么事

所以,很尴尬!

oatw 回复

勇士

估计大家都做不到 outlive Lisp,更不用说应用更广的 Ruby 了。

los 回复

没用过

hxh1246996371 回复

的确现在大前端是主流了,我自己的阅读产品也是 Angular(内容制作端和微信端)。不要大前端,稍微复杂一些的做起来就很受掣肘。 但 Ruby 做后端,开发效率的优势还是很大的。个人和小团队创业项目,后端语言首选还是 Ruby(除非是特殊领域)。

nine 回复

这人说的比较好

最主要是为了少加班

hxh1246996371 回复

运维 Ruby 还是非常多的,包括有 AWS 员工献身说法他们内部,包括他前司 Atlassian,内部 DevOps 有很多 Ruby 写的工具,只不过这块的关键点不在语言上,所以也没什么好在社区说的。

lidashuang 回复

加班不是互联网的常态么,和语言有什么关系

要想找工作,方向广还是学 java 或者前端吧,ruby 路子真的太窄了,java 可不只有互联网。

84 楼 已删除

ruby 适合小而美的团队,不适合大团队协作,也不是不能协作,而是耗费的成本太高,本质在于语言本身太过于灵活,越是灵活,对人的要求就越高。Java 这样工程化的语言,说实话,对于业务代码而言,不同级别的开发者写出的代码不会有太大的差别,而用 ror 写真是千差万别。不过我还是很喜欢 ruby 的,当前公司有 20 人的 ruby 开发,经历了非常多的问题,已经开始转向 Java,不过不打算抛弃 ruby,做内部服务,业务网关还是很不错的。

脚本语言的特点是高度智能化,特别是像 Python,Ruby 等,因为编程中可以为你代劳的,脚本语言基本都可以做到了,其带来的结果就是,编程更加高效。但编程语言只是工具,思想才是最重要的,语言不过是表达思想的工具。

另一方面,有的语言可以禁锢思想(像 C,C++),有的语言可以开阔思想如(脚本语言),简单的说,语言的结构特性也限定了你的思想结构、路线。

热爱计算机编程的人,其实不在乎语言的优劣,因为各种语言各有特点,细分场合应用更明显,例如 C,C++ 更适合嵌入式开发、系统开发;脚本语言更适合复杂业务的程序开发。

我在编程世界中浸淫已有七八年,各种语言都有接触,从最初的 Objective-C,C,C++,到 Python,C#,php,Java,JavaScript。现在在学 Ruby。

于我而言,没有坚持使用或放弃 Ruby 或某种语言的说法。理由是明显的,各种语言各有所长,选择其中适合的去开发项目。例如,我最初是做手机 iOS App 开发的,那时自然是使用 Objective-C;后来做 Windows 桌面程序开发,用 VC++,C#; 开发一些辅助的小程序,用 Python;做网络相关程序,用 Node.js;做安卓 App 开发用 Java;做网站开发用 php,JavaScript。

虽然,我用过的语言很多,并不是特别专精于某一种语言,但每种语言我都胜任相对于适合它的项目开发;这是因为有了网络搜索这个巨大的工具,获取某种语言相关的知识或解决某种语言相关的问题,可以说豪不费力。

做编程,不应该死死望着那点工资;而是,编程应该带给你乐趣和成就感。

最近有写个爬虫,原本是想用 ruby 写的,可是想到现在的电脑是 windows,就放弃了。用 ruby 写的想法源于对 ruby 的情怀。

88 楼 已删除
89 楼 已删除
90 楼 已删除

Ruby 在国内市场并不主流,不过用的人也不少,工作岗位也不少。 但是个人已经不再使用 Ruby 了。Ruby 确实带来了一些欢乐,但是个人更喜欢函数类型的语言。 所以恰饭用 JS,写 React + RamdaJS + RxJS。 爱好用 Erlang,Lisp 和 OCaml。

ruby 只有北上广深,买不起房,学门老家有的技术继续当程序员。可能这么说比较 low,但应该说出了大多数换语言的 ruby 同学想法。 别说爱好别说情怀,没有工资拿一切都是故事。

ruby 不适合拿来赚工资钱了,事实就是:市场对 ruby 的需求非常少了! 但是,ruby 非常适合个人、小团队做创业性的小项目,其实就算不是小项目,百万级用户的项目也没啥问题。 就拿我个人来说,和一些朋友做一些小项目,我用 ROR,后台我一个人写就 OK 了,而且业务代码量也不少,但是用 ruby 一个人足够了。

jasonliu 回复

ruby 适合小而美的团队,不适合大团队协作,也不是不能协作,而是耗费的成本太高

这句话同样用在 PHP Python

最近公司用 Py 写的项目,我真的不想吐槽…… class 没写几个,全都是 dict 一个个拼的,随意 import,全都是 function(data) 式的编程你干嘛不回去用 C,然后 dict 你都不知道上下文是啥,因为它不是 class 没有固定的 attribute。

Py 的对象还很另类,不 protected 然后 getattr setattr 作为属性寻找链很……

Ruby 比起 getattr setattr 更倾向于 method_missing、send,而且区分开方法和属性

Python 对于新学编程的人,是很简单,但是你用来写项目的时候,ORM、写几层封装你就知道什么叫蛋疼,注入麻烦而且死板,词法格式生硬。

很多人说词法生硬的代码才好维护,屁!谁说的!

本来可以通过 type_cast 顺势去递推逻辑的,显得很反射很 IoC 或是很 Design Pattern 的事情,Python 让你手足无措,只能老老实实写百行的 if else,层层嵌套多了拆成单个 function,function 写多了找得变态般的蛋疼。

如果只让我写 if else 和 function,我宁可用 C 语言,因为至少同样的语法 C 性能比 Python 好,另外还有 Go lang,所以能写 py 不如写这俩货,我根本不知道现在 py 流行在哪儿,估计不过是 tensorflow 选择了它作为 wrapper language 吧。还有它确实不 OO 的话比其它语言要更容易入门。但真正要写 project 要维护要更可读更便捷还是要用点技巧的。

Python 一句我撒手不管了我就让你什么都写不了只能写 if else 那就是好维护?

Sorry I don't think so~

阅读者看了一堆 py if else 之后可能还没进入主题

function(self) 这个梗……

lambda 只能一行写个短的

很多语句因为太长,pep8 linter 一开逼着你换行之后,你会发现丑得很难看

公司换用 go、python 或者说他俩流行我觉得最大原因是这俩货之前在上个十年没流行过,国内的技术选择是以资金为导向的,然后我觉得就是男的换个老婆,女的换个老公一样的事情。别人家的老婆 or 老公都是香的。

而且以国人的口味,也就是看别家孩子有什么自己就像有什么吧,所以跟风,而且还很容易冷落一些不被关注的东西

归根结底还是 因为你穿着不主流的东西在国内都是被歧视的。

之前学习 Rails 的路径可能不对。Rails 对于我这样一个业余的、时间精力有限的开发者来说,实在太复杂、变化太快了。不管是开发、部署还是维护,Rails 总能给我带来各种问题,让我陷入困境。 回过头来看,正确的学习路径也许是 Ruby→Sinatra→Padrino→Rails。一门一门学习,一门一门掌握,一门一门精通,直至融会贯通,不管面对怎样的开发需求,都能游刃有余。 发现问题,及时调整,什么时候都不晚。现在就开始学习 Sinatra 吧,简单的需求,本来就应该用简单的工具、简单的方法来满足!

96 楼 已删除

断断续续学 ruby、rails 主要出于兴趣,开始时不知为什么特别关注小众语言,就学了。后来慢慢理解学习一门语言,主要要弄明白它的内部机制和原理,用的多了,接触场景多了,就熟悉了,真正理解他的优势,自然而然就会映射到其他领域,rails 是最好的案例。 现在的框架很多,根本学不过来,但是很多都是异曲同工,只有理解后面的机制和原理,才能形成自己的一套设计模式,产生新的工具和应用,才能把语言的威力发挥出来。出一个框架就学,模仿做一些案例,很难有大的作为,图个热闹而已。 现在明白了,其实不在于学哪种语言了,关键的问题是把这种语言的优势在自己需要的场景里发挥到最大。 最近开始接触 golang 和 flutter,很多基础的原理和 ruby 还是一样的,总之这个世界上除了知识,不会越用越少,只会越用越多。

没办法,后端是 Go 和 .Net 的天下,前端是也是。

Python 是因为 Azure BigData 系列很多服务只支持 Python 和 R, 这就没办法了,不得不用

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