Ruby or Javascript? 哪个适合我? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ewangke
V2EX    问与答

Ruby or Javascript? 哪个适合我?

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

    先说说我,我是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
    PRO
       2013-04-08 23:54:24 +08:00   1
    我的建议是:

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

    如果不超过 20,那就 Node.js 好了。
    Livid
        5
    Livid  
    MOD
    PRO
       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
    PRO
       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
    PRO
       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
    PRO
       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
    PRO
       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
    PRO
       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     Solana     4058 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:16 PVG 08:16 LAX 17:16 JFK 20:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86