阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

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

关注

评论

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

如何用AB测试完善产品激励体系

字节跳动数据平台

大数据 A/B 测试 对比实验

同城双机房公网环境下搭建TIDB集群

TiDB 社区干货传送门

数据库架构设计

利用ETLCloud自动化流程实现业务系统数据快速同步至数仓

RestCloud

ETL

提升提测质量之研测共建 | 京东云技术团队

京东科技开发者

测试 研发 企业号11月PK榜

APM建设踩了哪些坑?去哪儿旅行分布式链路追踪系统实践

TakinTalks稳定性社区

TiDB 在安信证券资产中心与极速交易场景的实践

TiDB 社区干货传送门

实践案例

主流的第三方直播SDK对比(腾讯云、即构、阿里云、声网、网易云信、网宿)

音视频开发_AIZ

实时音视频 直播技术 SDK测试 音视频开发 直播间

PON网络应用场景

小魏写代码

TiDB x CAPCOM丨为在线游戏提供灵活、可靠、可扩展的数据库服务

TiDB 社区干货传送门

实践案例

TiDB Cloud 上 Tiflash 列存功能初体验

TiDB 社区干货传送门

版本测评 性能测评 新版本/特性解读

利用 Kubernetes 降本增效?EasyMR 基于 Kubernetes 部署的探索实践

袋鼠云数栈

Kubernetes 运维 集群管理

21 天技术人写作行动营招募中

InfoQ写作社区官方

AI 写作 写作技巧 热门活动 活动预告

微众银行 TiDB HTAP 和自动化运维实践

TiDB 社区干货传送门

实践案例

TiDB x 云盛海宏丨加速精细化运营,云海零售系统的架构演进

TiDB 社区干货传送门

实践案例

四载磨砺,一群青年“识瘤者”以AI助力医疗创新

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 先锋开发者云上说

观测云产品更新 | 监控、图表、服务管理、单点登录、Pipeline 等优化

观测云

数据库 pipeline 单点登录

SCSS 进阶之道:探索更多样式表达的可能性

伤感汤姆布利柏

为了 Vue 组件测试,你需要为每个事件绑定的方法加上括号吗?

OpenTiny社区

开源 Vue 前端 测试

OpenCL任务调度基础介绍 | 京东物流技术团队

京东科技开发者

gpu 编程语言 企业号11月PK榜 OpenCL

预发部署时机器总是重启两次的“简单”排查

阿里技术

部署 故障排查 排查 预发 重启

陈长城:NineData面向Doris实时数仓集成的技术实践

NineData

数据库 实时数仓 Doris 玖章算术 NineData

aiohttp - Python 异步 HTTP 客户端库入门教程

Liam

Python 编程 程序员 后端 aiohttp

邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站

Serverless Devs

云计算 Serverless AIGC 沙龙预告

你真的了解@Async吗? | 京东云技术团队

京东科技开发者

spring 注解 Async 企业号11月PK榜

MATLAB R2023b mac最新中文激活版资源

影影绰绰一往直前

如何充分压榨一台EC2

申屠鹏会

学习指南:如何快速上手媒体生态一致体验开发

HarmonyOS开发者

HarmonyOS

Colibri for Mac(原生无损音频播放器) 2.1.9永久激活版

mac

苹果mac Windows软件 Colibri 音频播放器软件

Mini PCIe WiFi card SOC-QCA9880 vs. QCA9882: 802.11ac Dual-Band Wireless Chipset Sh

wifi6-yiyi

QCA9880 Mini PCIe WiFi card

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