Language Hopping, Ruby 为什么不火,一点瞎想 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
celadevra
V2EX    Ruby

Language Hopping, Ruby 为什么不火,一点瞎想

  •  
  •   celadevra 2020-07-18 10:12:01 +08:00 9491 次点击
    这是一个创建于 1911 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在技术栈间跳来跳去,说起来也是迁就自己的 ego 而不考虑解决实际问题的心态作祟。老是选择新的语言、框架就更是如此。

    这背后的动力一部分是被景仰和尊重的心理需(别人都不会用的技术我是大牛),另一部分则是对某项技术的社群形成了一个图像,希望别人用这个图像来描述自己和认同自己。

    虽然这种心态也让我获得了一些有趣和有用的经验,比如 Emacs,但总地说来是让我浪费了太多的时间在过各种 tutorial 和写 hello world 上。Language hopping 的结果就是始终无法深入钻研一个东西,也就不知道它能干什么,它的局限在哪里。

    这样看来,Emacs 的厉害之处在于“从入门到精通”(精通是个境界,这辈子都不可能精通的)提供了一条连续而无穷尽的学习途径,只要是和文本有关的问题,都可以尝试着用它去解决,并且在这个过程中可能又学到了一点新东西。Python 也是类似,入门门槛低,天花板几乎无限高,但中间每一层都可以探索。

    而 Ruby 的问题大概就是这么多年 Rails 独领风骚,基本上要求学习者写完 hello world 和 fizzbuzz 之后就开始研究元编程、DSL 和 Rails 的各种令人眼花缭乱的实现技巧,缺乏更广泛的问题域和连续的学习路径。

    作为比较新的语言,Racket 和 Roku 也有类似的问题(不知道为什么我对 R 开头的语言比较感兴趣)。不过我还是想学好 Ruby 去给 DHH 打工的,尽管只会 fizzbuzz (哭

    25 条回复    2021-02-21 21:50:18 +08:00
    hoyixi
        1
    hoyixi  
       2020-07-18 10:16:17 +08:00
    中国不火而已,不少自动化工具都是 Ruby 写的
    cmdOptionKana
        2
    cmdOptionKana  
       2020-07-18 10:33:03 +08:00 via Android
    曾经火过,但它的性能真的很差,语言和框架的优点被别的语言学过去了之后,它就开始熄火了。
    046569
        3
    046569  
       2020-07-18 10:48:28 +08:00   1
    国内的情况之前提过:

    t/682185#r_9125444

    2020 年还觉得 Ruby 性能差的很可能是在 2003 年写了个 Hello World 然后得出了结论.

    如果你只盯着 Web 这一块,那么得出的结论确实如此. Ruby on Rails 领先太久,久到后续的模仿者只能在易用性上努力,而难以在功能性上超越.

    问题是: Ruby 只应用在这一方面吗?结论显然不是的.

    macOS 上的第三方包管理器 Homebrew 了解一下?

    渗透利器 Metasploit 看过没有?

    嵌入式 mruby 玩玩?

    如果觉得是语言限制了你的发展(很可能是错觉,想想自己和语言设计者的编程功力差距),换一门?
    Numbcoder
        4
    Numbcoder  
       2020-07-18 10:48:55 +08:00
    @cmdOptionKana 和性能无关,90%的应用到不了语言性能瓶颈。Python 比 Ruby 性能还差,不还是一样火到不行。目前为止也没有见到那个语言学到了 Rails 的精髓

    总的还说还是与市场有关,国内没有一家大型用 Ruby 成功的公司,而国外则不少,没有大公司培养人才,自然就不会火。但是国外还是不错的,虽然不能称为火,但至少职位和薪水还是非常不错的
    Numbcoder
        5
    Numbcoder  
       2020-07-18 10:59:44 +08:00
    总的来说一个技术是否火,跟技术本身好坏关系不大,只跟市场和资本导向有关。PHP,Javascript,Python 无论从语言设计还是性能来说都是比较差的,但是一样能占据半壁江山。
    xizismile
        6
    xizismile  
       2020-07-18 11:02:55 +08:00 via Android
    语言只是解决问题的工具,不去考虑解决问题的方案,而是整天想着换工具。。
    xizismile
        7
    xizismile  
       2020-07-18 11:06:26 +08:00 via Android
    各种语言撕逼帖,A 语言比 B 语言好,C 语言比 D 语言棒。撕赢了又能怎样?输了又能怎样?改变了什么?提高了什么?解决问题的能力提高了吗?
    namelosw
        8
    namelosw  
       2020-07-18 11:16:26 +08:00
    国外搞 Ruby 的其实挺多的,大部分公司还都挺不错的。

    Ruby 之前应该算火过吧,虽然在榜上没那么高,但是如果光看湾区当时很多了。过滤掉很多死气沉沉的企业级开发其实当时 Ruby 用得不算少。而且 Ruby 社区感觉在当时是最好的社区,很有活力和探索的精神。

    由于 Ruby Web 有些性能问题,后来 Node.js 和其他技术栈相继火起来之后就被分流了。原来 Ruby 社区的人现在分别在写 JS,Scala,Clojure,Go,Python,Rust……总之啥都有。不过我个人感觉更正统的是 Elixir 。现在新语言 Go 和 Rust 之类的逐渐不把 OO 放在核心位置了,Elixir 就有点像去 OO 的 Ruby,Phoenix 也更像正统的 Rails 继承人。

    至于语言,这些东西很难说,基本上全是生态决定的。个人感觉 Ruby 比 Python 设计得好,更接近 Smalltalk 。Python 本来是抱上了科学计算和大学入门的大腿,现在在加个数据分析和机器学习基本坐实了。JS 就不用说了,写 Web 的基本不用不行。
    Numbcoder
        9
    Numbcoder  
       2020-07-18 11:18:55 +08:00
    @xizismile 因为在国内 IT 行业,至少有 60% 的技术人员不是真的喜欢技术,而是为了混口饭吃而已,他们最喜欢追求火的技术,也更喜欢和别人撕逼谁更火,因为只有在火的技术里才容易滥竽充数,多混几年饭而已
    celadevra
        10
    celadevra  
    OP
       2020-07-18 11:21:44 +08:00
    @046569 我不是 CS 出身,天资也非常一般,学 Ruby 一直没有找到感觉,但是也确实不打算继续 hop 。没找到感觉是指一直不知道该拿它来干嘛以及读完了入门书后应该怎么学下去。入门书读到 singleton class 之后基本也是懵的了,看到实际的 Ruby 代码会畏难。

    我是后学的 Python,但是读完 Think in Python 之后就可以上手写点简单的东西,工作中也用它写了爬自家网站的爬虫( long story )用来做数据报告。为了学 Ruby 也想过用 Ruby 重写一遍。但是看了 Net::HTTP 的文档就失去了八成的兴趣和 Python 的 Requests 的文档可读性、内容都没法比。

    我的感觉是 Ruby 的文档也好、应用也好,除了最通用的那部分之外就几乎全是围绕着 Rails 和抽象程度类似的框架。关于 Rails 的书,一年可能还有上百本在出来,但这之外的 Ruby 应用,几乎没有 rdoc 文档之外的资料。这就是我说的没有或者看不到连续的学习路径的问题。比较受欢迎的 gems,也会有很多人写 blog 介绍用法,但是这些文章会过时,而且不一定能解决实际场景中遇到的问题。

    你提到的那些应用,我没有 domain knowledge,所以研究起来估计会吃力。我觉得好的文档会对获得 domain knowledge 有帮助,而光看代码和 rdoc 对没有 domain knowledge 的人来说是很难走通的。

    所以要归纳 Ruby 不火的原因,我觉得文档和生态至少可以解释一部分。外来的工程师 /爱好者看不到文档,觉得 Ruby 不能更好地解决自己领域的问题,就不会用 Ruby ;而这进一步导致 Ruby 在该领域相对其他语言的差距扩大。

    并不是要抱怨什么,只是希望找到理解 Ruby 的合适途径并且能对社群有点贡献。
    namelosw
        11
    namelosw  
       2020-07-18 11:25:52 +08:00   1
    @xizismile 你在跟语言撕逼帖撕逼,撕赢了又能怎样?输了又能怎样?改变了什么?提高了什么?解决问题的能力提高了吗?

    语言代表了你可用的抽象,如果你不知道某种抽象存在,是没法高效解决某些问题的。用一用 COBOL 或者 Prolog 这些语言就能体会出天差地别。很多程序员的思路已经被语言限制固化住了,要写一些 generic 的业务,平台化的业务就写不出来,要不就是排列组合大量写代码,很多人意识不到还有其他解。

    比如 Github semantics,README 里面专门说了为什么用 Haskell,但是如果你不了解某类语言的存在,怎么能有效解决那类问题呢?
    046569
        12
    046569  
       2020-07-18 11:52:05 +08:00   1
    1. 不知道拿来干啥为啥要学?我感觉应该基于明确目的学习. Ruby 和 Python 高度重合,掌握一门就好了.如果是经常写爬虫,可能 Python 更适合你.

    2. Net::HTTP / URI.open 仍然偏"底层",日常是比较少用的.和 Python 的 Requests 相对应的你可以看看 Faraday 或者 rest-client .你提到的文档质量算是个历史遗留问题了,只能说勉强能用.社区也在讨论更新这些过时的东西.

    3. Gems 你可以在代码和测试中看到具体用法与文档.一般都托管在 GitHub ,如果遇到使用上的问题可以提 issue .

    4. 之前有人提出 Ruby Everywhere(Anywhere?) ,试图用 Ruby 解决一切问题,个人感觉是走偏了.

    5. 人人都可编程.入门的话很多人推荐 <<Ruby 基础教程>>,然而我觉得啃语法书很无聊,做点什么吧?
    pocarisweat
        13
    pocarisweat  
       2020-07-18 13:33:38 +08:00
    Just for fun,为了找工作的话在国内除了全栈,路还是太窄了
    love
        14
    love  
       2020-07-18 13:44:00 +08:00
    Ruby 这个语言设计得感觉乱糟糟的,代码可读性也不行。Rails 这套后端 MVC 现在也过时了。

    相反 JS 这个十年前我觉得很一般的语言,现在是我最喜欢的语言,比之前喜欢的 python 写起来更舒服,也许是社区智力投入多了,再低的起点也不怕。另外 JS 底子也好,如果是 PHP 再打扮也出不了门。
    secondwtq
        15
    secondwtq  
       2020-07-18 14:53:48 +08:00 via iPhone
    这语言全名不是叫 Ruby on Rails ?
    crella
        16
    crella  
       2020-07-18 17:52:16 +08:00
    leetcode-cn 把 Ruby 的支持去掉了。

    Python 和老 JS 的变量作用域都有点问题,Ruby 我不知道,应该是没有的。而 define_method 又比较灵活。
    wdhwg001
        17
    wdhwg001  
       2020-07-18 18:02:50 +08:00
    Ruby 的 API 设计有股 C 味是真的,没有自动高精度一类的特性对于科学计算也不友好。
    但是它已经早就是后续语言的设计标杆了,可以说它建立了一种编程语言的设计美学。
    agagega
        18
    agagega  
       2020-07-19 00:20:21 +08:00 via iPhone
    @wdhwg001
    C 味这个词太精准了 hhhh,松本行弘毕竟老 hacker 了
    chenqh
        19
    chenqh  
       2020-07-19 00:45:16 +08:00
    我还是喜欢 python 这种有最佳实践的,如果 python 性能有 php 性能那么高, 就更好了,
    至于 ruby,我不喜欢他的有多种方式做同一件事情的方式,而且怎么说呢,明明是多种方式做同一件事情的 ruby 居然出了最佳实践 ror.
    twl007
        20
    twl007  
       2020-07-19 02:50:20 +08:00 via iPhone
    看起来 Perl 是死透了
    MintZX
        21
    MintZX  
       2020-07-19 03:50:09 +08:00   1
    我是一个 ruby on rails 的开发。虽然经验不是很久,但是也开发了两年多了。

    一方面人在海外,ruby 的工作其实很多。虽然不算是火但是依然不愁找工作。另外一方面,初学 ruby on rails 的时候确实很痛苦,后来习惯了发现 ruby on rails 的设计。现在写 nodejs 和 flask 总觉的不是那么回事儿。很难受哈哈哈哈。ruby on rails 感觉很简洁。
    crella
        22
    crella  
       2020-07-19 11:56:20 +08:00 via Android
    @chenqh python 的异步框架有多少种?
    chenqh
        23
    chenqh  
       2020-07-19 13:04:16 +08:00
    @crella python 异步框架用的最多的应该是 tornado 吧,其他的感觉很少人用
    putaozhenhaochi
        24
    putaozhenhaochi  
       2020-12-07 08:43:12 +08:00
    Ruby 黑魔法太多了 /
    如果用来写应用层 过段时间估计就看不懂了
    ericguo
        25
    ericguo  
       2021-02-21 21:50:18 +08:00
    @putaozhenhaochi 用 Rails 就两个极端,不求甚解,或者明白所有魔法,在当中是挺痛苦的,特别是那些半路出家的写的 Rails,读起来确实怪,语言太灵活,甚至允许当 PHP 用。https://ruby-china.org/topics/30246

    不过如果你真的碰到好的 native 向 Rails 项目,那真的只能发自内心的的感叹一句写的像诗一样。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1162 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:40 PVG 01:40 LAX 10:40 JFK 13:40
    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