Ruby on Rails 有什么好处? 经过两个十年的编程,我使用 Rails

已发表: 2022-03-11

有时我听到人们抱怨他们的客户,说他们坚持使用 Rails,他们有太多的 Kool Aid。 如果他们是招聘人员,他们几乎对不得不寻找另一个 Ruby on Rails 'primadona' 开发人员感到恶心。 然后他们拿出类似于 Git 和 PHP 之间令人惊讶的无知比较的东西来证明他们的观点。 “他们甚至不知道他们要的是什么,”他们说。

对于我们作为程序员的我们来说,有时确实看起来我们的客户确实不知道。 我们喜欢夸大这种情况。 仔细想想,认为一个给我钱来建造东西的人在某种程度上是有限的并且“就是没有得到它”,这似乎是不对的。 事实上,我相信大多数客户都很清楚他们的选择,但他们仍然决定使用 Rails。

我将尝试解释,在我看来,是什么让 Rails 足够有益,可以认真考虑用于过多的项目和需求。

红宝石的好处

如果不是 Rails 本身,可能没有人会知道 Ruby 的好处。 有些人喜欢贬低 Ruby,说它“对 Ruby 来说太容易了”,因为它的“穿着闪亮盔甲的骑士叫做 Rails”,没有 Rails,“Ruby 将无关紧要”。 我不能肯定这是否属实,但我知道如果世界错过了如此出色的语言,那将是一个巨大的耻辱。 事实是:Rails 的作者故意选择了 Ruby,他的“疯狂”赌注得到了巨大的回报。 他当年看到的,今天很多人都能看到。 Ruby 以某种特殊的方式使程序员能够以一种很难向“未洗过的大众”解释的方式实现。 那么,为什么要使用 Ruby on Rails? 正如所宣传的那样,Ruby 让程序员感到高兴。

虽然大多数开发人员都同意 Ruby 很方便,但有些人认为它太过分了。 他们担心 Ruby 允许的所有自由以及滥用的可能性会发生什么。 让我用一些猴子补丁来说明:

 "1".to_i #=> 1 class String def to_i raise 'foobar' end end "1".to_i #=> RuntimeError: foobar

就这么简单:只需五行代码,我们就可以使用现有的类并覆盖它的行为。 Nohting 是神圣的——甚至不是一根弦。 这个特殊的错误很容易被发现,但事情会变得更加险恶:

 class String def to_i self.to_f - 1.13 end end "2".to_i #=> 0.8700000000000001

就像那样,我们在 String 类中引入了一个错误,该错误可能会被一层又一层的复杂性包装和掩盖。

所以,你可能会想:每个人和他们的母亲都可以搞砸我宝贵的申请吗? 虽然这种行为确实看起来很吓人——但实际上并非如此。 在使用 Ruby 的五年中,我对这种行为的问题几乎为零。 这似乎违反直觉,但话又说回来,以 60 英里/小时的速度向相反方向驾驶汽车也是如此,道路中间只有一条细白线隔开。 在实践中,两者都工作得非常好。

这似乎违反直觉,但话又说回来,以 60 英里/小时的速度向相反方向驾驶汽车也是如此,道路中间只有一条细白线隔开。 在实践中,两者都工作得非常好。

另一个好处是 Ruby 是一种多功能工具。 因此,它具有锋利的刀状边缘。 我喜欢认为成年人可以很好地处理刀具——儿童防护是为孩子准备的(推文)。 在 IT 领域被当成孩子对待会让您成为 Paul Graham 的 Blub 悖论的受害者:您认为没有某些您不了解或有人告诉您太危险的功能,您会过得更好。 当然,今天我们要问的是“为什么要使用 Ruby on Rails”; 因此,这是另一次辩论。 诚然,Ruby 错过了其他语言的一些特性(Lisp 嗯,嗯)。 总而言之,Ruby 接近于“语言能力连续体”的顶端。

我与 Ruby 相处的最初几年是令人谦卑的。 仅仅通过阅读别人的代码,我就学到了很多东西。 有时,我很惊讶; 有时,我很生气; 但最终,这些知识使我能够比以前更有效地与我的计算机通信。 我几乎为其他一些“繁文缛节”语言感到抱歉,它们让你为了跳过它们而跳过箍,同时告诉你“我只是在做对你最好的事情,这是为了你好!”

实用主义

在尽可能低的水平上,对实用主义的尊重深深地融入了 Rails 的 DNA 中。 结合 Ruby 的优点,这种实用主义产生了优雅的解决方案,并鼓励/激励 Ruby on Rails 开发社区也这样做。 实用主义经常被宣传为 Rails 的帐篷,所以这种说法并不新鲜,但最近我想起了它的真实性,因为我的一个朋友试图向我展示 Hibernate 到底有多“酷”。 他在挣扎。 我能感觉到他的痛苦,因为他无法设置无数原本应该是框架默认值的选项和配置参数。

随着年龄的增长,我对人工复杂性的标准越来越高。 考虑到我早在 1989 年 11 岁时就开始编写生产代码(从隔壁邻居在 Clipper Summer '87 开始的项目开始),我对不必要的并发症的容忍度几乎为零。 Rails 在那个部门的得分非常高。 这不仅仅是“约定优于配置”; 我说的是在 Rails 社区中高度重视并渗透到整个实用主义思维方式。

表现力

Rails 尽可能地接近英语(除非您使用 COBOL)。 它使用所谓的内部 DSL,用自己的语义扩展 Ruby。 构建 DSL 总是很危险,因为您正在有效地开发一种新语言。 因为它是内部的,所以你不需要使用外部解析器,但在某种意义上它感觉就像一门新的语言。 Rails 团队在其 DSL 方面取得了很好的平衡,在有意义的地方使用它并且很少过度使用它,展示了出色的自我控制能力。 我认为任何程序员,无论是否有 Rails 经验,(甚至一些非程序员)都可以理解这一点:

 class User < ActiveRecord::Base devise :database_authenticatable, :registerable validates_numericality_of :years_of_experience, :allow_blank => true acts_as_taggable acts_as_taggable_on :certificates, :expertise_kinds validates_presence_of :first_name, :last_name, :email has_many :translations has_attached_file :avatar, :styles => {:small => "240x240>"} has_attached_file :cv ...

事实上,如果您不熟悉 Ruby,这可能看起来很奇怪——就好像它不是一种编程语言一样。 一旦你意识到这只是没有括号的方法调用,你就可以开始了。 尽管如此,Rails DSL 感觉就像是一种用于描述需求的特殊语言,而实际上它只是聪明的命名和对 Ruby 优秀语法的固有使用。

社区

Rails 拥有一支提交者大军,以确保其保持最佳状态。 许多项目随着时间的流逝而逐渐淡化,但在 Rails 中,当需要做出决定时仍然会产生火花。 感觉维护者(仍然)真正关心并希望人们使用 Ruby on Rails 并了解它的好处。

许多项目随着时间的流逝而逐渐淡化,但在 Rails 中,当需要做出决定时仍然会产生火花。
鸣叫

在 Rails 本身的下面,作为顶部的樱桃,Ruby 拥有强大的包管理器 RubyGems,就包的数量而言,它与 CPAN 相当——考虑到 CPAN 的年龄,这种说法(委婉地说)非常令人印象深刻。 在尝试制作自己的“Rails 插件”时,Rails 出现了短暂的脱轨。 幸运的是,这并没有坚持下去,因此 RubyGems 仍然是由非常聪明的人编写的统一、出色的代码源。

一种很酷的语言、实用的 Web 框架和一流的社区之间的协同作用使 Rails 的结果比其各个部分的总和要好得多。

到期

Rails 一直在街区附近。 以一种时髦的方式,它甚至不再那么酷了。 在选择技术堆栈时,这是一件好事:您需要经过验证的东西。 Rails 就是这样。 我们最近写了一篇文章,讨论了现在可用的各种 Ruby 解释器和运行时。

营销

我知道我知道。 作为一名 IT 专业人士,我应该真正重视“严肃”的事情,而忽略“闪光” 。 它可能看起来很肤浅,但让我们面对现实:

  1. 与竞争对手相比,Rails 网站看起来不错
  2. Rails 的第一个屏幕演员,回到当天,简直令人叹为观止。 今天它可能看起来并不那么令人印象深刻,但请记住,我们都知道 Java 的唯一原因是每个人都对在浏览器中运行 Java Applet 的可能性如此兴奋。 事实证明这毕竟不是那么重要,但这仍然让 Java 成为人们关注的焦点。 同样,这个 15 分钟的博客引擎截屏视频非常成功,让很多人兴奋不已。

这甚至与虚荣心无关; 这是为了让尽可能多的聪明人参与进来,将水注入工厂。 当考虑框架时,最好的地方是在人群中。 选择这些聪明人所关注的框架仅仅意味着已经为您覆盖了更多的领域。 这让我想到了下一点。

(不)重新发明轮子

我对微型框架情有独钟。 我喜欢当我能够理解特定框架在做什么以及为什么这样做的时候。 从这个意义上说,Rails 有点臃肿,有时甚至是压倒性的。

这里的困境是:你想一遍又一遍地写同样的东西多少次? 我敢肯定,其中一些可以更好地重写,但这需要时间——很多时间。 您允许 Rails 为您做的事情越多,您就越不必担心重写或重新实现您的功能。

Rails(正如他们所说)“包括电池”。 如果您热衷于稀疏性,或者如果您觉得需要对一切如何运作有广泛的了解,这不是一件好事。 在实践中,如果你放下恐惧,它似乎确实有效。 Rails 对您需要的几乎所有东西都有合理的默认值,并且模块化程度足以避免让您陷入困境。

结论

再问问自己,为什么要使用 Ruby on Rails? Rails 适用于与单页 JavaScript 应用程序竞争的最先进的公共网站,以及通常看起来有点“丑陋”(具有更通用、保真度较低的 UI)的复杂企业核心系统应用程序,但可以弥补这一点大量复杂的业务规则和逻辑的缺陷。 它的好处是它用途广泛,能够与时尚和强大的人竞争。

对于大多数常见问题,Rails 提供了一个几乎开箱即用的组件,其文档始终高于平均水平(不知何故,Rails 核心团队说服贡献者编写文档很酷(尽管我们都知道它是不是),从而导致编写良好、简洁且省时的文档)。

当您抛开独角兽和周五的拥抱时,您最终会得到一个强大的框架,您可以将其用于您未来的游戏规则改变者和您的下一个中间业务站点。 借助您的顶级宝石库,您的指尖就拥有了一个可以实现计算机编程中一些最聪明的想法的武器库。 没有大惊小怪。

相关:时间戳截断:Ruby on Rails ActiveRecord 故事