关于作者
Eldon Alameda是一名Web开发人员,现居住于气候寒冷的堪萨斯州。他现在为堪萨斯市一��刚起步的小型科技公司开发Ruby on Rails应用。在这之前,他在当地的广告公司、Sprint PCS及IBM等多家公司从事过软件开发工作。
关于技术评审
Paul Bentley已经有10多年专业软件的开发经验。他涉猎过计算机的许多领域,其中包括从嵌入式设备到3D图形等。他尤其精通电话技术领域,不管是在传统的计算机电话技术方面,还是在基于SIP的解决方案方面都有相当丰富的经验。他现在使用Rails来开发Web应用程序,以为解决企业应用的一系列问题提供稳定的方案。
致谢
说实话,写本书真的很难。其实我更想说的是,如果没有许多人的帮助、耐心及智慧,这本书也就根本不可能与大家见面。
Keir Thomas、Chris Mills和Ben Renow-Clarke也曾参与了这个项目,感谢你们对整个项目的指导、建议和帮助。
Paul Bentley是本书的技术评审,感谢你花了很长时间审阅本书的代码,你那些见解深刻的评论及鼓励的话语一直激励着我们。
Tracy Brown Collins是本书的项目经理,感谢你为了保证一切处于正轨而不知疲倦地工作,也感谢你在交稿期限到来时对我的通融。
Heather Lang是本书的文字编辑,感谢你对本书文字上的修改及润色。
感谢Laura Cheu和她的产品团队,你们为了能让本书尽快上市所做的辛勤工作,以及容忍我每次在*后时刻的改变。在很多时候你们拯救了我,任何言语也无法表达我对你们的感激之情。
感谢我的妻子Dori,感谢你的善良、支持、鼓励及在过去的9个月里对家庭的照顾,还要感谢你在每次晚饭帮我订辣鸡翅时,(几乎)从来都没有抱怨过。
*后,我要感谢我的女儿Kaylee,她是我的阳光,总是能给我带来笑声。
大多数培训书籍和课程的不足
在我的职业生涯中,曾经参加过许多技术培训课程,并且发现其中的大多数都有一个共同的缺点——实际上没有教授任何东西。我整个星期都坐在一间教室里,仅仅来证明我能够遵循按部就班的指导。但是,我即使整天做着白日梦,也可以通过大多数这些课程。实际上只有当我回到办公室,独自面对(由于没有一个**的网络)需要解决的技术问题时,才能真正掌握那些知识。也许只有在没有理想环境的条件下,又不得不在实际中运用某项技术时,它的优点和缺点才能充分地展示出来。我相信许多读者也都有过同样的经历。
不幸的是,如今许多的编程书籍似乎也有了同样的缺点。这些书规定了创建应用程序的每个步骤,我们只需要按照“paint-by-numbers”一样的方式去执行就可以了(“paint-by-numbers”是一种绘画方式,先在底稿上将图片轮廓画好,然后在图上用数字标好每一块区域,*后只需要在每一块区域中上色就可以了)。这样即使看完了全书,也只能说明你可以遵循按部就班的指示罢了。但是,我想写一本与众不同的书。
的确,我热爱Ruby on Rails,并坚信它是当今*好的Web开发框架之一。Rails给我的开发工作带来了许多快乐,也使我成为了一个更好的开发商。所以,当有机会写这本书的时候,我希望能写一些可以使读者同样对Rails产生热爱的东西。于是我重温了当前有关Rails的书籍,发现它们大致可以归为以下几类。
? 起步介绍型:主要介绍Rails的结构、约定习惯及特性。这样的例子有《Beginning Rails: From Novice to Professional》(Jeffrey Allan Hardy,Cloves Carneiro Jr.及Hampton Catlin. Apress,2007),《Agile Web Development with Rails》(Dave Thomas,David Hansson,Leon Breedt和Mike Clark. Pragmatic Bookshelf,2006),甚至包括《Ruby on Rails for Dummies》(Barry Burd. For Dummies,2007)。
? 单一项目型:这种书属于填鸭式(就是把知识一味灌输给学生)教育,主要让读者一步一步地跟着书上步骤来创建一个项目,例如用Ruby on Rails来创建一个社交网站或者电子商务网站。
? 解决特定问题型:这些书主要针对于**Rails开发商,并通过简短的代码段来说明一些问题的解决方案,例如增加认证控制功能等。
? 参考书型:这类书也是针对于**Rails开发商的,它对某一特性或者Rails开发的相关组件进行了深入剖析,例如**的《Ruby for Rails:Ruby Techniques for Rails Developers》(David Black. Manning Publication,2006),以及《Pro ActiveRecode:Databases with Ruby and Rails》(Kevin Marshall,Chad Pytel和Jon Yurek. Apress,2007)、《Deploying Rails Applications A Step-by-Step Guide》(Ezra Zygmuntowicz和Bruce Tat. Pragmatic Programmer,2007)等书。
通常,我建议对学习Rails有兴趣的人按照如上顺序来阅读相关书籍。由起步的Rails书籍开始,然后按照书上步骤去做一些项目,积累一些实际经验。*后,再看些能够进一步加深认识的书籍。
这本书有什么不同
在上面列举的几种书中,我相信读者从项目型的书中获得的Rails知识*多。但是,即使像Rails这么有意思的主题,这些书也会阻碍读者的思维发散,*终只能一步一步按照书中的指示操作,而不是从中去拓展思路。当然,我也不是要把这类书一棒子都打死,实际上我自己也阅读了大量这类的书籍。
我希望能让读者从一名Rails初学者尽快地成为一名有经验的Rails开发商。我希望不只是教给读者如何创建一个Rails应用,而是教给读者相关的实现方法和知识,使得你可以自己来完成这一类项目的开发,这样你选择这本书才算是物超所值。
所以,本书不只是简单地向读者介绍一个独立应用的创建过程,而是与读者一起去完成多种类型的项目。书中所选的每一个项目不仅会让读者掌握Rails的核心特性(例如缓存和REST方式的路由),而且为了激发读者的兴趣,我们还对某些问题进行了深入探讨,其中的每一个项目都能很容易地扩展成单独的一本书。
学会独立思考
除此之外,我不仅没有将每个项目扩展成为一本独立的书,用填鸭式的方法一步一步指导读者,反而将每个项目的规模缩小了一些,仅向读者提供了每个项目的原始版本。这样不仅能够保证项目可以成功运行,而且读者可以很容易地进行修改和扩展,以便使其更符合自己的需求。每当描述这本书的时候,我都把它比喻成是在教别人学骑自行车。从这点来说,我的任务就是教会读者如何上车和前进,然后让读者自己去学会如何掌握方向和平衡,直到学会骑自行车。
在每一个项目的*后,我都设置了一些读者需要去思考的问题。因为我相信只有实践才是检验真理的**标准,所以我会在这个部分指出项目中一些不尽如人意的地方,来让读者进行修改。另外,这里提出了一些非常有意思的见解,可能会使读者从新的角度来看待项目。强烈建议读者完成其中的每一个练习,相信读者能够通过这些练习更好地拓展自己的思路。
本书中不涉及的内容
当然,撰写这样的一本书需要忍痛割舍掉很多想要涉及的内容。如果我将这些内容全部写出来的话,这本书估计要有2000页了(也许我还在写呢)。因此,一些本书中无法涉及到而有读者需要的内容,只好放在以下这个部分跟读者说明了。
数据库调优和索引
由于本书中不涉及到数据库的调优和索引,所以读者可能会发现,本书中的大多数项目都没有在数据库中建立任何索引。当我们的数据库数据量较小并且查询语句相对简单的时候,这可能并没有什么问题,但是当数据库与应用程序随着时间不断增加的时候,这就可能导致严重的性能问题。也许因为我是从数据库管理转到Web开发上来的,所以我很难将这个重要的特性从本书中移除,但是这个问题实在是很复杂,也容不得我在这上面花费过多的精力。也许将来我会再写一本完全关于这个方面的书。
测试
在Rails社区中,测试驱动开发(TDD,Test-driven development)显然占有一席之地。虽然我还没有先写测试的习惯,但是我很清楚在部署应用之前开发一个复杂的测试套件(Test Suit)的价值。我曾经听到有人说所有的程序都要经过测试,问题是应该由你自己来测**例还是直接将程序交给你的用户,让他们来帮你进行测试。
重构(Refactoring)
伴随一系列测**例而来的,便是对代码进行重构。由于每个项目还处于非常初始的演示阶段,所以留给了代码重构很大的空间,以使代码变得更干净利落,可以优化性能和减少代码量。在每个项目的练习部分中,我都会为读者指出通常进行重构和优化的正确方向。