最近因为一位极光推送朋友,我开始了大概三四天的Rails学习之路,最终达到的水平是可以比较轻松地做出大部分功能,然后自我感觉可以自如地按照Rails的设计思想去思考。由于编程的日益流行,我结识了越来越多非计算机系的学生出于爱好开始写代码,但是其中的大部分人也许在用着一些错误的学习方式来学习编程,为了避免大家再继续走弯路,在这篇文章中,我会介绍下一个初学者要如何学习Rails。

  1. 为何而学,目标是什么?

  今天和朋友在走路时,谈到要如何学习Rails,我问的第一个问题是,你为什么要学习Rails,你学习编程的目标是什么?为何而学,最终希望达成的结果是任何学习前也许都需要明确的。如果目标是学习“通用性”程序,无论是为了处理数据、还是为了学习语言本身,那么我都建议早点抛弃Ruby,投入到Python的怀抱,虽然任何语言都是图灵完备的,但是每门语言都有着其最合适的应用场景,Ruby几乎完全依赖Rails存在。OK,这里我们暂且假设你学习的目标就是为了可以搭建一个Web网站,好的,我们继续向下说。

  2. 学习基本的HTML知识

  这是大部分初学者学习Rails都忽略的一点,了解基本的HTML知识非常重要。HTML并不需要掌握太深奥的知识,毕竟我们只需要入门。

  如果是精力允许可以花上1到2天左右时间快速通读这本书: 《Head First HTML与CSS》我那位极光推送的朋友就是这么干的。

  读的时候不需要对细节过于在意HTML标签和CSS样式属性的细节,只需要大概了解其中的所有标签,做到脑中有印象,记住一些常用的标签,知道CSS如何作用于HTML即可。复习时随便打开一个网页,对着页面指出这些都分别是什么元素,大脑构思下如果自己来写这个网页要如何组合标签。

  3. 学会使用前端调试工具

  Rails隐藏了大部分的HTML标签,而使用自己的模板语言,这固然方便开发,但是对于调试来说无外乎增加了一层难度。所以学习前端调试工具就显得尤为重要,常用的前端调试工具包括Firefox的firebug,以及Chrome的Developer Tools。这里以Chome的Developer Tools为例,无须学习过多的知识,了解常用的操作即可。

  知道如何查看对应标签的HTML源码,然后尝试去修改一些右侧对应的CSS样式。

  了解如何查看网络请求以及常用的状态码含义,例如200, 304, 500等。

  4. 学习常用的数据库操作

  学习Rails之前,我们还是要把基础的东西都学会更合适,最后一步就是数据库的基础知识。在这里,我个人更为推荐MySQL,原因是资料更多,在自己的本机上装一个MySQL,不用学的太深入,按照教程了解数据库的基本概念:库、表、行、列。然后按照教程操作,了解如何创建一个数据库、创建一个表,基本的增删改查即可。也推荐一本入门书吧官网访问极光推送看看:

  也不用全看完,看到第八章就差不多足够了。毕竟Rails有很完善的数据库操作封装,学习MySQL更多还是为了调试。

  5. 学习Rails基本理念

  好了,我估计上面的几步应该花掉了你三天左右的时间,终于可以开始学习Rails了。Rails有着很清晰的学习指南,不需要看书的,看这里就足够了: http://guides.ruby-china.org/getting_started.html 但是这篇更多还是为了有基础的人准备,如果没有任何语言基础,纯粹按照这个教程往下走会发现自己之后毫无扩展性,做其他的项目都很困难。(这也是我发现很多人的问题) 我们不妨同时在教程中穿插一些练习。以下只为思路,具体可以自己把控。

  我们先按照他的操作一步步向下走,安装Rails,使用脚手架创建Blog程序,Hello Rails。OK,进行到第四步后,请大家暂时停下来。这里我们打印出了Hello Rails,可是请大家先做一个练习:这里希望能用之前的HTML/CSS知识做一个相对复杂的Welcome页面,然后增加导航栏,并且可以根据导航跳转到一个About页面。 请大家在这里思考两个问题:

  1. Rails的路由是如何工作的

  2. Rails的页面模板是如何工作的。

  然后我们继续跟着教程去做,完成第5步,然后这里我们再次做一个练习:

  A. 将数据库从SQLite改成MySQL,并且将数据存储MySQL中。

  B. 每执行一步增删改查的操作都请在MySQL中查看变化

  C. 为文章增加一个字段,例如作者。然后学着去做对应修改,运行迁移后请查看migrate中的SQL发生了什么变化。

  D. 在浏览器查看由Rails生成的表单被解析成了怎样的HTML,查看每次发送一个提交、修改请求时,发生了那些网络请求。

  E. 在自己手写的代码中加入put 打印操作,打印不同的变量,学会基本的调试技巧(例如故意出错,然后打印结果)。例如在下图语句中间增加 puts article_params

  F. 关上教程,独立操作新增一个“增加用户”,“注销用户”,“修改用户”等类似的功能。复习之前的操作。

  G. 思考一些问题,Rails到底是如何工作,Rails的一些操作分别做了什么,route, controller, view, model到底如何配合工作,generate, rake等一些我们使用过的命令分别做了什么事情,并且验证确认。希望这里大家可以在纸上画出一张图,画出rails的每个组件的作用、意义,每个命令都影响了哪些部分。

  继续完成剩余部分,第六部分的作用是完成两个模型的关联。与上述的做法类似:

  A. 我们每做一步操作要思考这一步到底做了什么?对数据库做了哪些操作?

  B. 如果要将文章和作者相关联,那么整个程序要如何修改。

  C. 我们分别看下对应的数据库都发生了什么变化?我们不从Rails的角度去思考,单纯从数据库的角度去思考,那么这些表为什么这么设计。

  D. 如果要给文章打Tag,Tag和文章的关系是什么样,程序如何修改,数据库变成了什么样子。

  E. 如果Tag是由用户打上去的呢?那么程序怎么办呢?

  F. 我相信上述操作,会碰到各种各样的问题,善用Google和Stackoverflow,但是解决问题是没有意义的,要思考为什么这样就能解决问题,然后想清楚后给自己出一个类似的问题让自己去解决。另外,善于使用puts打印来调试问题。(虽然很土,但是很好用)

  6. 学习Rails的若干问题

  A. 学习一门语言最重要的是学习这个语言背后的设计理念和世界观。这也是我讨厌Rails的一点,Rails更加强调约定大于配置,期望你的一切都按照他的步骤去工作,所以我们在学习Rails时最大需要做的转变就是尽量不要去写代码,放下心里的那些不安全感,相信他总会帮你做好的。

  B. 面向对象的设计架构。无论是Django还是Rails都是完全秉承面向对象的设计理念。我们在传统搭建一个项目时,都会首先去想设计这个产品功能时数据库要设计成什么样,然后我们的SQL语句要如何去写。 但是Rails抛弃了数据库的实现细节(这绝不是不写SQL那么简单),例如以上述例子而言,我们只需要明确知道一个Blog会有多个Comment,一个作者会有多个Blog,至于底层如何对应实现交给Rails框架就好了。所以我们需要抛弃语言细节,更多从“对象”的角度去思考整个关系。

  C. 不要纠结于Ruby语法本身,对于初学者而言,千万不要纠结于Ruby语法本身,我相信大部分人至少都考过计算机二级学过C语言,因为大部分功能无外乎增删改查而已,加起来的语句也就那么多,所以照着写,然后遇到功能去查,然后记住足以应付大部分问题。至于Ruby语法,等到进阶时再去读把。

  D. 一定要想清楚Rails各个组件的功能,一个浏览器的url请求到最后HTML页面展现在用户面前,都经历了哪些事情,清楚这个逻辑非常重要。

  E. 反复练习。不要贪图看太多的内容,其实上面那个入门指南已经可以解决80%的问题了,请大家就着某个页面功能反复打磨这个页面,比如增加作者,比如删除评论,比如给评论添加评论,比如所有评论的尾部都带有一个笑脸等等。

  F. 多打印,打印看各种各样的变量,故意制造出错,知道这样做会出错并且猜到出错信息是件很值得做的事儿。这样才能更了解整个框架的运行原理。

  7. 写在最后

  我一直不是很赞同Rails Girl , Django Girl这样的活动,至少不赞同他们的教学模式。编程到底是什么?做出来一个网页?其实我赞同每个人都学一学编程,但是是因为编程最重要的是一种解决问题的能力,知道怎么办、为什么这么做远远要比这样做出来重要的多。当我看到很多人照着教程亦步亦趋地完成一个看似很炫的功能,我不得不说,其实没任何意义,我也并不认为这样能培养所谓的兴趣。思考远远比去做有意义的多。

  希望大家编程愉快。

作者:极光推送 飞林沙

开始了大概三四天的Rails学习之路的更多相关文章

  1. [Rails学习之路]初识Ruby(一)

    Ruby是一门动态的.强类型的.纯面向对象的编程语言.它和Python非常相似,但比Python面向对象更加彻底.使用更加灵活.语法更加复杂.也更为有趣. 抛开做事情到底应该有多少种方法这个问题,我相 ...

  2. [Rails学习之路]Rails路由配置

    如果是使用Rails的默认约定,那么几乎是零配置. 但有些时候,我们可能不得不(或者更喜欢)进行一些特殊的配置. 其实Rails在路由功能中也有很丰富的配置选项. routes.rb文件中靠前的规则优 ...

  3. [Rails学习之路]Rails文件结构与路由

    约定优于配置和RESTful是Ruby on Rails十分推崇的哲学.在一个默认的RESTful的Rails项目中,使用资源和HTTP动词来帮助组织项目. 假如有一个使用scaffold创建的Rai ...

  4. [Rails学习之路]初识Ruby(二)

    继续上次Ruby的学习.接下来就到了Ruby的方法. Ruby的方法与Python仍然很像.使用def定义,可以使用undef取消定义. 在Ruby中,经常可以看见方法后面跟有"?" ...

  5. rails学习笔记: rake db 相关命令

    rails学习笔记: rake db 命令行 rake db:*****script/generate model task name:string priority:integer script/g ...

  6. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  7. 我的nodejs学习之路1

    距离上次写文章类东西已经有4-5年了,猛然写东西有种提笔忘字的感觉. 言归正传,这是一篇记录我自己学习nodejs的文章,在写下这篇文章的时候我也不是什么大牛,也不是很了解nodejs这项技术.之所以 ...

  8. spring源码学习之路---深入AOP(终)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章和各位一起看了一下sp ...

  9. 初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)

    初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像 ...

随机推荐

  1. osgearth介绍(转载)-feature_labels.earth

    初识osg OSG的诞生 在 1997 年时,Don Burns 由于喜欢滑翔机运动且对计算机图形学非常熟悉,在 LINUX 上写了一个控制滑翔机的小引擎,这便是 OSG 的最初雏形.后来在 1998 ...

  2. Everything开机自启

    第一步:关闭自动启动 在设置中关闭everything开机自动启动. 第二步:创建计划任务 点击“开始”—“任务计划程序”—“创建任务” 首先设置任务的名称等,注意一定要勾选“使用最高权限运行”. 然 ...

  3. 判断div是否有滚动条

    判断div是否有滚动条 var obj=document.getElementById("showDiv"); if(obj.scrollHeight>obj.clientH ...

  4. lufylegend库 LTextField

    lufylegend库 LTextField <!DOCTYPE html> <html lang="en"> <head> <meta ...

  5. Oracle基础学习(二)v$session中Command的数字含义

    v$session中Command的数字含义. 1 CREATE TABLE 2 INSERT 3 SELECT 4 CREATE CLUSTER 5 ALTER CLUSTER 6 UPDATE 7 ...

  6. iOS 多线程NSThread理解与场景示例

    NSThread是相对GCD和NSOperationQuene而言,比较轻量级的一种多线程处理方式. 但同时,它的弊端就是需要自己管理线程的生命周期,以及线程同步:而另外两种不需要自己管理. 常见方法 ...

  7. IOS开发,遇到的第一个bug

    经过几天的得瑟,今天终于开始实践IOS开发了.由于没有苹果的电脑,现在先用虚拟机凑合着. 第一个开发的东西就是苹果官方向导里的helloworld了.最后在运行的时候有一个异常,导致程序会闪退,错误信 ...

  8. 【JAVA笔记】JAVA后端实现统一扫码支付:微信篇

    最近做完了一个项目,正好没事做,产品经理就给我安排了一个任务.   做一个像收钱吧这样可以统一扫码收钱的功能.   一开始并不知道是怎么实现的,咨询了好几个朋友,才知道大概的业务流程:先是开一个网页用 ...

  9. JAVA finally字句的异常丢失和返回值覆盖解析

    转载:http://blog.csdn.net/sureyonder/article/details/5560538 Java虚拟机在每个try语句块和与其相关的catch子句的结尾 处都会“调用”f ...

  10. ArcGIS API for JavaScript 4.2学习笔记[2] 显示3D地图

    3D地图又叫场景. 由上一篇可知, require入口函数的第一个参数是字符串数组 ["esri/Map", "esri/views/MapView", &qu ...