和很多人一样,我第一次听说 Ruby on Rails 的时候知道了“10 分钟内写一个 blog 系统”的视频。Rails 的创始人 David Heinemeier Hansson 边讲边做,七搞八搞,伴随着一声声 “whoops”,一个简单的 blog 就完成了。
我在看这段视频的时候,因为之前没有怎么搞过网络程序,因此可能没有感觉到什么革命般的震撼,但已经挺吃惊了。在当时的我看来 blog 是一个相当复杂的系统了,如果我学会了 Rails 是不是也可以在短时间内写一个 blog 呢?
那之后我有几次想学习 Rails,但一直没有成功。一方面我对 Ruby 还是一知半解。我有 Perl 和 Python 的基础,因此 Ruby 代码对我来说很简单;但同时 Perl 和 Python 的基础又阻碍我学习 Ruby,每次拿起镐头书,看了没几页我就厌烦了。Rails 也是,我可以按照书上的例子在本地上运行程序,但我当时很执着于把程序部署到远程服务器上。那时候我只有一个 Dreamhost 共享空间,后来有了一个 Site 5 的共享空间,在这种环境下一个新手部署 Rails 程序的困难可想而知。几次部署失败后,我就对 Rails 失去了耐心。
几次失败后,我依然十分像学好 Ruby 和 Rails。因为 Confreaks 的关系,我感觉 Ruby 社区非常活跃,而我没法参与进去,让我觉得挺遗憾的。不过我一直没有什么需求,因此也没有什么动力去学习 Rails。这也让我对 Rails 这种稍微有些大的框架有些恐惧的感觉。去年暑假我们要做的项目,我就用 web.py 这种超轻量级的框架而不是 Rails 这种中大型的框架。
这个学期我们软件工程课的学期项目要做一个网络程序,我正好趁着这个机会来把 Rails 重新拾起来。于是这次我扎扎实实的从头开始看《Agile Web Development with Rails》,当然一些基础的东西我扫一眼直接掠过,等到看到讲 MVC 的时候我已经比较清楚了这种网络程序框架的原理了。顺着理解了书上的例子程序后,一切顿时感觉豁然开朗了。不仅仅是 Rails,同类的框架都是有共性的。我之前也试过 Django,和 Rails 一样最后也是无疾而终。但这次理解了 Rails 之后,我感觉 Django 框架也十分明了了。
从我一开始听说 Rails 到现在已经过去了几年时间了,我对网络程序的了解也有了很大的变化,远不是当初的自己可以比的。blog 系统对我来说也早已失去了神秘感,不过是一堆面向用户的对数据库进行操作的借口罢了。给我一定的时间和耐心,写一个 blog 系统是很简单的。而像 Rails 这样的框架可以自动生成框架代码,写一个 blog 系统就更是迅速了。
后来我们根据投票,确定了用 web2py 而不是 Rails 来完成项目。我一开始把 web2py 错当成 web.py 了,觉得是很简单的系统,所以就没怎么在意。后来发现错误后我还一度很惊慌,等静下心来看文档之后菜发现原来 web2py 就是 Rails 的Python 移植。明白了 Rails 的原理后 web2py 就没有什么神秘感了。当然我觉得 web2py 的官方书 写的不如《Agile Web Development with Rails》易读,可能是个人习惯的原因。
按照 web2py 的官方书里的例子弄了一下,我发现用 web2py 写程序相当容易。有了设计之后,把数据库定义输入进去之后基本上程序的框架就有了。然后添加 controller 和 view,其实就是函数和调用,不知不觉中程序就出来了。当然这些只是最基本的功能,更高深的功能我还没有看到,不过都是以这些为基础的。
按照这种思路想了一下,我那时就有了用 web2py 来创建一个简单的 blog 系统的想法,算是验证自己的学习进度。之后又托了一段时间,刚刚我正好没事,就这么弄了一下,也就弄成了,差不多也就 10 到 20 分钟的功夫。当然这个 blog 系统和 WordPress 可没法比,Trackback 和 RSS 输出都没有添加,但 blog 的核心功能都有了。我没有做什么美化工作,目前看上去是这个样子的:
有了这个经验之后,我对于我们的学期项目比较有信心了。不过我对这种程序的未来的信心又减少了。本来我觉得 Rails 这种东西既然这么火,那一定相当了不得,不过弄懂了之后觉得也不过如此,它不会是一个值得深入进行科学研究的方向,那么未来究竟在哪里呢?