我相信很多人都同意,Ruby/Rails 是非常棒的技术,这么好的技术,却没有普及,大家认为障碍都有哪些?
是 Ruby 语言的入门门槛太高?那怎么降低学习门槛呢?或者说,怎么帮助初学者更好的入门 Ruby ?
是 Rails 部署太困难?国内的托管环境,支持 Rails 的太少?那么,要做 Rails 主机的话,技术难点在哪里?
还是有其他原因?
1 是 rails 部署比较麻烦 2 是相比 php 和 python 的 web 框架不太好上手 3 是现在 ruby 除了 ralis 就是 ralis 就又重复了上面的问题 相比 python ruby 的库太少了 而且 python 各个领域都活跃 所以大家都去学 python 了
没有大量的企业使用,那么学会了怎么产生价值?语言,框架只是工具,这个工具要能产生价值才会有很多人用。显然,目前不具备这个环境。我本人喜欢 ruby,是因为从团队成本考虑,一个 ruby 工程师就可以扛起来 web 的开发工作,不需要几个人做。
#11 楼 @Saito fork 三个进程当然不是 3x 内存了,操作系统当然知道你三个 ruby 解释器是相同的,这部分显然无论多进程还是多线程,都是只占一份内存。
换成线程安全未必能省下多少内存。线程安全无非就是加锁或者搞 thread-local。而且,往往就是 thread-local 了,所以内存还是一样占的。(补充:因为很多东西是依赖当前状态的,真要改成线程安全,不用 thread-local,差不多就是得重写了,而且重写其实也没用,重写无非就是把 thread-local 变成 request-local,状态还是多份)。
这么多 Web 框架,为啥就 Rails 特别能吃内存,很多框架也都不是线程安全的...
#15 楼 @bhuztez 你说的是理想情况。但是目前 CRuby 的 GC 不是 copy on write friendly 的。目前只有 REE 是。
It is observed that a lot of memory in Ruby on Rails applications is taken by AST nodes (of both the Rails framework and the application source). People generally run multiple Rails application instances (application servers) to serve a Rails website. If the different Rails application instances can share the memory of the AST nodes with each other, much like how C/C++ programs/libraries share program code with each other, then it will result in significant reduction of memory usage.
The POSIX API allows one to implement this, by using the fork() system call. On modern Unix implementations (Linux, FreeBSD, MacOS X, whatever), a child process created by fork() shares most of its memory with its parent process. If one forks a 500 MB process, it will not result in 1 GB memory usage, but probably like 500.1 MB. When the child process (or the parent process) writes to a piece of memory, then that memory is copied, preventing the parent and child process from writing to each others' memory. This process is called "copy-on-write".
However, Ruby's garbage collector is not copy-on-write friendly. Its mark-and-sweep algorithm implementation stores the mark bit directly inside objects. A garbage collection cycle will thus result in all objects being written to (or in operating systems jargon: the memory pages of the objects are made dirty). The OS will copy all that memory, thus negating the effect of copy-on-write.
我觉得是这么几个原因: 1、国内大量码农对前沿技术比较迟钝,同意@fredwu 说的,过两年应该会好 2、技术圈里缺乏推崇 ruby 的领军人物,目前比较有影响的也就 CSDN 肉饼一位,而且最近几年也谈的不多 3、缺乏有影响力的产品,如果不是因为豆瓣,国内恐怕也不会这么多人谈 python
咱们大家可以解决的是第 3 点,所以,努力开发 nb 的酷产品吧
中文资料太少,或者深入的书籍太少。ruby 或者 rails 的发展和变化太快。中文的资料更加跟不上。比如说你拿个 1 年前的 rails 3.0 的文档在 rails 3.2 上做时就会出现很多问题,初学者都不会解决。
对于那些 PHPer 来说,没有 STEP BY STEP 的东西他们是不会干的,而拿到一个到处出错的教材他们是会疯掉的,而 ruby 中文基本很少这种资料,或者基本过时。
Ruby2 解释器没有什么飞跃的话 过几年也火不起来了 ror 刚出的时候不也红极一时 现在其实用的人更少了 根本谈不上国内技术慢的问题 1.9 出来以后 用的人又开始慢慢多了
我认为是 门槛有点高, Rails 要求 初学者 擅长 Linux 和 英语, 这两点是,国内主流 大学生 和 程序员 都不具备的条件。 而且国内的主机部署环境也不成熟,也提高了门槛。
我个人认为,主要是 浮躁
二字,很多人因为 浮躁
的原因来学习 Rails 以求速成,快速离开也是因为 浮躁
。入门门槛,文档,性能,统统抵不过这两个字。
如果 ruby 的排名能紧跟在 php 后面,那国内的 ruby 的时代可能就到了。还是需要 ruby 足够成熟足够有影响力,至少性能方面不能比 php 差太多吧,感觉 ruby vm 发展的太慢。
Bad:
Good:
IMHO
个人感觉,ROR 门槛略高,但不是真正的高。主要表现有 3 点 1、没有太多成品的产品,满足某些特定需求的应用,比如 redmine,做项目管理。新人大部分都喜欢这样的东西。这也是 php 为什么比较受新人欢迎,写不出强壮的代码,能部署好一个应用,也可以敲开一些公司的门了吧。 2、gem,ROR 的快体现在具体功能会封装抽象成插件,要用这个功能,你要稍微去了解下具体的 gem 的使用。对新手来说,特别是还没入门或者刚入门,不太想深入学习就能快速弄出一个应用就比较困难。当然,听了很多人说,ROR 本来就不是为那些不学就想用的人用的。 3、思想变化比较大,从 rails2 到 rails3,各种提取、删除和改变。已经没刚学 rails2 的那种可以把握它的感觉了。
第 3 点是我个人看法,可能很多人都不认同,但是我个人感受比较深。。。
@fahchen 我觉得你说的理由才是最重要的理由,Ruby 的工作机会少,而且集中在上海和北京,一些刚毕业的孩子会担心找不到工作,光是这点就吓退不少想尝鲜的,如果在普通公司呆过几年,PHP 或者 JAVA 用熟了,工资待遇也不差,工作稳定,这时就更加不想转 Ruby 了,为什么要放弃安稳的工作去学一门连工作都不知道能不能找得着的语言?
最后能撑下来大概都是这样的人: 0.短期内没有就业压力。不是富二代,就是技术特别好,或者已经掌握了 Java 等保本技能,不愁找不到工作的,才能静下心来研究 Ruby。当然也不排除有人眼界特广,心特坚定,砸锅卖铁也要学 Ruby 的。 1.对.Net 或者 Java 没兴趣。免疫培训机构的“企业级解决方案”洗脑营销。 2.乐于折腾。买不起 Mac 也得会折腾个 Linux,不是看不起 Windows,试过在 Windows 上部署 Rails 开发环境的都懂的。熟悉命令行。当年跟大学的基友介绍 Ruby,对方回答“这玩意还不成熟吧,还要用命令行,不能用”,我囧……(感谢 RubyInstaller 和 RailsInstaller 项目,现在在 Windows 上部署 Rails 开发环境简单很多了,虽然命令行还是少不了) 3.知道 GFW,会翻墙。否则 gem install rails 那步就死翘翘了。 4.接受 Ruby 那种非 C 系,看起来有点古怪的语法。 接受不了的都倒去 PHP 了 5.没有去 Python 阵营。 Python 也是优秀的语言,Ruby 的强力竞争对手,而且还有豆瓣这样的榜样,加上有较多新创公司试水,Python 在小众中显得比较大众。
这么一条条下来,剩下做 Ruby 开发的就真没多少了。
最后,我在等着你们吐槽为什么我是从 0 开始数的。
其实一个不可忽视的原因是:
大量的程序员,在之前的很长时间,花费了很大的功夫,经受了长期的洗礼 (虽然,很多洗礼都是地狱一般的洗礼), 他们才拥有了现在的地位,Ruby 是个破坏者。如果从 Ruby 开始,他们的很多理论,很多实践方法,换句话说:他们已经付出了太多努力,不希望重新回到起点。因此从里心里拒绝接受 Ruby.
#37 楼 @xranthoar 从我这个初学者的角度,缺乏那种一步一步实现某种案例的书籍,基础的语法了解以后就不知道该如何做了。毕竟这个时候最需要鼓捣出一点成果来激励自己一下。
看了 LS 的讨论 发现最重要的原因还是在于 大家把 ruby 弄的都太局限了
ruby 是门艺术 并不仅仅是在 rails 上 但是在国内和国外用的最多的还是 ror 看看 python 几乎什么地方都能看到用处 数据库 服务器脚本 自制软件
为什么 php java 能好找工作?就是因为应用范围广。如果 ruby 还是只抱着 rails 不放,后果很可怕。
看看网上卖书的情况也能了解到,ruby 完全可以用在服务器管理、程序开发等等方面,可是关于除 rails 以外的书几乎都没有市场。WHY?
ruby-china 算是大陆最大的 ruby 论坛了,但是 10 个帖子,5 个帖子是 rails 的,3 个帖子是闲话讨论,2 个帖子是招聘。这难道还不能反映出问题吗?
一门语言想要发展必须多样化,这就是为什么出了 jruby ironruby 等等,可是我们不珍惜,看看 ironruby 多少时间没更新了,ironpython 却依然更新着,这 2 个都是同一组人去管理的,为什么他们选择了 python 而暂时放弃了 ruby?
ruby python lua 完全可以同时称霸游戏脚本语言的,可是现在只有 python 和 lua 还在被人使用,ruby 只能默默的在 rpgmaker 上发臭(这句说的有点难听 请见谅 但是是事实,RPGmaker 虽然还在更新,但是框架是死框架,脚本修改后虽然也可以做除 RPG 以外的游戏,但是很别扭,就好像你用鸡蛋非要烧出豆腐的味道一样)
造成这一切的不是别人是我们自己。受众度不是看你的网页效果做的有多少好,而是你的实用度,如果在各方面都有使用的人了,官方就能向更多领域推广自己。
工作并不是阻碍喜欢 ruby 的东西。我可以工作不用 ruby,但是闲暇之余我可以用其他方面来填补对 ruby 的爱。
初学者发发牢骚: 1.易学难用(主要是被 java 静态思维限制住了,学校的时候都宣传 Java 了。) 2.说 ruby 很多都和 rails 相关,不知道是 ruby 库太少,还是 ruby 只能做 rails。我想学 ruby,天天却听到 rails,觉得有点畸形了,老停留在 rails 的荣耀之上。
@daddy2000 的确,现在说到 Ruby 就是 Rails,本来通过 Rails 来吸人气是很不错的,但是搞得 Ruby 跟 PHP 一样只适合做 Web 开发实在不好。不过也很高兴有 Ruby Motion 这样的项目出现,希望 Ruby 能够得到全面的发展吧。
ruby 目前最大的问题是跟 web 开发绑定得太紧 总不能想做点什么非 web 的事情都要自己造轮子或者写接口吧 非 web 的第三方库严重不成熟
另外就是 ruby 本身的性能 虽然说现在机器已经是硬件资源过剩的时代了 但别的语言十几 M 搞定 用 ruby 要几十 M 而且还慢 我知道肯定有人会说 1.9 的性能有提升了 但是有多少发行版默认升级到 1.9 了 从这一点就能看出在主流企业应用中 ruby 的用户非常少
个人认为有 3 个: 1.Ruby on Rails 的部署比较困难,特别是 Rails2 的版本以及在 Windows 平台; 2.Ruby 没有一个类似于其他语言的高级 IDE,调试的时候比较困难,Refactoring 的时候更加麻烦; 3.开发框架成熟的只有 Rails,只能应用与 B/S 架构。
老贴又被翻出来了?现在我的想法有点变化,ruby 的流行过于依赖 rails 应该算是事实。不过原因可能是多样的,比如系统维护我还是倾向于使用 bash+python,因为所有的 linux dist 都支持,而 ruby 就不好说了,由于主要使用 rvm,我不确定在没有 rvm 的情况下是否能够正常的执行我写的脚本,so......