BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Ruby和Rails:朴实而深远的朋友

| 作者 David A. Black 关注 0 他的粉丝 ,译者 Jason lai 关注 0 他的粉丝 发布于 2007年10月19日. 估计阅读时间: 10 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

许多人都说,Ruby和Rails的入门门槛很低——而且大家都是不约而同地表达了同样的观点。“Ruby语言帮你解决了很多事情,”这些年我听到的都是这样的话语,“因此你可以专注于实现你的目标。”而你也常常会听见人们用相似的好评褒扬Rails。

对于这两种情况的说法,我恰好都表示赞同。

当然,这并不是说,写出能正常工作的代码或者让一个Rails应用程序启动并正常运转这样的事情,是你从街边随便揪出来的一个人就可以做的。门槛低只是相对的说法;你得先对习惯于程序开发的过程,才能体会到透明编程技术所带来的好处。你得先入道,才能借助Ruby或者Rails在原有的“道”上取得突破。

对于用户来说,易用性同样也是相对的。数十年来,从Usenet和其它在线评论中,我们可以发现,人们对于编程工具一直没有一致认可的选择。所有这些希望说服对方改变自己所用的工具集合的高谈阔论都是在浪费时间——没错,浪费时间,这些话里面的每一个字都在浪费时间——想想都让人觉得对不起自己的胃。(我从1990年就开始关注Usenet和其它在线论坛了,但从没看见有谁成功说服另外一个人转投某个语言或者工具。) 因此,费尽心机宣称某个语言或者框架比起另一个更透明或者组织得更为良好,或者更容易使用,根本没有意义。

不过,要是你听见哪些技术被人们以同样的语气不停赞扬着的话,那么你至少得好好留意并且讨论一下这些技术了。

至少,在理论上像Ruby和Rails这样的编程语言和系统都是为了帮助你解决某方面具体问题的,也就是说,像乐器一样,它们是让你达到结果和完成目标的工具,而它们本身并不是目的。不过,音乐家把自己乐器的历史、文化和技术特性视为一个整体,而程序员们正如他们一样,对于自己所用的语言和系统也存在同样的认同感。没错,你用算法就可以描述出一个编程任务,然后可以任选几百种编程语言中的一种来把任务实现出来——这和你可以使用数百种乐器中的任意一种演奏出一个特定的曲调是一个道理。不过使用了哪种乐器并不是最终的结局。

将音乐家和程序员做类比的例子简直是不胜枚举,而其中有一些类比,与手头的问题还有易于入门的问题是有关系的。

小提琴大师Itzhak Perlman(伊扎克·帕尔曼)就恰如其分地点评了小提琴和钢琴的区别——从长远角度看,两者没有哪个更难也没有哪个更简单,但具体说起来,和小提琴还是不一样,钢琴上手还是更容易一些。Perlman如是说:

和钢琴演奏者相比,小提琴演奏者要度过一段更为艰苦的历程才能演奏出真正的音乐,因为钢琴演奏者[……]一上手就得照着乐谱练曲子,依葫芦画瓢。他们[钢琴演奏者]不用处理颤音(vibrato),不用操心换把(shifting),不用对付滑音(sliding),也无须顾虑弓速(bow-speed)[……]你只要[在钢琴上]摁下一个键就能听到声音[……]你一开始就得把音乐弹出来。

正因如此,钢琴就成了乐器王国中的Ruby或者Rails一样脱颖而出。

Perlman把低入门门槛描述成一种责任:钢琴演奏者没办法拖延自己演奏动人音乐的责任,因为他们无法以钢琴在器械操作上有难度为借口。(我们当然不是说你轻而易举就可以把钢琴弹得行云流水,而只是说在你面前扔一本乐谱你就能弹出一点什么,而初用小提琴你是做不到这样的。)

于是,自我夸耀——当然不是说Perlman在自夸,不过他开玩笑地把这个未决的问题抛给了更多的人——就成了演奏高难度乐器的音乐家专属的权利了,这些人能用“奇技淫巧”演奏出悠扬的乐章。但是,在计算机世界中,显摆的权利则属于使用能让自己效率更高的工具的人们,而Ruby和Rails则成为人们“吹牛显摆”所用的扩音大喇叭。

但是,我们应该分开讨论Ruby和Rails,它们入手的难易度可不能直接就划上等号——这也是和我们文章主基调像对应的说法。这个说法也代表人们常会表达的疑虑:到底Rails开发人员该不该花时间掌握Ruby呢?

从某个角度讲,这个问题是可以理解的。Rails和Ruby“门槛低”的美名并不意味着它们对于同一群人来说都很容易,或者说不意味着它们容易的方式是相同的。S系统并不因为使用L语言写的,就一定和L语言具备相同的难度。比如说,Ruby是使用C语言写的,不管人们对C语言如何褒扬贬抑,要说得上C语言入门通常是没那么简单的。

对熟练掌握Ruby语言的反驳,我见过两种情况,分别基于不同的立场:

  • Rails很简单,但Ruby就高深得多了(从难度的意义上说,级别太高)。
  • Rails是一个系统;而Ruby则是原材料(不从简单的意义上讲,级别过低)。

对于这两种立场,就未来的Ruby框架或者还没有问世的类库来说,任意一种都可以说是正确的——而且也可能确实是正确的,但不管哪一个都没能正确描述Ruby和Rails之间的关系。

这里的关键点在于Rails设计的方式。Rails让开发人员用到Ruby语言中的许多资源。是的,在许多方面,Rails都是自成一套系统的。然而在许许多多其它的方面,Rails暴露、探索并且发掘了它和Ruby的联系,而不是将这些联系隐藏或者掩盖起来。

举一个例子:helper文件。在你每生成一个控制器(controller)的时候,helper文件也会相应为你创建出来。Helper文件里面什么也没有:你可以在里面放入自己写的Ruby方法,并可以从视图模板中调用这些方法。

这里并没有什么和Ruby无关的抽象,也没有将Ruby封装成一个单独的领域特定语言,更没有“只能通过向导生成(Wizard Only)”的标志。有的只是空位,由Rails提供的空位,可以让你放入定制的Ruby代码,也就是提供给你让你可以为应用程序加入Ruby代码的空位。

Rails鼓励你使用Ruby,鼓励你去了解Ruby。Ruby既不会过于难以使用,也不会过于底层,而使得你无法给Rails项目带来直接迅速的帮助。

Ruby和Rails是不是两个平级的搭档,二者之间只是一个平行的关系?答案是否定的,要更加复杂一些。Ruby是一项先行的基础技术;而在某些层面上,Rails则为你提供一个经过量体裁衣的、以目的驱动的Ruby环境。

尽管如此,在你编写Rails应用的时候,Ruby看起来确实像一个辅助技术。试想一下XML和XHTML(或者任何其它的XML应用)之间的关系吧。一个是系统,另外一个则是使用第一个系统写出来的系统。尽管二者都被称为“标记语言(markup languages)”,但是它们的命名方案将其中的一个间接层(indirection)给隐藏起来了。

对于Ruby和Rails来说,事情有点儿倒过来了。名字是不一样,但是技术上的关系倒是比较平级(egalitarian)。

可能“平级”这个词用得并不是很准确,可能根本不存在描述Ruby和Rails之间比值的正确用词。可能这就是duck typing的一个例子,duck typing所代表的原则是,无论对象属于什么类或者模块,关系都不大,关键在于它做些什么。当你开发一个Rails程序,并且你决定要写一个Ruby方法来帮你解决问题的时候,你是否能给语言和框架的关系下个定义其实并不重要。你要的只是能给出结果的东西:Rails的配备、Ruby的核心类、插件、Ruby类库、你自己写的方法,等等。

这也正和“百川汇于海”是一个道理。

关于作者

David A. Black(dblack@wobblini.net)是Manning出版社《Ruby for Rails》一书的作者,同时是Ruby Central, Inc.的共同主管。Ruby Central, Inc.是RubyConf和RailsConf这两个国际Ruby及Rails年度大会的主办公司。David通过Ruby Power and Light, LLC提供Ruby和Rails的咨询和培训(http://www.rubypowerandlight.com)。

相关电影

Itzhak Perlman访谈,来自《The Art of Violin》,导演Bruno Monsaingeon,2000年出版。

查看英文原文:Ruby and Rails: In your face... but out of your way

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT