随着众多的 PHP 和 Java 程序员学习 Ruby ,近年来 Ruby on Rails 已经有了显著的增长, Ruby on Rails 有助于快速创建业务解决方案。这里忽略了一批发现 Rails 优点的 ASP.NET 开发人员。他们给世界各地的公司编写 C#、VB.NET 和 ASP.NET 应用程序。
许多 ASP.NET 开发人员开始对 Ruby 编程语言和 Web 框架产生兴趣。这些开发人员了解微软以外的技术并发现这些技术更难掌握。他们要如何应对呢?InfoQ 有幸采访了这样的两位开发者 Jeff Cohen 和 Brian Eng,他们像众多微软开发者那样选择了 Ruby on Rails 并学习如何使用它的 Web 框架。
Jeff 和 Brian 是 Softies on Rails 博客的维护人员,该站点记录了从微软技术转移到 Ruby on Rails 的历程。Jeff 和 Brian 刚刚出版了《 Rails for .NET Developers 》一书,由 Pragmatic Programmers 发行。Pragmatic Programmers 出版社给 InfoQ 提供了样章——《第二章 转移到Ruby 》。
InfoQ 借此机会采访了 Jeff 和 Brian,谈谈他们从.NET 转移到 Rails 的历程。
Robert Bazinet (RB) ::首先,自我介绍一下好吗?
Jeff Cohen (JC) :我一次性通过了 MCSD 考试,有着 15 年微软技术开发经验。主要使用 C++ 创建 MFC/ATL 应用程序,后来编写 C#桌面应用程序。我玩过几天的 ASP 和 ASP.NET,但总的来说,更喜欢编写桌面和移动解决方案。就在 2005 年的时候,我发现了 Rails,并完全使用 Rails 进行了为期 1 年的开发。现在我是 Leapfrog Online 的高级软件工程师,并在 2008 年中期成立了 Purple 工作室。
Brian Eng (BE) :我也是 MCSD,并使用经典的 ASP 和 ASP.NET 进行了很多 Web 开发。2004 年的时候,Jeff 和我在一家大型零售商中一起开发触摸屏和平板 PC 应用程序,同年 Rails 正式发布。与此同时,我尝试开始编写应用程序,并觉得使用 Rails 来重新创建以往用 ASP.NET 所创建的程序。那段经验也转换成实际的产品,副业变成了我现在的公司 Bluebuzzard,一直运营至今。
RB:什么原因促使你从微软开发技术转移到 Ruby on Rails 呢?
BE:在过去的 10 年职业生涯中,我成功的使用着微软的技术,但基于某种原因,我并不喜欢每天使用的工具。有一天,我发现芝加哥的一些公司用来管理小型项目的工具 Basecamp 非常棒。我曾经和同事谈起过,他说“你知道吗?它是用 Ruby 写的”。对于我来说这实在太可笑了,所以我用 Google 搜索了一下,发现 Rails 并点击相关链接。
JC:我知道 Ruby 是一种脚本语言,并在 2005 年开始学习 Rails。我下载了 Windows 版本的 One-Click 安装程序,并用 Rails 创建简单地 Hello World 应用程序。我发现它的 MVC 结构比 ASP.NET 页面模型更加直观,并立刻发现用 Rails 创建网站非常有趣。相对于在 Rails 应用程序编写优美的 Ruby 代码,快速地编写 C# ASP.NET 代码就像在泥泞中蹒跚而行,从那时起我就被它深深的吸引。
RB:你们两人所面对的最大挑战是什么呢?
JC:使用 Ruby 真正的把钱用到了刀刃上,它是智能 TDD。有了动态解释语言,就无需编译步骤来检查错误,可以直接进入单元测试。这非常的合适我。在使用 Rails 之前,我已经坚持敏捷开发多年。
在语言方面,有一些编程概念.NET 中没有涉及过。事后意识到自己有点呆,但我不会钻牛角尖。尽管 C#已经添加了 yield 语句,我从来没有使用过,如果要回忆的话它只适用于迭代。我阅读过一些关于 C#匿名方法的.NET beta 文档,与此同时我还是在学习 Ruby。有趣的是,直到我理解了 Ruby 的程序块之后,回过头来才真正理解了 C#匿名方法的潜在意义。也正是通过 Ruby 社区,我开始理解延拓和函数式编程的概念。Ruby 并没有同样的概念,但是使用 Ruby 的人们也能熟练使用其他语言,比如 Smalltalk 和 Lisp,两者都影响了 Ruby 语言的发展。懂得其他语言的前景和实现并不比自己使用的“主要”语言容易,但是我发现这更使得我深深感激周围的大型软件社区。所以有了新的挑战:要成为全面的软件开发人员,不能只会编写 C#或者 Ruby。
BE:当然,对于任何一个开发人员要从静态类型的编程语言转移到动态类型,都要费一番功夫。一旦了解学习 Rails 的动机,我们就会有冲动去使用 Ruby 方式代替自己熟悉的 C#。这也经常意味着会过度思考问题及随之而来的过分复杂的解决方案。
RB:为什么.NET 开发人员会对 Ruby on Rails 感兴趣呢?
BE:我曾学习 Rails 并在业余项目中使用它,与此同时我从事着 2 年朝九晚五的.NET 开发。我惊讶于它对我思考.NET 代码的影响。Rails 使得我成为更好的开发人员,而且也非常适合通过它来学习 Ruby。再者,作为技术人员,我们很容易会被新巧的事物所吸引。
JC:在 Linux 或者 Mac 平台如果仅有一个星期的时间,我希望所有的.NET 开发人员都有机会用 Rails 开发简单的应用程序,而非 Visual Studio。我觉得他们应该了解为什么 Rails 如此注目;为什么使用 Linux 和 Mac 并非听起来那么神秘;为什么作为一个优秀的软件开发人员,你并不总需要智能提示。再者,不管你喜欢与否,Ruby 都会以 IronRuby 的方式成为 Visual Studio 的一部分。John Lam 的团队正做着令人惊讶的事情,我们期待着它早日完成。也许 ASP.NET MVC + IronRuby 会成为大多.NET 开发人员尝试的方式,就像我们使用 Rails 那样。
RB:若有的话,.NET 社区会采用 Ruby on Rails 么?以及 Ruby on Rails 成功在哪里?
BE:从发布 Rails 开始,我们已经看到微软及其社区的变化。当然,微软已经包含并致力于 MVC、REST 和动态语言。更重要的是,我们看到许多.NET 开发人员更关注他们的工作并懂得使用最好的工具来完成工作,并不仅仅是使用微软提供的工具。敏捷开发已经在.NET 社区开展。独立的.NET 开发人员借鉴 Rails 的灵感开发了许多工具,就像 Castle Project/MonoRail and Subsonic,对于.NET 开发者社区来说都是非常有意义的事情。
RB:.NET 开发人员如何开始学习 Ruby on Rails?
JC:你可以读很多资料;要克服尝试新事物的恐惧,你需要做的事情就是尝试。下载 Windows 版本的免费 One-Click 安装程序,启动最喜欢的文本编辑器,开始吧!当 Rails 出现时,我第一次疯狂的举动就是使用记事本创建第一个“Hello World” Rails 应用程序。输入变量名,迟疑了一下等待智能感知,但没有出现。听起来很有趣,但事实上这是我必须克服的困难。几天之后,我发现我不再需要智能感知了。记得 Brain,我们一起尝试 Rails,对如何基于某些条件来查找字符串中的某些元素,完全没有主意。所以我们只是猜测该方法为.select,却成功了!我们很快发现很多 Ruby 方法就像那样。所以.NET 开发人员应该考虑尝试一下,不应该过早放弃,它用起来比想像中简单。
RB:对于正在学习 Ruby on Rails 的.NET 开发人员,你对他们的建议是什么呢?
BE:以 Jeff 而言,我要补充一点,记住最重要的是不要害怕。从 2004 年起,到现在 Rails 已经经历了一段发展历程,而且在 Rails 开发社区方面的持续改变难以跟上。同时,理解和熟悉 Java 和 PHP 所带来的开源文化,可能会使得.NET 开发人员望而却步。你不需要低价抵掉自己 PC 来购买 Mac,至少今天不用。只要开始学习并进行尝试。
RB:如何看待 IronRuby 的发展来帮助.NET 开发人员转移到 Ruby on Rails?你觉得 IronRuby 是.NET 将来实现 Ruby on Rails 的方式吗?
BE:IronRuby 是极其重要的项目,因为它表示微软致力于发展并支持开源技术和动态语言。再者,打开 Visual Studio、启动 ASP.NET MVC 项目并用 Ruby 或者 Python 来编写所有的事情,那是使用动态语言的重要一步。当.NET Web 开发变得更“Rails 风格”,可使得 Rails 社区能持续革新并保持领先,对于所有人来说都是好事。
RB:你认为.NET 开发人员如何处理 Rails 在自身实现中的固有方法呢?也就是说,在.NET 你有空白解决方案,微软让你随心所欲的做事情,尽管这种做法并不妥当。
JC:Rails 固有的方式只适用于由数据库支持的 Web 应用程序。并非空白解决方案。所以,如果你编写数据库支持的 Web 应用程序,就会喜欢上它。站在巨人的肩上:简单易用的 ORM(ActiveRecord)、内置的 MVC 架构、能创建最佳实践代码的代码生成器、未知数据库的架构迁移和内置的单元测试框架。你无需重新创建多个工具。大部分时间尽可能使用 GOF 模式就行了,然后就会套用 Rails。紧粘着 ASP.NET,只能这么说了。
RB:你如何看待.NET 社区采纳 Ruby on Rails 后的长期发展呢?
BE:尝试使用 Rails 的.NET 开发人员持续增长。大部分的开发人员有着和我们类似的经验;他们一边进行朝九晚五的.NET 工作,一边在晚上和周末花时间进行业余项目的开发或者筹划下一件大事。如果你是这样,那么正好尝试 Rails。你可以很快完成大部分的项目,同时学习新的知识。最终,你也许会放弃 Rails,并重新使用 ASP.NET 或者 ASP.NET MVC。但是这种经验保证会使你成为更好的开发人员。
RB:微软已经使用称为 ASP.NET MVC 的自己的 MVC 实现来反击 Ruby on Rails。你是怎么看待它和 Rails 之间的比较的?Rails 社区应该关注 ASP.NET MVC 模式吗?
BE:如果有的话,已经证明 Rails 做对了。使用 MVC/REST 模式并完全控制页面的标记,对于我来说,总是觉得这是正确的。微软现在给予开发人员选择的权利。最终,对于每个人都是好事,因为它会使得工具更加完善,不管你喜欢那个。
RB:你写这本书的动机是什么呢?
JC:这本书是我们对两个本质理念交流的尝试,以及从.NET 转移到 Rails 过程的介绍。首先,软件工程应该是充满乐趣的。无趣意味着你正使用玩具或者无价值的工具。我确实认为它是件令人高兴的事,实质是你是否享受着所从事的工作。其次,懂多种开发技术的任何人都可以快速掌握 Rails。我们假设一个人有相当好的.NET 编程知识,但对 Ruby or Rail 一无所知。那么这是横向转型的最好方式。我们编写本书就像写自己的博客那样:对于这个主题不了解的人,采用真实而非令人生畏的方式,但却有对于日常工作有用的主题。从开始,这个博客的使命就是为那些想尝试 Rails 的人扫清障碍,我们希望这本书确实起到这个作用。
RB:.NET 开发人员熟悉 Ruby on Rails 开发的前 5 名资源链接有那些呢?
- Ruby on Rails 博客( weblog.rubyonrails.org )
- 官方指南( guides.rails.info )
- PeepCode 视频网站( peepcode.com )
- Railscasts( railscasts.com )
- Ruby on Rails 谷歌用户组( http://groups.google.com/group/rubyonrails-talk )
- Ruby 谷歌用户组( http://groups.google.com/group/ruby-talk-google )
RB:谢谢 Jeff 和 Brian 接受采访。
要获取从.NET 转移到 Ruby on Rails 的更多信息,请登录网站 Softies on Rails ,也可以通过该站点与 Jeff 和 Brian 联系。
给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。
评论