V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ewangke
V2EX  ›  问与答

Ruby or Javascript? 哪个适合我?

  •  
  •   ewangke · 2013-04-08 23:37:03 +08:00 · 9074 次点击
    这是一个创建于 4247 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这个问题困扰我小半年了,不是一时心血来潮;虚心向大家请教,请大家结合我的情况和需求给些中肯的建议,为我指明一些方向,不要演变为语言、框架的争论。我知道同一件事情,基本所有的语言都可以做,但毕竟生态、入门难易程度等等方面很不同,这才造成了一些语言在某些领域更流行。

    先说说我,我是iOS独立开发者,Objective-C很熟,server端会写些简单的python脚本,懂些web/db的东西但不系统,至少没有流行框架的使用经验。自我感觉最弱的是前端,经验为0。db部分还凑合,至少做些小东西没问题的。(以前做ERP,所以事务、范式这些基本的东西还算挺熟的)

    我希望掌握一门语言还有它相关的工具集,实现类似Parse.com那样的服务给自己用(更容易按自己的想法做,而且成本比用他们的低得多)。另外,希望可以做一些简单的响应式的web,可以接触一些HTML5。作为独立开发者,时间比较自由。两年没有学习新语言了,也想通过学习一门新语言扩展一下眼界。基本的Ruby/JS/CoffeeScript都能读得差不多,但没实际经验。希望可以把自己一些零散的东西串联起来。

    我喜欢接受新的编程思想,但不太喜欢语法糖。我知道V2EX里面喜欢python的人很多,但也希望有rubyer/jser的建议。

    这两个repo可以参考说明我需要的东西:
    https://github.com/deployd/deployd
    https://github.com/helios-framework/helios

    请大家帮帮忙,要喷的轻点^_^
    42 条回复    2015-08-09 13:44:31 +08:00
    ewangke
        1
    ewangke  
    OP
       2013-04-08 23:46:54 +08:00
    @Livid 可以给些建议么?
    xst
        2
    xst  
       2013-04-08 23:47:02 +08:00   ❤️ 1
    很多年前,Js不能用来做很多东西... 从自有了v8有了Node,世界变了...
    Ruby 感觉最大的好东东就是 RoR, 偏Web后台的。
    Js 可以前后台兼顾。但快速开发没RoR方便。

    看你个人喜欢了 :)

    不过从现在的PaaS提供商来看,
    他们主要乐于提供PHP、Python、JAVA、NodeJS等服务。
    ewangke
        3
    ewangke  
    OP
       2013-04-08 23:51:45 +08:00
    @xst
    嗯你说的这些优缺点,我也了解过。如果要做前端,js是绕不过去的。
    但Ruby社区的一些框架更成熟,更傻瓜一点。一直感觉js有些“乱”,node社区进化太快,担心自己跟不上。
    像Meteor这种前后端全js一步到位的方案(mongodb),总担心绑得太死,不够灵活。而且对提升自己的理解不利。
    Livid
        4
    Livid  
    MOD
       2013-04-08 23:54:24 +08:00   ❤️ 1
    我的建议是:

    如果最后项目总体动态页面数会超过 20,那么一定 Python/Ruby,越高级的框架越省力。

    如果不超过 20,那就 Node.js 好了。
    Livid
        5
    Livid  
    MOD
       2013-04-08 23:59:12 +08:00   ❤️ 1
    V2EX 是用 Python 的 Tornado 框架写的,这是一个来自 Gmail 创始技术团队及前任 Facebook CTO 的作品,也一直处在非常活跃的开发中,最近刚刚出了 3.0 版本。

    除了 Tornado 之外,V2EX 还大量用到了 rq。

    Tornado + rq,是一个用起来非常开心,也能够很快出作品的组合。

    我知道类似的东西在 Ruby 社区也有很多,我只是分享对我来说最好的。
    fangzhzh
        6
    fangzhzh  
       2013-04-09 00:28:24 +08:00
    @Livid Tornado + rq 是什么? google了下,没有搜到rp代表什么.
    xst
        7
    xst  
       2013-04-09 00:30:32 +08:00   ❤️ 1
    Livid
        8
    Livid  
    MOD
       2013-04-09 00:30:35 +08:00   ❤️ 1
    fangzhzh
        9
    fangzhzh  
       2013-04-09 00:32:16 +08:00
    @ewangke 我也面临同样的技术选型的问题. 我是C++服务器开发出身,虽然对C++开发服务端技术很熟,但是已经对C++的超慢开发速度是深恶痛绝了
    ewangke
        10
    ewangke  
    OP
       2013-04-09 00:36:38 +08:00
    @Livid
    似乎对Node.js的不太建议,是因为它(及一些framework)不太成熟么?还是觉得只是重复造轮子?
    协程这种东西,python是有的相应的方案的,ruby我不太清楚
    Livid
        11
    Livid  
    MOD
       2013-04-09 00:41:03 +08:00
    @ewangke 我目前正在做一个用 Node.js 写的项目,但不是 http 协议的,而且交互功能不超过 10 个。

    Node.js 的很多 library 提供的功能,都需要嵌套 callback 来完成。我承认自己目前对这种做法还不够熟悉,所以总觉得比较心悬。
    ywencn
        12
    ywencn  
       2013-04-09 00:41:32 +08:00   ❤️ 1
    一起学不就是了。。你还有时间困扰你半年啊,半年ruby都入门了。。
    Livid
        13
    Livid  
    MOD
       2013-04-09 00:41:37 +08:00
    但是如果是一个本来打算用 gevent 写的程序,那么改成 node.js 还是很适合的。
    ewangke
        14
    ewangke  
    OP
       2013-04-09 00:42:31 +08:00
    @Livid
    感觉tornado的文档比较好,但教程不是很多,学习曲线有些陡,还是我有些外行?感觉Flask的教程更多一些。。。我看过Flask一部分文档,但当时的需要是做简单的Restful API,还是稍微复杂了些。最后用的bottle.py

    @fangzhzh C++确实强大,但现在人力成本越来越高,多数时间里开发效率比运行效率更重要。而且系统的瓶颈往往只存在那极少的部分中。脚本语言比较灵活,而且容易做成插件,我接触到的一些游戏引擎里都有一定程度的脚本支持。
    Livid
        15
    Livid  
    MOD
       2013-04-09 00:45:16 +08:00   ❤️ 1
    @ewangke Tornado 提供了一个基础的 requestHandler,你可以在其上继承改写为自己整个项目的 BaseHandler,然后再根据最终的页面类型,继承为 WebHandler,APIHandler,然后你可以在这个过程中自己重新定义很多东西:

    - 如何验证用户
    - 需要添加 / 删除哪些头部

    这样的架构对于有一定规模的网站是非常方便的。
    fangzhzh
        16
    fangzhzh  
       2013-04-09 00:45:42 +08:00
    ror 学过一点, python写过一点, tornado没玩过, gevent没玩过, Node.js没玩过. 严重关注此贴最后的讨论结果!
    ewangke
        17
    ewangke  
    OP
       2013-04-09 00:45:51 +08:00
    @ywencn
    我维护着50多个iOS app,还在做新产品,还要带小孩。。。另外语言基本已经入门了。熟练掌握一两门语言的开发者,语言关入门一般不会超过3天吧,至少对我是这样。
    请教大家是希望少走一些弯路。虽然我对技术感兴趣,但我更希望把时间花在产品上,而不是尝百草然后比较各种技术的优势。
    ewangke
        18
    ewangke  
    OP
       2013-04-09 00:49:06 +08:00
    @Livid 嗯我明白你说的意思。但我毕竟有些外行,所以希望先学习些抽象层次更高的东西;另外有没有基于tornado的一些解决具体特定应用场景的开源项目,我去学习学习
    lldong
        19
    lldong  
       2013-04-09 00:59:01 +08:00   ❤️ 1
    Objective-C熟练的话Ruby的很多概念很好理解
    ewangke
        20
    ewangke  
    OP
       2013-04-09 01:03:18 +08:00
    @lldong
    推荐一个入门框架吧?Sinatra还是RoR? 最近看了一些博客都在批评RoR太笨重太magical了
    darcy
        21
    darcy  
       2013-04-09 01:09:47 +08:00 via iPhone
    我咋觉得你两种都需要学,前端离不开javascript呀
    Los
        22
    Los  
       2013-04-09 01:24:43 +08:00
    来ruby社区看看它的活力 -> http://ruby-china.org/topics
    PrideChung
        23
    PrideChung  
       2013-04-09 01:50:35 +08:00   ❤️ 3
    @ewangke
    说到技术选择,我不能不提 Marco Arment,Instapaper的作者。这哥们一直很淡定地在用着PHP,理由很简单:学习Python或者Ruby会花费不少时间,一段时间内降低他的生产力;他对PHP了如指掌,坑再多也坑不到他;基本上Python或者Ruby能做的事,PHP也能做,切换语言没有本质上的改变;他更愿意把时间花在产品而不是技术上。

    其实你如果想自己做一个功能完整的网站,JavaScript是逃不掉的,问题也就不成立了,或者应该改成 Rails VS Node.js? 如果重点还是放在iOS开发上,只是想自己做App的Backend,顺带再搞个App的Landing Page,不如就用你最熟悉的Python好了,框架用Flask、Django都行,我隐约觉得Ruby和Rails都不是你的菜。

    PS:关于Ruby框架的选择,最近有篇很热的post
    http://robbinfan.com/blog/40/ruby-off-rails
    ewangke
        24
    ewangke  
    OP
       2013-04-09 02:04:14 +08:00
    @PrideChung
    你说的意见最贴近我的真实想法,看来我可能问了一个被问过无数遍的“蠢问题”。重点还是在iOS开发上,python我最熟也最喜欢。但总感觉python的开源社区不太活跃,很多新的想法都是从ruby/nodejs社区开始实现的。

    仔细想了想,还得结合自己需要做出一些东西来。我主贴的两个链接是很好的参照,我可以用最熟的python一点点实现我需要的部分功能。

    PS: 你推荐的这篇文章,我看过至少3回啦^_^
    Livid
        25
    Livid  
    MOD
       2013-04-09 03:24:50 +08:00
    @PrideChung 你说的我完全赞同。

    首先满足项目的需求,其次满足自己的好奇心。
    ShengjiaWANG
        26
    ShengjiaWANG  
       2013-04-09 03:38:04 +08:00   ❤️ 1
    我和po主几乎一样的情况。。。

    我是从ERP(SAP/IBM WESB)转iOS独立开发者。早年熟悉java,后来自学OC转iOS开发,多和静态语言和后端打交道,对web端的动态语言和流行框架接触的少。刚开始的时候我用java做web端以及服务器端的web service,但慢慢还是觉得java有些太重了,并且有些无趣。所以差不多两个月前我也纠结于po主现在的问题。

    我自己的感觉是这样的:js,html,css这些是逃不掉的,然后就是在python,ruby和php之间选,其中我个人相对略懂php,但是对python和ruby更感兴趣,但两个我都完全不熟悉。在比较了一段时间后选择了ruby。主要还是觉得ruby更优雅,社区也更活跃,就是学习曲线略陡峭。对po主来说,先用最熟悉的python实现,熟悉一门动态语言和一个主流web框架,跨过从客户端到web端这个坎以后,再学别的应该很快,多少都是相通的,可以触类旁通。

    ps 所以我自己的话,等完全上手ruby后,也一定会尝试python的 :p
    ywencn
        27
    ywencn  
       2013-04-09 08:45:31 +08:00   ❤️ 1
    @ewangke ruby和node基本上是个互补的东西啊,既然你有那么一大堆app,
    那你就可以用ruby on rails来给那一堆app写web网站主页什么的。用node来提供这些app的服务器端API。
    yangg
        28
    yangg  
       2013-04-09 09:52:46 +08:00   ❤️ 1
    不管你用什么语言,总是会用到js, 所以js是必学的(可以到 http://www.codecademy.com/ 学js,两三天应该可以把课程学完,后面就是实际使用了),so
    hidden
        29
    hidden  
       2013-04-09 11:05:58 +08:00   ❤️ 2
    说说自个儿经验吧,用过2年rails,2年nodeJS,1年半Objective-C,半年php...
    rails:适合做一些傻瓜化项目,页面多,多开发人员共同维护,最好别去折腾性能,我们以前是用来做一些企业服务web软件。感觉ror的东西容易被遗忘,我现在都快忘了ruby怎么写了,我个人是觉得以后是不会再用了。不喜欢做那种类型的产品。
    nodeJS:由于以前写前端,所以js比较熟,也比较喜欢。这玩意儿估计一辈子都不会忘。和其他语言不同的是你要花时间纠结异步模式。从感觉上来说这玩意儿小巧玲珑。要往小了用,做移动互联网项目的server端非常合适,天生json api,app的接口一般都不会多。由于代码自由度很大所以多人共同维护需要自个儿琢磨规范。
    php:这个才是写网页的王道... 入门简单,部署简单,随便找个人都会,不纠结。

    所以选啥可以根据你的项目和个人喜好来定,看你做的都是移动互联网项目,还是nodeJS或者python吧,py我没写过,不清楚是个什么情况, nodeJS需要经得起折腾,版本发展较快,各种思路变化。
    duhastmich
        30
    duhastmich  
       2013-04-09 12:01:08 +08:00   ❤️ 1
    @ewangke node.js 有模仿rails 的MVC框架, 好几个, node.js 有 express/connect 这样的框架, 它的middleware 很独特, node.js 还有 meteor, derby, hoodie 这样的, 那绝对不是重造轮子了, 我现在写coffeescript, 用express, 客户端用knockout
    chloerei
        31
    chloerei  
       2013-04-09 12:05:39 +08:00   ❤️ 1
    如果楼主希望学新语言、新知识,想接触规范化模块化的 Web 框架,那就是 Ruby on Rails。

    如果楼主是想尽快实现一个产品,那么用最熟悉的语言工具就行了,Rails 上手期比较长。

    前端 js 是唯一选择,用 Rails 框架也是 js 做前端。
    lldong
        32
    lldong  
       2013-04-09 13:11:10 +08:00   ❤️ 1
    @ewangke 如果主要是写service的话rails确实有蛮多不必要的组件,可以考虑sinatra或者rails-api。关于rails里面比较多magical的东西,我觉得是ruby的特性使然,也确实能提高开发效率。
    ashchan
        33
    ashchan  
       2013-04-09 16:40:43 +08:00   ❤️ 1
    Obj-C 与 Ruby 渊源很深也非常相象(两者都从 Lisp,Smalltalk 等吸收了不少东西),所以学 Ruby 会比较方便。JavaScript 肯定是绕不开的,至少前端会完全信赖它。

    就个人经验来说,不建议用 Node 来开发。繁重的 callback 太费劲。
    j
        34
    j  
       2013-04-09 23:22:46 +08:00
    jser对ruby的浅薄看法是:
    坏的方面:语法糖太多,对于新手来说就是坑有点多。
    好的方面:语法糖真好啊,所以才会有coffeescript吧,我们都爱coffeescript,它简直就是ruby和js生的儿子,等一下!怎么看起来更像python呢?
    notedit
        35
    notedit  
       2013-04-13 02:20:17 +08:00
    看来我跟楼主正好相反啊 做了三年后端 现在自己出来做ios

    正好我要学ios 如果楼主想学php/java/go/python的话(pyhton最好 用的时间最长) 咱们可以互相帮忙
    ewangke
        36
    ewangke  
    OP
       2013-04-13 02:25:27 +08:00
    @notedit 行啊,怎么联系你?你profile里没什么联系方式
    notedit
        37
    notedit  
       2013-04-13 02:27:53 +08:00
    @ewangke 昵称@gmail.com
    notedit
        38
    notedit  
       2013-04-13 02:29:08 +08:00
    @Livid 上条回复解析有bug
    zythum
        39
    zythum  
       2013-04-14 00:18:35 +08:00
    想起原来朱一说的一句话是 用jquery多了。都不知道js怎么写了。 后开看了angular,knockout什么的发现 tm的都不用写js了...

    上面的是吐槽。

    去死如果是自己玩,还是自己写的好玩。自己各种搭架子还是非常有意思的。
    bitsmix
        40
    bitsmix  
       2013-04-14 00:24:56 +08:00
    如果要是语言层面上。。我的感觉是:

    如果你以前学过别的语言,就别学 js 了。
    如果你以前没学过其他语言,那就学 js 吧。
    flyingkid
        41
    flyingkid  
       2013-04-14 01:07:50 +08:00
    @ewangke ruby的rack和sinatra很适合你。最近还有一个新东西https://github.com/helios-framework/helios
    vale
        42
    vale  
       2015-08-09 13:44:31 +08:00
    所以,博主最后选择了node.js 还是 Rails?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2678 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:01 · PVG 19:01 · LAX 03:01 · JFK 06:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.