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

rubyfan1 · 2019年07月31日 · 最后由 xiaohesong 回复于 2019年08月19日 · 4152 次阅读

我的答案:

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

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

共收到 85 条回复

一年前已经转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楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册