瞎扯淡 写给正在学习 Ruby on Rails 的新手

zfben · 发布于 2013年03月17日 · 最后由 justend 回复于 2013年03月30日 · 4440 次阅读
147

我这里指的新手不仅仅是Ruby on Rails的新手,同时对于web编程也是刚刚入门的新手。

写这篇文章的起因是我的一个朋友正在学习Ruby on Rails,他最纠结的是为什么Ruby的语法如此简洁明了,而Rails却如此的复杂?

其实原因就是Rails是用于创建复杂的web应用的,而非创建简单的应用。所以Rails中包含了大量让新手难以理解的内容,比较典型的是数据库迁移和测试。

如果想体验Ruby的简洁性,并以此做一个简单的网站,推荐尝试Sinatra,她的简洁美一定会让你如愿以偿的。

如果想挑战Rails,那请继续往下读。

Rails是用于创建复杂应用的,那一个复杂的应用是什么样的呢?

· 数据库里有几十甚至上百个表,表与表之间的关系也是错综复杂。相对应的model文件、controller文件、view文件也很多。 · 整个应用有大量的业务流程,一个URL不仅仅需要以网页的形式展现,也需要供ajax请求调用并返回json格式的数据。 · 有N个人同时开发和维护,互相之间得保证自己修改的代码不会导致他人代码崩溃。 · …等等

所以当你看到Rails中某些“蛋疼”的功能特性时,请不要急着开骂,因为这些功能和特性都对应着一个复杂应用在真实使用环境中面临的问题。

那么Rails是如何处理这些复杂问题的呢?我希望通过两个“点”,让你一瞥Rails的魅力。

第一点:“约定优于配置”。

这是Rails的核心理念之一,也是新手经常忽视的。所谓“约定”就是:在Rails中每个部分都有其特定的名字(以及对应的文件位置、文件名格式、方法或者类的命名规则等)和作用。在使用Rails的过程中,需要充分理解这些约定,并严格按照这些约定进行开发,不然就会处处碰壁。Rails的约定中保留了大量扩展空间,而新手因为不了解约定,按自己的想法来开发,结果写了大量“配置”(比如routes.rb里大量使用match而非resources),以使Rails按照自己的想法来工作,结果各种别扭和不爽。所以强烈推荐新手多了解Rails的理念,然后顺着“约定”开发,你会惊讶于Rails的简洁和优美。

第二点:“测试驱动设计TDD”。

测试脚本对于很多新手来说是很新鲜的东西,因为以前写代码时基本上只顾开发功能,所谓测试只是简单的使用下开发完的功能,能够使用就OK了。但当你开发一个复杂的项目时,比如工期需要几个月的项目,通常很难回忆起上个月写的代码,因此无法单靠大脑记忆来确定现在写的代码是否会与上个月写的代码冲突,更别提与同事的代码冲突了。以至于随着项目演进,20%的时间开发新功能,80%的时间在修BUG。而Rails内置了强大的测试功能,并提倡先写测试脚本,再写业务逻辑,这样的好处是即使项目再复杂,你依然可以保持80%的时间开发新功能、20%的功能修BUG。而这对于创业公司有着致命的诱惑,因为这表示他们可以在保证一定质量的情况下,以更快的速度推出新服务。

所以DHH(Rails的创建者)说Rails不是给新手用的,因为这些用于解决复杂环境下的特性,的确会让新手头晕目眩。我写这篇短文的目的是希望新手可以站在DHH的角度看待Rails,少一些迷茫,多一些理解。

原文:http://blog.zfben.com/514549f37e82871425000001

共收到 23 条回复
207

I don't find rails very complex… though I am a newbie.

On the other hand, I find ruby very, very complex.

5024

#1楼 @blacktulip 为什么我读你写的英语一开始感觉不对,然后越读越顺口。。。。。

207

#2楼 @lostleaf 你开始的感觉是对的…… 然后给我带偏了……

202

http://railscasts-china.com/episodes/rails-starter-c1-starter-here

楼主看看我录制的,rails入门,大家思路是一致的。

6045

很受用。请教大牛,rails的测试用rspec好还是rails自带的好?

403

@gs412 萝卜白菜各有所好,不过我用repec哈

96

#6楼 @gs412 我更喜欢Cucumber,不过刚开始学需要花时间适应

2492

TDD用着用着就忘了,看着需求就直接上了。。。。

2684

@zfben 你的名字怎么跟我认识的一个ben的名字和他的那个啥一样哇!

5869

学习了,增长知识啦.

96

TDD是好的

6164

#3楼 @blacktulip 谢谢你的提醒,nosejs 已经改回nodejs~!

2220

#8楼 @HalF_taN 求好的黄瓜学习资料……

5869

#5楼 @xds2000 我咋打不开

202

@ottawa893516 什么打不开?

5869

#16楼 @xds2000 视频,网站视频我这边看打不开。

115

晓之以情,动之以理啊!!!

202

@ottawa893516 你知道的,中国特色,当你访问不了网站时,不要轻易相信这一切,动用翻墙技术,然后你就可以看到内容了。

5869

#19楼 @xds2000 亲,我的VPN 一直都是open的状态。。。。。不开VPN 更惨

5869

#19楼 @xds2000 你好,视频我能看了,很不错,对学习很有帮助。前阵子不能看的原因是因为公司电脑。也不知是为什么不能下载也不能看,点开是黑屏,我以为是你的文件问题。昨天在家里,用20M的宽带一口气全部下了下来。很开心啊。

96

学习了,还在入门ruby,也不打算这么快进rails

96

多谢楼主

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册