阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

书摘与采访: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:382955
用户头像

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

关注

评论

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

易观分析加入智能投研技术联盟,共促行业数智化发展

易观分析

易观新闻

APISIX 如何与 Hydra 集成,搭建集中认证网关助力企业安全

API7.ai 技术团队

云原生 网关 身份验证 APISIX 网关

数据库审计和日志审计的三大区别分析

行云管家

数据库 日志 日志审计 数据库审计

2022数十位Java架构师汇总产出,最新25个技术栈“Java面经”

程序知音

Java 程序员 面试 后端 八股文

拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗?

程序员小毕

程序员 程序人生 计算机网络 java面试 TCP协议

阿里云第四届全球数据库大赛火热开赛,40万奖金广纳英才

科技热闻

LeetCode-119. 杨辉三角II(java)

bug菌

Leet Code 7月月更

数据也能进超市

天翼云开发者社区

云计算 大数据 云平台

为安全而生!云安全漫谈开讲啦

浪潮云

云安全 云计算运维

告别缺电焦虑!充电桩装上“智慧大脑”

天翼云开发者社区

云主机 云平台

五个核心能力打造普惠金融商业化发展模式

易观分析

普惠金融

项目进度管理和风险管理记录

老猎人

Python 入门指南之标准库概览

海拥(haiyong.site)

7月月更

大数据环境搭建:​​​​​​​​​​​​​​​​​​​​​Hadoop编译和分布式环境搭建

Lansonli

大数据 hadoop 环境搭建 7月月更

天翼云携手华为,强强联合,共创数据存储新生态

天翼云开发者社区

存储 数字化

2022年中国互联网医疗年度盘点

易观分析

互联网医疗

【愚公系列】2022年7月 Go教学课程 010-数据类型之布尔型和字符类型

愚公搬代码

7月月更

内行,阿里大牛离职带出内部“高并发系统设计”学习手册

程序知音

Java 阿里巴巴 程序员 后端 高并发

揭露数据不一致的利器 —— 实时核对系统

Shopee技术团队

数据分析 后端

大数据ZooKeeper(一):基本知识和集群搭建

Lansonli

大数据 zookeeper 7月月更

百家号基于AE的视频渲染技术探索

百度Geek说

视频 视频渲染

小程序表单组件-1

小恺

7月月更

一招,让停车管理不再难

天翼云开发者社区

数字化 云平台

火眼金睛,天翼云助力打造城市视觉中枢

天翼云开发者社区

大数据 云平台

关于微软 Edge 浏览器的 Tracking Prevention 特性在 Angular 应用中的影响

Jerry Wang

JavaScript typescript Web web开发 7月月更

leetcode 455. Assign Cookies 分发饼干(简)

okokabcd

LeetCode 数据结构与算法 贪心算法

『51单片机』十分钟学会定时器

謓泽

7月月更

Python|分析QQ群聊信息,记录词频并制作词云

AXYZdong

Python 7月月更

数据库审计部署方式有哪些?哪种比较好?

行云管家

数据库 数据库审计 数据库审计部署

大数据培训Spark数据倾斜问题的解决方法

@零度

spark 大数据开发

java零基础入门-多态

喵手

Java 7月月更

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