新手问题 绝大多数人都是有其他 web 开发背景的吧,感觉之前没有经验学习 Rails 特吃力

durden · September 17, 2012 · Last by JeskTop replied at September 28, 2012 · 6148 hits

多数应该都是 PHP、Java Web 干过转的吧,我纯属于业余爱好者,了解编程基础(variable、conditional、loop、OOP basics etc...),用 PHP 能够写个最阳春白雪的留言板,可以说没有任何实战经验,最近慕名而来开始学习 Rails(现在还在从 Ruby 基础开始学习),接触了一下 Rails,几点菜鸟体会:

  • 完全没有体会到传说中的 Rails 的速度,convention over configuration? 约定俗成大于配置?那不是得记一大堆的 Rails 特有约定吗?感觉规矩制定的死死,何以体现其灵活的?
  • 可能是因为当下 Web 开发中 Rails 是走在最前面的原因,除了 Rails 本身外,一大堆的‘行话’,让人望而生畏...

有完全没有任何经验直接开始学 Rails 并有小成的吗?想请教下你们的经验,谢谢!

  • 对了,还有一点,就是太重测试了,我的感觉是,做个 Rails App 一半都在写测试,对于行家来说这应是理所当然且顺手拈来的,Test Driven,但是对于我这类新手,特别是又没有其他 web(开发 in general)经验的人来说太过于繁琐了,我只想将功能先实现了

最后还想打扰大家帮忙看看下面这些 Ruby 的知识点都掌握后是否就可以开始 Rails 的正式学习了?还有欠缺的知识点吗?

Basics Conditionals Loops and Blocks Procs and Lambdas Classes Methods Modules Exceptions

STL Classes Strings Arrays Hashes Regexes

Techniques Inheritance and Composition Mixins

rails 适合熟练掌握 2~3 门语言和 OO 的喷友,不适合新手。

#3 楼 @daweiba 谢谢你的回复,果然,我比较喜欢 Ruby 的原因是感觉它特 intuitive,真的就像是 natural language 一样,而想学 Rails 就是听说它的神速,能想到的 website feature 都有相应的 gem 可以拿来用...但看来还是道行不够啊

这里的大部分是科班出身的把,所以这个问题可能很难回答你。

你的两个问题:

  1. 规矩定的死死:这个问题很难说把,对于我自己而言,rails 的各种约定不仅没有让我感觉到不适,反觉得很亲切。而且很多 rails 的约定都是 best practice,如果你是新手的话,现在理解不了也没关系,先背下来好了。好像也不多把。。
  2. 行话,这个就帮不了你了,是知识积累,只有多谷哥,多问人了

你以前学的东西,在我看来,已经足够上路开搞 Rails 了。挑个好教程很重要,好在 rails 的教程都很给力,神马?文档?。。。。。哎,这么好的天气别谈这种扫兴的事了

回答一下——

  • 约定大于配置:这个意思其实就是请大家一起说黑话,所以如果你是香港人可能就会不理解山口组的切口,这个没问题,一个办法是加入山口组(完整的学习 rails 官方站上各种 api、tutorial),这样马上就有一个靠山但是有组织约束,另一个办法是自己组建红星社(先看看 rack 框架——相当于 java 的 servlet 或者 python 的 wsgi——然后自己做一个 rails 出来),那就比较自由但是需要你自己挑头。
  • 注重测试这个你可能有些误解,据我所知,有一陀人一开始什么测试都不搞就直接开发网站了,所以别担心,测你会测的,慢慢学习积累
  • 关于科班出身,好像 IT 圈子里比例一直不是很高,即使是科班出身,我觉得与其说是科班背景保证了他的知识水平,不如说是个人兴趣决定了他去学各种科班和非科班的知识

补充一下,红星社其实也有人挑头了,楼主可以看看 sinatra@saito 同学对此很热衷,他还告诉俺一句黑话,说这叫 ruby off rails

Unknow user #8 September 17, 2012

楼主,我给你个建议,首先你有其他语言框架经验,没问题。第一步就是你要知道 http 请求的过程,根据这个过程来了解 rails,你会很快明白,你在什么地方要做什么事情。 拿我的情况来说,刚学 rails 的时候,真的一点基础都没,现在总结下来就是: 1、浏览器,发起请求(表单或者链接)到服务器 2、服务器由路由解析你要到哪个 controller 和 action 3、action 接收到你的请求,然后可以根据你的参数,访问模型对象,然后。。。增删改查对象(操作数据库)。 4、获得处理的结果后,经过 helper 的封装,配合 view 形成 html 回到浏览器。

恩的,很通俗吧,rails 就这点东西。。。。这个能掌握,我感觉就入门了。

#7 楼 @fsword 话说这个是 花花公子 提出来的。不是我... 可以去鸡眼找相关文档。

#8 楼 @help5305fff 这总结的太精辟了,非常感谢~

#7 楼 @fsword 我也看过一下 sinatra,的确很简约,但最终没有选择它的原因是资料(我指的是哪种 step by step 的书籍,因为没有其它的经验,必须得靠看书来学习)太少了,找了一本书 Cloning.Internet.Applications.with.Ruby,就是基于 sinatra 的,很棒很棒,唯一的问题就是连第一个范例都运行不过去,时间太久了,很多 gem 都大变样了,这我也觉得是 ruby web framework 的一个问题,更新的太快了

各种教材都写得巨差。90% 以上的作者,一方面说“你可以从零开始”,然后,实际上总是不由自主地依托很多关键知识,于是,初学者第三章就开始迷糊。

#12 楼 @xiaolai 神一般的总结啊,这完全就是我 N 本书都看不过前几章的原因~!

跟着楼主的话题,也谈一下感受:

  1. 约定俗成,这个非常好,免得团队再去定,但是不知道约定的时候很郁闷,比如前天看到的:中间表名称:kecheng_teacher,kencheng 必须在 teacher 前面,因为约定是按首字母顺序,这个郁闷到了,好像没哪里讲过。
  2. 行话没啥吧,哪门语言没有行话?只不过 Rails 发展最快,所以百花齐放,新东西一个一个蹦达出来,一个一个行话也产生,不喜欢最新的人开始是很郁闷。

#14 楼 @winnie 的确,我最早接触 rails 的时候隐约记得有个规定是和英语单复数有关的(具体是啥记不清楚了),我当时就在想,乖乖,这也规定的太细了吧。的确你说的在理,团队里面使用约定俗成的确很重要,我不在团队里面干活难怪感觉不到这得好处。

如果仅仅写个留言薄、个人博客,约定俗成觉得是累赘。但如果写大项目,就知道约定俗成的好处了

@durden 我去年刚毕业的时候差不多零基础,最开始也是直接上手 敏捷开发 那本英文 PDF, 之前学了半个月不到的 html + css,完全是照着葫芦画瓢把流程过了一遍,后来也没有复习下,现在估计那个 depot 让我做估计都不会做了。我的建议是

  1. 打好 ruby 基础,学的过程中肯定是要不断 google ruby 的一些基础用法,像 Array, Hash, String , File 这几个是最常用的,不妨花一两天的时间专门总结学习下
  2. 找一份新手友好的现成项目代码,这个帖子 介绍了些源码,我只看过 ruby-china 的,可以根据大家的意见选一个,把功能拆分开,弄懂各个模块的实现,可以新建个项目跟着自己写,敲代码是学习的最快途径
  3. html + css 这个应该掌握,刚开始可以先拿 bootstrap 顶下,后面开始尝试自己修改页面布局和样式,js 如果不会先不要学,把时间更多花在 ruby 上
  4. 大家说的最多的 github, 这个我的建议是用 github 学 git ,等到后面熟练了再学新用法
  5. 刚开始就不要纠结约定俗成的事了,等你做到后面会发现约定俗成的确是最佳实践
  6. 少说多做,一个人想要达到一定高度需要 1w 小时的积累,所以不要再泡 ruby-china 了,打开终端,编辑器,赶紧开始敲代码吧!

#12 楼 @xiaolai 李笑来居然也在这里混?真是非常意外啊

大家都在讨论书的问题,其实我现在很少从书上学东西了(除了一些基础知识),象 rails 这种急速变化的框架性技术完全应该搜索式学习,官网要翻一翻,然后看看在线教程(不是实体书),配合各种 github 上的项目代码阅读,这个比较有用些

#19 楼 @fsword 嗯。所以说,基础很重要。基础差,就做不到你说的这种。

#18 楼 @fsword 哈哈,笑来老师对 ROR 非常熟悉呢。

如果没有 Web 开发经验,搞起来必然会很吃力的,本来 Rails 就算是比较 Geek 的东西

我算是非科班、没有任何 web 开发经验就直接学 Ruby/Rails 的吧:-) 基础差,数据结构、算法、操作系统之类的都不懂。四级没过。 刚学 Rails 的时候用了一个月都没把 depot 搭建起来。

#23 楼 @hooopo 哈哈,我学的时候最正确的做法就是没去尝试搭建 depot,我是先通读了 web agile 那本书,然后知道作者是咋想的就好办了。 要说基础,确实还是有的,我接触 RoR 的时候 Web 也做了几年了(不是互联网,企业里各种应用吧),而且最早接触过 PHP,对 cookie 啥的不陌生,另外最重要的——那时我已经完全不使用 windows 了,所以没被各种 win 上的困难麻烦过

我也是新手,Rails 起步时确实让人晕头转向,Rails 那些“约定”看上去确实折腾。后来想明白了,弄懂一大堆概念确实很费力气,但之后再复杂的应用也不会超出这个圈子,为了这个辛苦点也值了,大投资带来大回报。

另一方面,我听人说“没有经历过用狼狈的手段解决问题,就不容易明白为什么需要框架,约定,模式……”(大意如此),能从这个方向考虑问题,就好理解了,写 Rails 耗费的一些额外功夫,是在为今后的扩展省下时间。

阳春白雪....是下里巴人! 没 web 经验做 rails 确实事倍功半,有 web 经验然后深感其他语言的不足再用 rails 就感觉如沐春风,甘之如饴了!

以前是做测试的纯新手撸过,感觉就是多练。遇到不懂的就去查文档,depot 折腾了半个月了,到处都是坑,但是解决问题的过程中真的受益匪浅..

和 lz 有相同感受。前几天看到《说 ruby on rails 很简单什么的都是骗人的!》 http://blog.dygvirus.info/?p=117,感觉挺有意思的

看书看了两三章,又要回过头看其他的东西,之后再重新看一遍,再看两三章,再学其他的东西……不断重复中

现在决定还是先把 HTML,CSS,JS,HTTP 等过一遍

其实 每一项单独拎出来都不算难,但是相关的东西太多 很快人就晕掉了。

对于哪些有完美主义倾向的人,会很快陷入一些细节而不能自拔...

#28 楼 @oa414 OMG...谢谢分享这篇文章,我不学了...这是个坑啊

只有受过限制才知道自由的可贵~ 先用用别的框架或是 CMS 垫垫底儿:)

@hooopo 我要有你一半强就知足了...单表继承多态继承用法现在完全不自信了。。。缓存过阵子还得请教你 @durden rails 不太适合新手,虽然很好写,但是涉及了很多设计模式的概念所以不太好理解,但是 ruby 确实非常适合非科班出身的人接触编程,建议先学好 ruby,然后去了解一些 rails 的基本概念,mvc,model2 啊啥的。。。这样就可以在 rails 上自由发挥了~勤读源码,其实不难的

话说 会 php 的话 推荐先看看 cakephp,抄 rails 抄的很像,但是因为是 php,所以代码很不优雅。。。不过算是思路上最接近 rails 的了 我基本上做了一年的 cakephp 然后转 rails 的时候 没有学过 ruby 看一些 samples 就可以构建一些小的玩具了 基本思路都是用的 cake 的经验

先把基础打牢吧,ror 是用来做 web 开发的,网上有很多免费的 html,javascript,css 基础视频,asp.net 或者 java 教学视频里面都会讲这些,电驴上面找找,优酷里面翻翻,入门的时候看着别人敲代码比看书强,等有了一定水平再去看书。

4 楼的发言 sounds 很 strange,中文和 English 混杂的说法 make 我 feel 坐不 stable。。。

挺庆幸接触 rails 早于接触 php 倒是... 如果 php 出身的话,东西不一定做得出来,一堆坏习惯先带到身上了...

#35 楼 @fleuria 请问 PHP 会养成哪些坏习惯呢?我倒觉得 PHP 挺直观的呀,内陷到 HTML 里面(我知道这样日后很难维护),想在页面中写入什么功能,就直接写上去

#37 楼 @durden 这不就是坏习惯么 ><

我先看 PHP,没学会怎么写网站; 再看 JavaEE,被恶心到了; 再看 Ruby on Rails,终于摸到门道一个网站要怎么写。

所以我觉得我在 Web 编程是通过 Rails 入门的。Rails 组件虽多,但对 Web 开发都是有用的。有人喜欢从精简的框架开始,往后做加法;我就喜欢走别人铺好的铁轨,按需增删组件。看你怎么想,总之从 Rails 入手是可行的。

#39 楼 @Rei 最近在想一个问题,感觉现有的教程都是一步一步走,‘搭积木’式地教课,然后涉及的知识点非常多,新手们会经常感觉力不从心容易忘。不知道有没有一个可行的方法‘庖丁解牛’去解析简单的源代码。至于约定俗成,其实有时候是看官方文档不细心或者英文不够好把。例如建立 join_table 的时候就应该按照 lexical order。

Active Record creates the name by using the lexical order of the class names. So a join between customer and order models will give the default join table name of “customers_orders” because “c” outranks “o” in lexical ordering.

#40 楼 @sundevilyang 我觉得新手看完《Agile Web Development with Rails》最新的中文版就好了。但是实际上经常有人喜欢走「捷径」:

  1. 听说另一本书更好就看另一本,结果没一本看得完
  2. 不用书里的 Rails 版本,直接装了最新版,觉得这样会追得快
  3. 高估了英文能力去看英文最新版
  4. 急于求成,听到别的框架简单、易入门就中途而废了

新手搭积木是最好了,写一个搭积木教程其实很难,很容易略过自己觉得不重要但是新手并不懂的东西,但是《Agile Web Development with Rails》被我亲身检验过可以从 0 开始入门。

还是希望新手不要急,我学了半年才写出第一个实用程序(一个博客),一年后才开始了解到 Web 编程需要去学些什么,现在第三年不断发现有要学的东西。跟一些悟性好的人比我算是挺慢的,不过庆幸自己没有三心两意一时学这一时学那。Rails 一直在改动,去掉不好的组件,引进好的设计,所以我用 Rails 的过程也跟着进步了。

@Rei 恩,你的这个是比较踏实的,我之前是看 AgileWeb4 的英文版,但是发现我要用的数据库是 mongodb(是基于 lbs 的应用),后来我就看了 Ruby and MongoDB Web Development- Beginner’s Guide 这边,直接讲的是 mongodb 和 rails 开发的,需要配合着 AgileWeb4 来看,后者能讲比较细致,mvc 内部的原理等。

我高一没读完就辍学在家玩了,对编程没有任何概念,后再接触到 ruby on rails, 抱着 programming ruby 后面的 api 一个劲的背,是在忍不住就看了 Agile Web Development with Rails 中文版,当时的 rails 版本也跟书上的不一样,也是折腾那个 scaffold 折腾半天。到现在也就是对 rails 的程度一般把。别人说不会 ruby 最好不要看 ruby on rails,但我觉得这话不是针对我说的。起码了解 ruby 在 ruby on rails 中是如何工作的。还有 mvc 刚听人说的时候也不懂。我只能按着字面的意思慢慢深入理解。千万不要急于求成。如果你想做,那就做把!学任何一项技能都不是很简单的事,当你慢慢了解之后,你会有很大的成就感,自信心也帮你无形中培养起来了。

我大半年开始自学 Rails,现在说不上很懂,但是写个基本网站的问题不大。 神马 HAML,SASS 等等,我只能说,越用越好用。 还有当年完全不知道什么是 Git,什么是 MVC,什么是 Routes,什么是 Nginx。现在都一起学了。 以前英文烂到一个境界,然后誓死如归,一个一个单词的查,一句一句的看,一步一步跟着做,把《Rails 3 in Action》啃了一大半,突然有种感觉,就是从一个什么都不懂的人,发现了 Web 原来很多东西需要去学。 我之前在大学只写写 JS,那 JSP 老师教的,完全不知道讲什么,后面毕业设计,完全没有 MVC,从数据库查询数据,竟然是写 SQL 的。然后想起以前写的东西,我只想说“次奥!!” 我觉得就如楼上说的,不是 Rails 不适合入门,是我们觉得他很好学,所以希望非常快入门,是我们浮躁了。

You need to Sign in before reply, if you don't have an account, please Sign up first.