用了两天Rails,就开始怀念Python了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
27493586
V2EX    Ruby on Rails

用了两天Rails,就开始怀念Python了

  •  
  •   27493586 2011-07-12 16:31:29 +08:00 24421 次点击
    这是一个创建于 5205 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. Rails的文档和书跟Python比起来,都是渣渣,看惯了Python条理清晰的文档,我看到类似doxygen生成的东西就想关
    左边那是啥? http://api.rubyonrails.org/
    看看Python的。 http://flask.pocoo.org/docs/ br />
    能不用iframe嘛喂? http://www.ruby-doc.org/docs/ProgrammingRuby/
    这才叫美。 http://docs.python.org/

    2. logger打出来的东西居然不带行号和文件名?那和我自己print有什么区别?错误信息里也是,
    undefined method `map' for #<String:0xb4a3a5c>
    我自己代码里用到map的地方都删了,系统代码出错了至少应该告诉我在哪儿啊

    3. Rails官方那本agile的书,一上来就咣咣咣生一堆满是magic的代码出来,也不讲清楚干啥用的。后来还是找了本Rails Tutorial从底向上走了一趟才勉强弄清楚了Rails里文件之间乱七八糟的关系。

    4. 陡峭的学习曲线并没有带来多大程度上的开发效率提升,自动生成的代码在脱离了官方那几个例子之后用处也不大了,自己手写也多不了几行。
    可能因为我没用到Rails的ORM。所以没有感觉到Rails的好处。自动测试啊,TDD/BDD之类的开发辅助工具倒是很强大,不过现阶段只想先上手。
    回想去年这个时候自学Python,找了几本书并排着看,每本都讲得很清楚,没有任何难度就入门了,再之后学django/flask/web.py/bottle也都是轻松上手。Python党的文笔和美感就是比Ruby党的要好。而且Ruby/Rails代码有太多对效率提升没多大帮助的Magic写法了,无故加大了学习曲线。

    5. 如果不是因为Python的json, u'xxx', unicode encode/decode error的话,我还用python。Python的语法是最接近数学和英语的,是我用过的这么多语言中最接近完美的一个。


    结论就是,希望没用过Python的Ruby/Rails党去试试Python,你们会上瘾的。
    62 条回复    1970-01-01 08:00:00 +08:00
    reus
        1
    reus  
       2011-07-12 16:55:25 +08:00
    1:严重同意
    2:错误信息的前面不是有文件名和行号嘛,比如:
    t.rb:1:in `<main>': undefined method `map' for "ok":String (NoMethodError)
    t.rb就是文件名,1就是行号
    3:没看过不作评论
    4:ruby正是用很magical的metaprogramming来提高开发效率的,可以用更少的代码表达更多的意义
    5:python3应该在unicode方面比较方便些,不过,python2搞清楚了,注意点,也是没问题的
    levon
        2
    levon  
       2011-07-12 16:55:52 +08:00
    楼主能简单分享想你学习Python的过程吗?
    hellmash
        3
    hellmash  
       2011-07-12 17:01:54 +08:00
    万能的python
    pcx3802482
        4
    pcx3802482  
       2011-07-12 17:09:36 +08:00
    “python是工程,不是艺术。”
    gotounix
        5
    gotounix  
       2011-07-12 17:12:14 +08:00
    尝试过rails,感觉还是django清晰、简洁。
    27493586
        6
    27493586  
    OP
       2011-07-12 17:19:45 +08:00
    @levon
    网上down几本python的书,打开一起看。
    当时我用的最后一本也是用得最多的一本是Learning Python还是Beginning Python来着,400页左右,
    其实里面我也就重点看了看dict/set/list这一章,
    其他章节内容和C++/Java差不多,用到的时候再去查也是非常容易的。
    入门之后就再也没看python的书了,一直用官方doc,
    官方doc查找起来非常方便。
    有C++/Java之类的经验的话,学Python很快。
    @reus
    4. 太magic就没有可读性了,当然rails熟手还是能读懂,但是如果新手想从研究前辈的代码开始学习那就难于上青天了。相反python的新手可以马上把v2ex的代码下下来看,读起来没有rails的程序这么困难。
    下面随便找了两段代码,python基本上就是英文,rails基本上就是魔法诵唱文
    https://github.com/livid/v2ex/blob/master/main.py
    https://github.com/fdv/typo/blob/master/app/controllers/articles_controller.rb
    至于开发效率我现在也只有一个肤浅的感受,就觉得generate和我以前自己写相差的时间并不是特别大,更多的时间是在完善generate之后的东西上。再用一段时间看看。

    5. Python 3据说是搞定了unicode的问题,而且去掉了u'xxx'的格式。我现在的问题出在json.loads和json.dumps,有时候json.dumps到redis的字符串是"u'xxx'"的格式,有个u在前面那就必定loads失败了,有时候又是"key":"val",双引号好像也会出错。而数据来源又太复杂,一直没解决,就学了学Rails
    Paranoid
        7
    Paranoid  
       2011-07-12 17:44:22 +08:00
    10天,20天后再回来,还有此情况,那说明ruby可能不适合你。

    正如 python 的缩进可以枪毙100回一样,只是个人喜好而已。
    liwei
        8
    liwei  
       2011-07-12 17:50:05 +08:00
    本来两种语言的设计哲学就不一样,个人爱好而已
    imonyse
        9
    imonyse  
       2011-07-12 18:12:06 +08:00 via iPad
    1. 请用apidoc.com,google出来排第一的还真不一定是最好的。 如果你用textmate,查询快捷键 ctrl+h 非常方便。
    2. 不太明白你的意思,我看出错后的backtrace log还是很清晰的啊。
    3. Agile那本书是因为dhh有参与,所以算推荐,不能算官方书籍。官方的是网站上的guide,我个人觉得还是讲的挺清楚的。
    4.不光是bdd的那套东西,实际使用中,你结合textmate的bundle snippet,无数简单易用的gem,程序写起来简直行云流水般痛快。话说我第一次用cucumber-rails写集成测试时,脑子里不停蹦出一句话,就是FUCKING AMAZING !

    补充几点:
    我原来使用python,写过一些pyqt的应用。后来学web编程,接触rails之后就完全转到ruby了。在我看来,python除了执行速度,再没有任何特性吸引我了。但你用解释性语言,则注定速度不是你的第一考虑重点。

    针对你的问题:
    1. ruby的block,第一次用还觉得有点python2.6之后的statement的感觉,用多了才发觉要灵活太多了。
    2. 因为ruby的纯面向对象特性,所以你可以在rails里使用像 1.hour.ago, 2.days.from_now, 3.megabytes 这样的语句。
    3. 再看看最新的rails 3.1引入的asset pipeline,默认支持 coffeescript 和 sass,你会感觉这就是一个总是走在最前沿,并且充满活力的社区。
    27493586
        10
    27493586  
    OP
       2011-07-12 18:24:23 +08:00
    @imonyse 多谢指点,我期待的就是您这样的回复。我再用一段时间看看,可能我还没用习惯
    est
        11
    est  
       2011-07-12 18:34:40 +08:00
    用了两天 <此处插入新事物名字>,就开始怀念 <此处插入类似旧事物名字> 了
    roamlog
        12
    roamlog  
       2011-07-12 18:44:33 +08:00
    1, 查 api 的话, 我推荐 http://railsapi.com/
    2, log 对我来说蛮清晰的
    3, dhh 那本书其实一般, 我更推荐 Ruby on Rails Tutorial Learn Rails by Example, 就是你看的这本
    4, ruby 和 rails,因为非常灵活的原因, 要想精通确实有难度, 而且要学的周边的东西也蛮多的
    5, 说到 unicode 的话, 我个人觉得 ruby 1.9 关于编码这一块的处理方式很恶心...
    imonyse
        13
    imonyse  
       2011-07-12 19:29:11 +08:00
    @27493586 不知道你看railstutorail时,有没有看/买他的screencast。多看看screencast(免费的极力推荐ryan bates的screencast.com),其实也可以学到不少只看书学不到的技巧的,比如其他人的编码习惯,常用快捷键等等。

    如你所说,现在刚起步,推荐你看一眼这个:http://railscasts.com/episodes/250-authentication-from-scratch
    reus
        14
    reus  
       2011-07-12 19:34:39 +08:00
    @27493586 可以给个示例程序看看吗?json.dumps如果要输出u'xxx'这样的格式,只有可能是参数使用了repr()吧
    Numbcoder
        15
    Numbcoder  
       2011-07-12 19:49:26 +08:00
    为什么拿 rails 和 python 比?
    ruby 不止有rails。
    是ruby 的优雅才造就了华丽的rails
    iwinux
        16
    iwinux  
       2011-07-12 20:56:21 +08:00
    1. 分清楚 API reference 和 guide 的区别。跟 http://flask.pocoo.org/docs/ 对应的应该是 http://guides.rubyonrails.org. 至于 API 参考,http://railsapi.com/doc/rails-v3.0.8rc1/ 这个很不错。

    2. 你说的 logger 输出是指日志文件、终端还是浏览器页面里显示的信息?在终端和日志文件里都能看到出错代码的行号。

    3. 教程推荐 http://ruby.railstutorial.org/ruby-on-rails-tutorial-book

    4. 开发效率的提升比较难描述,但以我自己的经历来说,我初学 Rails 的时候做过一件很爽的事情,就是用 acts_as_taggable_on 这个 gem 在不到半小时内给自己的网站添加了 tag 支持(从搜索到这个 gem 到实际测试通过)。Python 里最接近的效果估计只有 Django 能做到了吧。

    最后补一句题外话,无意冒犯,但我觉得楼主用 Python 的 Web 框架也没写过太复杂的东西。
    bhuztez
        17
    bhuztez  
       2011-07-12 21:52:18 +08:00
    @imonyse 其实python也可以 1-hour-ago 的嘛
    fanzeyi
        18
    fanzeyi  
       2011-07-12 22:04:14 +08:00
    我觉得基本从Python转到Ruby的基本都会有这样的想法- -

    嘛 当然在往后我也不知道了。。
    27493586
        19
    27493586  
    OP
       2011-07-12 22:09:05 +08:00
    @iwinux @imonyse @roamlog 多谢指点,受益匪浅!

    没做过复杂东西,4月开始学做网页和js,当时由于有python的经验就直接用了python的框架,这三个月js框架和python框架都换了不少。Rails才出来那会儿我试着学过,还是看的agile那本书,rails网站上放着的。。当时看的感觉和现在的感觉一样,一头雾水。但是一直想学学Rails,因为cucumber太酷了,而且很多先进技术都是Rails带出来,其他框架再copy
    Rails Tutorial确实要好很多,不过今天学Ruby去了,没怎么看,接下来应该会继续学Rails。

    谢谢所有回复的朋友们
    marco
        20
    marco  
       2011-09-09 16:58:44 +08:00
    Rails Tutorial 罗嗦得让我想杀人。
    Rails Guides 算是超级实用派的,不过学习曲线比较大。
    ssword
        21
    ssword  
       2011-09-09 17:19:19 +08:00
    蛋疼。
    huacnlee
        22
    huacnlee  
       2011-09-09 17:32:31 +08:00   1
    哎,我们都看 http://rdoc.info 的,相比 Python 的文档,这个才是好的!
    chloerei
        23
    chloerei  
       2011-09-09 18:03:24 +08:00
    我是从agile入门的,对风趣的语言和大留白的排版印象很好(当然有人会和我完全向左)。而且教给了我很重要的测试驱动开发。
    perrywky
        24
    perrywky  
       2011-09-09 18:05:04 +08:00
    python是语言,rails是框架
    你对ruby不熟,当然觉得rails很难,因为你同时要学两样东西,你当初也是先学python再学django的对吧
    如果你有耐心,rails tutorial是不错的教材,对于没有ruby基础的人来说很适合
    ayanamist
        25
    ayanamist  
       2011-09-09 18:08:35 +08:00
    @27493586 只说第五点,你可以if isinstance(data, unicode): data = str(data)先预处理一下……unicode和str很容易区别开使用场景的。
    另外python默认logging也是不打印traceback的呀,要自己加代码才行。
    cngithub
    &nbs;   26
    cngithub  
       2011-09-28 23:53:48 +08:00
    学Ruby从Rails入手不建议。建议先学Ruby再玩Rails。用Ruby作者Matz的话来说,Rails充斥了太多猴子bug,过多的灵活性,让新手,尤其不是一路跟上来,直接接触Rails3.1的新手觉得很莫名其妙。 建议先读读Ruby的一些文档,再来看Rails。
    chloerei
        27
    chloerei  
       2011-09-29 00:04:41 +08:00
    @cngithub 求Matz原话出处
    cngithub
        28
    cngithub  
       2011-09-29 00:10:08 +08:00
    @chloerei 松本行弘的程序世界 里面有一章谈Ruby on Rails,Matz拿Rails开玩笑^-^

    还有个八卦,Matz一直对Ruby on Rails而不是Rails on Ruby 有点小意见 ^-^

    不过说真的, 一上来直接硬干Rails,强烈不推荐,会失去很多了解Ruby的美的机会。 先找一个小型的Ruby web框架也比Rails好。 比如这个:https://github.com/padrino/padrino-framework
    chloerei
        29
    chloerei  
       2011-09-29 00:35:52 +08:00   1
    @cngithub 翻了下这本书与 Ruby on Rails 相关的第6章,牵涉 Rails 负面的就这句:

    page-171

    “……可是,决定 Rails 生产效率的并不仅仅是 DRY 或是 CoC,而主要是利用了 Ruby 的元编程能力,几乎可以说达到了恶性滥用的程度……可是,正是因为这样的彻底发挥才实现了 Rails 的强大功能……”

    其余描述猴子补丁是针对猴子补丁的范围,而不是针对 Rails,而且 Rails 显然是一个猴子补丁的成功范例。所以说 “用Ruby作者Matz的话来说,Rails充斥了太多猴子bug” 我觉得不妥。

    确实 Rails 3.1 更新了很多东西,直接上 Rails 可能会遭遇很多魔法,但是我觉得不用低估好的程序员的适应能力。Rails 的示范作用是很明显的,比如 method_missing 在单单看书或者自己写的时候,参照不到好的 api 设计,看了 ActiveRecord 的动态 find_by 方法才会了解到这个技术应该怎么用(Metaprograming Ruby 就是拿 ActiveRecord 做例子)。

    Matz 疑惑为什么 Ruby 在 Rails 前面也在 page-171 找到了。
    cngithub
        30
    cngithub  
       2011-09-29 00:44:06 +08:00
    @chloerei 谢谢chloerei的严谨与求证。书不在身边,借给朋友了。在我印象中,matz说猴子补丁,是与Ruby on Rails那章放在一起的。而他举的很多例子,其实还是对Rails的过于灵活有点小意见的,只是Matz为人行文较平和,所以是一个半玩笑的口吻。所以头脑中有上文那个印象。
    arden
        31
    arden  
       2011-09-29 00:51:28 +08:00
    NodeJs现在很火~
    leishao
        32
    leishao  
       2011-09-30 09:50:39 +08:00
    语言之争永远是最精彩的
    yy77
        33
    yy77  
       2011-10-11 13:26:15 +08:00
    vven
        34
    vven  
       2011-11-21 23:48:52 +08:00
    花了一下午,分别看了下python和ruby的简单基础
    感觉两种语言的语法比较类似,可能是先看python的关系,感觉它的语法更简洁一些
    ruby的 @ 符号老让我想到存储过程....
    小试了一下感觉都挺有意思的,期待继续深入
    hit9
        35
    hit9  
       2012-10-22 22:29:01 +08:00
    最近一个项目团队需要用到rails. 但是我看rb的语法看了一晚上,一直在叨叨不如 py优美.

    rb太花哨了, 这么多语法糖.用起来真的好乱. 还有很不习惯那个 @ 符号. 而且rb不如py那么简单明了. 是rb太高级了还是... 真是玩不上手.
    fwee
        36
    fwee  
       2012-10-22 23:21:19 +08:00
    @hit9 无语。。你说的语法糖是哪些?反正ruby的特性基本都在很多框架中大量运用过,可以证明并不只是很甜..而且不是ruby太高级,只是你先入为主,因为我看py的lambda什么的也感觉很乱..
    ledzep2
        37
    ledzep2  
       2012-10-23 10:58:26 +08:00
    半年不用ruby就彻底看不懂了。 python随便谁一看就明白。 这就是优势。ruby我看除了写的程序能短两行,别的再没什么特别的优点了把
    tceisk9584
        38
    tceisk9584  
       2012-10-23 11:49:06 +08:00
    偏向性太强了!
    insub
        39
    insub  
       2012-10-23 15:24:22 +08:00
    以我个人感受来说,作为前端,没有C/JAVA/PHP基础,只想做一个网站而不是转行的话,python入门的学习曲线比rails高好多倍
    rails基本上看一本书就够,实用性够强,做过一个例子,再看完后面的基本解释,大多想做的东西都可以自己做了,出来的东西由于rails“约定高于配置”,也不会太烂
    甚至都不用学习ruby

    当然要强调一下,我并非一个纯正的coder。
    insub
        40
    insub  
       2012-10-23 15:28:14 +08:00
    相比前面好多同学的建议,没有任何基础的情况下,我反而更倾向于从rails入手而学ruby,对于培养兴趣和感觉,理解什么是写程序,非常有帮助。
    其实当初因为豆瓣的影响,是先尝试着学习python来着
    insub
        41
    insub  
       2012-10-23 15:38:08 +08:00
    结贴来了。

    后来查到,转发的数据包通过公网网卡出去后再没回来,然后google.com.hk和aliyun.com的数据包则可以正常返回。

    于是提交工单,阿里云的官方回复如下:
    “您好,这个问题已经确认,目前还不能很好的支持,我们工程师正在试图修复这个问题。产品经理还没有给出具体的修复时间。我们会尽快确认时间然后通知您。”

    WTF......
    karma
        42
    karma  
       2012-10-23 17:18:57 +08:00
    嗯嗯,楼主说得对.
    insub
        44
    insub  
       2012-10-23 18:03:55 +08:00
    楼上上那条属于发错地方了........
    unionx
        45
    unionx  
       2012-10-24 12:28:27 +08:00
    来来来,吐槽一下Java?
    nil
        46
    nil  
       2012-10-24 12:33:27 +08:00
    嗯嗯, 测试一下键盘
    davidqhr
        47
    davidqhr  
       2012-11-01 17:33:43 +08:00
    呵呵,我能说我是一个rails转django的痛苦中的娃么。。。
    hit9
        48
    hit9  
       2012-11-21 17:22:33 +08:00
    时隔一段时间,我又回到这个帖子.想笑了... 还是觉得py是如此难得的语言.ruby真的很棒,但是py简直是更棒...(不要打架不要打架.和谐和谐..)

    rails是好东西啊,怎么诞生在ruby社区了呢?
    tedd
        49
    tedd  
       2012-11-21 17:26:34 +08:00
    @insub 真的?那我倒要去试一下
    firsthym
        50
    firsthym  
       2012-11-21 17:57:59 +08:00
    我用rails几个月时间,刚开始接触确实有太多magic的东西让你头大。不过越到后面,反而还觉得这些magic的东西方便。我是c/c++出生,所以现在依然喜欢静态编译语言,觉得心里比较踏实。
    wdhitman
        51
    wdhitman  
       2012-11-21 18:03:52 +08:00
    学ruby从 什么教材入门比较好呢。。。另外弱弱的问一句。怎么建立新主题-。-
    6711411
        52
    6711411  
       2012-11-22 09:18:01 +08:00
    不想多说什么, 回去用python 就是了。
    jyoe
        53
    jyoe  
       2012-11-22 09:52:21 +08:00
    API和Guide本质上是有区别的吧? 个人认为 一个是工具字典类的东东 一个是入门套件 不可一起比较

    Rspec和rake是我比较钟意rails的地方之一。 可能Python也有类似的东西。
    我觉得能把你想做的事情给做好是衡量一个语言或框架比较中肯的对比方法。
    fwee
        54
    fwee  
       2012-11-22 15:59:36 +08:00
    @hit9 不是怎么诞生在ruby社区,而是不可能诞生在python社区吧。虽然不太了解python,但是前几天看过个py版的rspec我就理解了。。
    hit9
        55
    hit9  
       2012-11-22 18:30:25 +08:00
    @fwee 好吧.我是在抱怨~ rails让人眼红
    liZHang
        56
    liZHang  
       2012-11-22 22:32:38 +08:00
    这完全属于吐槽贴,没必要
    vclwei
        57
    vclwei  
       2012-11-29 22:37:52 +08:00
    我也是刚学习Ruby,用C系语言用的久了,看到 Rails 哪些 magic 的东西,一开始很郁闷,因为想不到她底下是怎么实现的,感觉卡在这里继续不了了,直到这两天了解到 Ruby 元编程的一点概念,有点茅塞顿开的感觉。
    vclwei
        58
    vclwei  
       2012-11-29 22:39:18 +08:00
    不小心挖坟了,Sorry!
    hooopo
        59
    hooopo  
       2013-02-14 21:30:42 +08:00
    蛋疼。
    j
        60
    j  
       2013-03-18 12:43:21 +08:00
    node.js观光团路过ror: 这string前面带了冒号就不是string了哎,好神奇。
    2dian718
        61
    2dian718  
       2013-06-23 12:59:20 +08:00
    rails好大的坑阿。。。
    ruby一个,rails一个,大量的约定。。。
    然后测试rspec,cucumber都是是坑。。。
    angelface
        62
    angelface  
       2013-07-09 15:54:20 +08:00   1
    @hit9 那是因为, 只有ruby的表达能力, 才能写出rails
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5341 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 09:15 PVG 17:15 LAX 02:15 JFK 05:15
    Do have faith in what you're doing.
    ubao 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