V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
otmb
V2EX  ›  程序员

ror 会打败 j2ee 么?

  •  
  •   otmb · 2015-01-22 17:06:57 +08:00 · 4277 次点击
    这是一个创建于 3628 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上溜达了下,宝石粉说ror是最优美,强大的技术,秒杀j2ee几条街啊:(
    可是又听说java spring挺靠谱的,
    这里有人同时搞ror和spring么?
    说下对这两者的感受吧:)

    45 条回复    2015-01-25 23:31:11 +08:00
    wwqgtxx
        1
    wwqgtxx  
       2015-01-22 18:06:40 +08:00 via Android
    几乎不太可能,ror到现在还是小众语言,java都是普及化教育,两者差距还是比较远,从应用成熟度来说也差了不少,想要追上,可不是一天两天的事
    otakustay
        2
    otakustay  
       2015-01-22 18:51:54 +08:00
    这个就叫做:想多了……要说理由的话能写太多,累,不想写了- -
    能打败JAVA的我至今一个都没看到,哪怕是世界上最好的语言PHP和开源就好像无比强大的C#和传说中只要一个语言就够的NodeJS,都差得老远了
    另外Spring和ROR完全两个东西,你要人怎么比……
    nine
        3
    nine  
       2015-01-22 19:44:14 +08:00
    应该不会
    写java的忙着布道
    写ruby的忙着创造

    信徒数量比可想而知
    msg7086
        4
    msg7086  
       2015-01-22 20:21:28 +08:00 via iPhone
    写Java可以工作挣钱。
    写Ruby可以让人感到快乐。
    ostholz
        5
    ostholz  
       2015-01-22 20:36:52 +08:00
    自从用过Ruby, ROR后, 我就再也不想看JEE一眼.
    可惜, 很多(大)企业里都是JEE的天下.


    @msg7086 不能更同意了
    另外给一个吐槽JSF的网站.
    ihatejsf.com
    kavinyao
        6
    kavinyao  
       2015-01-22 20:43:30 +08:00 via iPhone
    以前我也经常纠结这种问题,后来发现时间会说明一切。
    otmb
        7
    otmb  
    OP
       2015-01-22 20:45:17 +08:00
    @msg7086 ruby不可以赚钱么?
    @nine 写ruby的忙着创造,啥意思?
    lidashuang
        8
    lidashuang  
       2015-01-22 21:48:19 +08:00
    写了两年ruby,觉得不会
    otmb
        9
    otmb  
    OP
       2015-01-22 22:16:20 +08:00
    @lidashuang ruby这么难啊?
    redvoilin
        10
    redvoilin  
       2015-01-22 23:28:05 +08:00
    这个没有可比性,java都流行多少年了,ruby在2004年才借着ror在世界范围内引起注意,那个时候java已经用的比较广泛了吧,推广java的大公司有多少,ruby是一个日本人发明开源语言,可想而知ruby的推广力度有多少,一个语言能不能广泛应用真不是它有多优秀决定的,我相信,如果让同时会java和ruby的人做一个web应用,没多少会选java吧
    otmb
        11
    otmb  
    OP
       2015-01-22 23:53:21 +08:00
    @redvoilin 搞j的人说ruby做不了复杂网站:(是这样子么?
    msg7086
        12
    msg7086  
       2015-01-23 00:24:09 +08:00 via iPhone
    @otmb 可以赚钱啊,只是机会没那么多。
    Java基本就是拿一大堆库来揉在一起,并且不停地和编译器做斗争。好处是傻瓜都会,不担心写出来的东西没后人懂。ruby 对脑力要求要高不少。
    otmb
        13
    otmb  
    OP
       2015-01-23 01:02:30 +08:00
    @msg7086 不停地和编译器做斗争,啥意思?
    msg7086
        14
    msg7086  
       2015-01-23 02:55:08 +08:00
    咦 提醒系统挂了么没收到你的at提醒。
    既然起床了那就用电脑回复你了。

    这么说吧,写Java你得非常完整地实现各种设计模式,非常仔细地处理异常,等等。
    这是一种臃肿式的开发,对于设计超大型系统(例如银行系统)非常好,因为这些系统不在乎钱的问题,可以招1000个码农来开发一个系统,每个人只要在设计模式的保护下负责自己的一小部分就行了。

    而Ruby,或者说RoR,则是提倡灵活性。花点时间写一个测试,再花点时间编码,然后让自动化测试来保证程序的正常运行。同样一个网站可能只要10个人来做就行了。

    Ruby被人称道的地方也是为人诟病的地方,就是他的灵活性。你永远不知道一个Ruby程序员做一件事情会用什么样的代码来做,甚至是你从来没想过的方法。我之前就遇到过一个栗子,你有时间的话不妨试一下。

    用C/C++/Java/C#/Python等语言实现以下功能。再用Ruby实现一遍。
    给定一个二维的字符数组(或者相同功能的容器),从左上角按逆时针连接字符串输入。
    比如

    spiral_print([
    ['a','b','c','d'],
    ['e','f','g','h'],
    ['i','j','k','l']
    ]) # -> 'aeijklhdcbfg'

    spiral_print([
    ['a','b','c','d']
    ]) # -> 'abcd'

    string spiral_print(vector<vector<int>> matrix);
    msg7086
        15
    msg7086  
       2015-01-23 03:06:59 +08:00
    好像漏说了编译器问题。
    Java是个很古老的语言,结局就是为了兼容以前的设计,所以得不停上一些难看的hack。
    之前的泛型就是个典型。
    同理还有那几个不是对象的基本类型,以及因此带来的装箱拆箱问题,和因为装箱拆箱而带来的各种坑。
    像Ruby这样更接近纯OO的动态语言里,用 2.days.ago 或者 1.megabytes 都是习以为常的事情。
    很快你就会被这些语言惯坏了。你想想在Java里获取2天前的DateTime你会写得多痛苦。
    iamshaynez
        16
    iamshaynez  
       2015-01-23 10:56:45 +08:00
    Java和如今活跃的语言比,很多时候就像一个老迈严谨的大叔,跟创业阶段的年轻人。后者有想象力,活跃,但难以预期,前者控制着这个世界主流的财富和资源,异常的自律,喜欢规则,严格约束。

    这是自我进化的结果,所以java如今在所有巨型公司内部,所有需要稳定性大于效率的系统上都是唯一选择。作为同时写Java和业余写php和swift的程序员,站在公司的角度java的优秀在于,代码虽然臃肿但是非常易读,人员流动的再频繁带来的隐患也是相对偏小的,代码review的时候WTF/min的数量,java基本上是小于其他语言的项目的。
    freeswift
        17
    freeswift  
       2015-01-23 15:04:24 +08:00
    @iamshaynez 分析的靠谱
    windyboy
        18
    windyboy  
       2015-01-23 16:44:50 +08:00
    ror 要做到j2ee 目前做到的事情,一样会弄得复杂无比
    只是爱好者,随便写个可以运行的程序,ror优势明显
    otmb
        19
    otmb  
    OP
       2015-01-23 20:30:31 +08:00
    @windyboy ror不能开放复杂程序?
    redvoilin
        20
    redvoilin  
       2015-01-24 00:16:35 +08:00
    @otmb 当然可以开发了,哪种编程语言不能开发复杂的程序?
    williamx
        21
    williamx  
       2015-01-24 08:48:11 +08:00
    感觉ror框架不错,但是 ruby 真不怎么样。
    ren2881971
        22
    ren2881971  
       2015-01-24 10:57:36 +08:00
    还只是个小众开发语言。。 面对企业开发的复杂业务比较疲软吧 。
    还只是个玩具。。
    hitsmaxft
        23
    hitsmaxft  
       2015-01-24 13:03:16 +08:00
    java 适合用来对付一堆能力平平的码农

    ror 嘛, 适合有创造力的团队

    别 yy, 大部分人都是前者。 所以选什么看 leader 的选择
    nine
        24
    nine  
       2015-01-24 16:48:24 +08:00   ❤️ 1
    @williamx
    你错了
    Rails正是因为ruby才变得如此强大

    @otmb
    Java要不断的教人怎么使用Java,然后人多了才可以进行创造。
    Ruby不用,学习完如何使用(轮子)了,立刻投入创造活动中去了。

    然后回头看看一堆讨论语言优劣的人告诉他们

    ruby很好啊,balabala
    答:ruby运行太慢了。

    可是Ruby开发快啊。
    答:PHP开发快啊。

    php缺少aaa、bbb、ccc.....怎么快啊
    答:搞那么复杂干嘛,PHP就是简单啊,做东西快。

    项目一旦大了起来之后,没有这些会拖慢开发速度。
    答:有学习这些和写单元测试的时间,我都迭代多少个模块了。

    没有单元测试覆盖,一个复杂的系统你怎么能快速迭代呢?
    答:复杂的用Java写就好了。

    Java写起来成本高啊,需要人太多了。
    答:ruby根本无法完成大型系统啊

    果然如此么?

    百度有这么一个方案 http://www.zhihu.com/question/20790576
    觉得自己做了一个很牛X的大型方案,殊不知,这在Rails里是一个标准组件。
    反观Java社区呢?


    无论你说出什么,他们总会告诉你ruby不行。
    但是他们不知道,Java从出生到现在,C++众都在说Java不行。
    PHP从流行到现在,Java众都优越感十足。

    但跟上述语言不同的是,Ruby生产效率太高,有跟你们贫嘴的时间,早开发一堆产品出来了。
    算了算不划算,布道成本高,收益甚微。

    最无奈的是,他们有最后一条理由击溃你:“Ruby是日本人开发的!我才不用!”


    所以。。。
    wingyiu
        25
    wingyiu  
       2015-01-24 17:40:12 +08:00
    rails style is the future
    williamx
        26
    williamx  
       2015-01-24 19:33:28 +08:00
    @nine 呵呵呵
    msg7086
        27
    msg7086  
       2015-01-24 20:08:14 +08:00
    @nine
    @williamx
    其实就是我前面说的,Ruby不需要你去和编译器做斗争,可以用一种舒服的语言/语法去写代码。
    而且Ruby语言本身就可以用来做DSL。
    看看rake就知道了,现在我做自动化已经完全抛弃makefile改用rakefile了,谁用谁知道。
    还有像testing也是DSL,可以在Ruby语言框架内写测试代码。

    而且我最近正在试着给项目做去Rails化,把Rails剥离出去,改用Grape之类的轻量级实现方案。
    开发起来感觉也很好,框架基于DSL,代码是Ruby,也没见有什么不方便的。

    当你说ROR框架不错的时候,其实就说明了Ruby很好。没有这样一个优秀的语言,就不可能有ROR这样的方案。(比如Laravel没有了rake就只能用artisan这种奇怪的东西,etc)
    lujiajing1126
        28
    lujiajing1126  
       2015-01-24 20:58:00 +08:00
    其实我觉得有一个问题是
    java太普及了,以至于很多学校,培训机构大量生产所谓了解、或者说精通java的人,其实啥也干不了,什么都不懂,或者只会按培训的教材干活,他们只会ssh框架,然后在那说java怎么怎么牛逼,以前这种简历一收一大把
    但是一般用ruby的人,不会特别菜,一般都学习过其他的语言,java,php或者其他的,有很多语言的开发经验作为背景,所以能力就还不错
    不过话说回来ruby开发真的相当快。这对一些创业公司来讲,速度就是生命线
    otmb
        29
    otmb  
    OP
       2015-01-24 21:09:21 +08:00
    @lujiajing1126 不是说ruby比java简单么?
    既然java程序员可以批量生产,ruby程序员为什么不行呢:)
    nine
        30
    nine  
       2015-01-25 01:33:30 +08:00
    @msg7086
    你看,就是不管你怎么说,他们“呵呵呵”
    我也呵呵呵,懒得说
    datou552211
        31
    datou552211  
       2015-01-25 09:38:42 +08:00 via iPhone
    用java的,会考虑效率,安全,复杂需求解决方案
    datou552211
        32
    datou552211  
       2015-01-25 09:41:57 +08:00 via iPhone
    @williamx ror离不开ruby。其他语言无法完美实现ror
    williamx
        33
    williamx  
       2015-01-25 11:02:07 +08:00
    @datou552211
    @msg7086
    我说“ ror 不错”可能没有表达正确,我只是指它是一个完整的框架(从前端到后端、从表现到数据),然后不需要太多的折腾就可以让新人上手,就可以出 demo,仅此而已。对其的一些理念,比如“约定优于配置”之类,我很保留意见。
    至于 ruby 语言本身,我确实只能“呵呵呵”。
    williamx
        34
    williamx  
       2015-01-25 11:08:00 +08:00
    @otmb 太灵活的东西,掌握起来就有难度,想精通更是要化大力气,又不是非其不可,再加上性能上的缺陷,愿意大量投入的公司并不多。就业面既然乍,自然就不会有大量的人涌进去学习。
    说白了就一句话:不划算。
    msg7086
        35
    msg7086  
       2015-01-25 11:17:14 +08:00
    @otmb 大概是因为ruby还需要一些创造能力和全栈能力吧。
    先说一句,我没有学过java,虽然上过java课但是是直接用c#的概念强推过去的。
    我只从周围的情况来看,java程序员更适合几十个工程师围着一个项目来开发,而ruby程序员很多都是full stack,两三个人搞定整个网站。
    java的好处就是人多,跑了一个只要马上再招一个就行了,而ruby stack上,懂的人相对少,如果跳槽周期长也就算了,遇上短期工那一个酸爽。

    @williamx 不知道 ruby 语言本身有什么好呵呵的。
    如果你平时都是用 haskell 啊 clojure 啊 scala 啊之类的那就当我没问过。
    williamx
        36
    williamx  
       2015-01-25 11:58:43 +08:00
    @msg7086 上面已经提到过一点:太灵活。
    比如括号,什么时候可以省略,什么时候不可以省略;
    比如字符串 %q %Q << <<-;
    比如赋值时的逻辑不统一 x, y, z = [1, 2, 3];
    至于 elsif 这样华丽丽的缩写我就不吐槽了,习惯就好
    至于循环要怎么写,是 for, for/in, each {}, 还是 each do {},还是使用其他的各种迭代器 times, map?我无力吐槽,至今没有彻底掌握,分不清是关键字?函数?——也没兴趣再去深究。
    之余其他的还有很多——很多,就不一一列举了。

    这种无力不像是以C++/Java 背景去学习 Erlang,是由于不同的思维方式引起的;这更像是一开始就没有设计好,天马行空让人完全把握不住脉络、理不清逻辑所导致的。
    williamx
        37
    williamx  
       2015-01-25 12:00:27 +08:00
    所以只能“呵呵呵”了。
    msg7086
        38
    msg7086  
       2015-01-25 12:13:35 +08:00
    @williamx 太灵活算是把双刃剑吧。
    单纯循环的话,一般 5.times {} 这样。
    容器遍历的话,list.each / map 即可。
    在写DSL的时候,这种灵活性会节省下大量的时间。
    相反Python或者C++/Java里,你会不得不为了迎合编译器的口味而写上很多原本可以省略掉的括号,我觉得这才是让人呵呵的地方。
    williamx
        39
    williamx  
       2015-01-25 12:35:23 +08:00
    @msg7086 括号可不光是省略就完了。你还得知道什么时候可以省略,什么时候不可以。你如果可以给我概况一个,我也算是学习到了!
    还包括为什么可以 `if v=='xxx'; then;` 却不可以 `while v='xxx'; do;`;
    说到 do,它有几种用法,什么时候可以省略,什么时候不可以。

    如果你觉得代码想怎么写就怎么写,不管别人看得懂看不懂,那么 ruby 是比较方便,反正怎么弄都可以——我也可以很快就撸个网站出来;如果代码是要给人看的,大家一起合作,就得统一规范,那 ruby 只能人为的约定很多规范,全靠大家自觉(噩梦一般)——“约定优于配置”这样的口号也就不难理解了。
    msg7086
        40
    msg7086  
       2015-01-25 12:50:02 +08:00
    @williamx 只要不产生歧义的都可以省略啊
    比如 a = f(b) -> a = f b
    a = f(g(b)) -> a = f g b #当然这个加上一个括号会比较好

    if 语句很少会像你这样写。我们一般是这样:
    if foo?
    stmt1
    ...
    stmt5
    end
    单句就是
    var1 = 0 if var1.nil?
    return if var2.empty?

    do和end相当于{},也相当于C/C++里的{},用来引出一个块 <block>,比如

    data.each do |item|
    do_something item
    p item
    end

    或者单行版本
    data.map { |item| item.reverse }
    (可以写成更简单的 data.map &:reverse <函数式风格>)

    ruby本来就是这样一个风格。给予用户最大的自由度,让编写代码的人可以跟着「自己的规范」来写程序,而不是跟着「编译器的心情」来写。团队开发当然会有自己的代码风格 <code style>,就算不是团队,也可以根据大众的代码风格[1]来写。而且代码风格问题不光只有ruby有吧,哪种语言没有?Haskell 还有换行不换行风格之分呢。

    [1]: https://github.com/JuanitoFatas/ruby-style-guide/blob/master/README-zhCN.md

    话说,靠大家自觉难道不好吗?一定要用法律 <syntax> 一般的东西来束缚程序员吗?
    jamiesun
        41
    jamiesun  
       2015-01-25 17:12:32 +08:00
    java是搞流水线生产的,你ror能搞吗,不想死你就搞。
    wuxqing
        42
    wuxqing  
       2015-01-25 18:52:34 +08:00
    java适合大部队
    RoR适合特种部队
    otmb
        43
    otmb  
    OP
       2015-01-25 18:56:10 +08:00
    @wuxqing node适合特种部队么,亲:)
    GeekGao
        44
    GeekGao  
       2015-01-25 22:38:04 +08:00
    Java EE 陈旧项目一坨坨的,而且这类程序员也较cheap!
    otmb
        45
    otmb  
    OP
       2015-01-25 23:31:11 +08:00
    @GeekGao 不是说很贵么,肿么cheap了:(
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2383 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:05 · PVG 10:05 · LAX 18:05 · JFK 21:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.