HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

书摘与采访:Rails for .NET Developers

  • 2009-03-09
  • 本文字数:4323 字

    阅读完需:约 14 分钟

随着众多的 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 名资源链接有那些呢?

RB:谢谢 Jeff 和 Brian 接受采访。

要获取从.NET 转移到 Ruby on Rails 的更多信息,请登录网站 Softies on Rails ,也可以通过该站点与 Jeff 和 Brian 联系。


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2009-03-09 07:383068
用户头像

发布了 87 篇内容, 共 21.1 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

springcloud(三)网关zuul,mybatis工作流程面试

Java 程序员 后端

Spring中经典的9种设计模式,一定要记牢,springboot热启动原理

Java 程序员 后端

Spring学习总结:IOC基础,2021Java开发现状分析

Java 程序员 后端

SSM框架整合过程总结,书籍+视频+学习笔记+技能提升资源库

Java 程序员 后端

SpringCloud SpringBoot 前后端分离企业级微服务架构源码赠送

Java 程序员 后端

Spring框架技术总结(二),java自学视频免费

Java 程序员 后端

Spring面试题整理,springboot视频教程谁的好

Java 程序员 后端

tomcat优化——并发和Tomcat线程数,mysql集群原理详解

Java 程序员 后端

springCloud学习三之Eureka健康检查,java开发api接口教程

Java 程序员 后端

Srping全注解开发---AOP模块,教科书般的排查与分析过程

Java 程序员 后端

ThreadLocal内存泄漏分析与解决方案,java语言程序设计基础篇答案第六章

Java 程序员 后端

SpringCloud-Gateway动态路由之Nacos,BATJ等企业Java面试知识分享

Java 程序员 后端

Spring面试题整理(1),真是经典中的经典

Java 程序员 后端

SSM框架-SpringMVC详解,java反射和注解原理

Java 程序员 后端

String的内存分配与拼接操作,mysql数据库教程课后题答案

Java 程序员 后端

super与this在成员变量,成员方法,构造方法方面的作用

Java 程序员 后端

Tomcat目录结构,java基础教程第三版

Java 程序员 后端

SpringCloud学习之【NACOS实现服务的注册与发现】,kafka基础原理

Java 程序员 后端

spring源码系列-beanDefinition(子路)(1),壁虎java视频百度网盘

Java 程序员 后端

SpringCloudRPC调用核心原理:RxJava响应式编程框架,观察者模式

Java 程序员 后端

springcloud实战:服务间通信—,java系统开发教程

Java 程序员 后端

springcloud服务与服务之间的调用(Feign),java支付模块架构

Java 程序员 后端

springcloud(一)注册中心eureka,Mycat和Mysql搭建高可用企业数据库集群

Java 程序员 后端

Spring学习总结:IOC基础(1),java反射面试题及答案

Java 程序员 后端

synchronized 中的 4 个优化,你知道几个?,rocketmq教程教程

Java 程序员 后端

this与super关键字(阿里巴巴面试竟然问道这个了…,ubuntulinux操作系统实用教程

Java 程序员 后端

SpringCloud 学习总结(思维导图),学习mysql基础教程

Java 程序员 后端

spring源码系列-beanDefinition(子路),mybatis和spring整合原理

Java 程序员 后端

springBoot集成Mybatis,linux系统编程手册pdf百度云

Java 程序员 后端

SQL:我为什么慢你心里没数吗?,java面试说我基础太差

Java 程序员 后端

SpringBoot:定制-Actuator,深入java虚拟机百度网盘

Java 程序员 后端

书摘与采访:Rails for .NET Developers_.NET_Robert Bazinet_InfoQ精选文章