作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
Krešimir Bojčić
Verified Expert in Engineering
21 Years of Experience

Krešimir热衷于构建出色的应用程序,同时尽量减少项目中经常出现的人为复杂性.

Share

有时我听到人们抱怨他们的客户,说他们 insist 在使用Rails时,他们有太多的Kool Aid. If they’re recruiters, 他们几乎会因为不得不找到另一个Ruby on Rails“首席”开发人员而感到恶心. 然后他们拿出类似的东西,令人惊讶的无知 comparison between Git and PHP to prove their point. “他们甚至不知道自己在要求什么,”他们说.

For us as programmers有时候,我们的客户看起来确实毫无头绪. We love to exaggerate cases like this. When you think a bit about it, 认为一个给我钱建造东西的人在某种程度上是有限的并且“只是没有得到它”似乎是不对的. In fact, 我相信大多数客户都很清楚他们的选择,但是他们 still decide to go with Rails.

Why Ruby on Rails? I’ll try to explain what, in my opinion, 使得Rails非常有用,足以被大量的项目和需求认真考虑.

When to Use Ruby on Rails

如果不是Rails本身,很可能没有人知道Ruby的好处. 有些人喜欢贬低Ruby,说它“对Ruby来说太简单了”,因为它有“穿着闪亮盔甲的骑士,叫做Rails”,没有Rails也是如此, “Ruby would be irrelevant”. I can’t say for sure whether or not that’s true, 但我知道,如果世界错过了如此优秀的语言,那将是一个巨大的耻辱. 事实是:Rails的作者故意选择了Ruby, and his ‘wild’ bet paid off with huge interest. 他当时所看到的,今天许多人也能看到. Ruby在某种程度上以一种特殊的方式支持程序员,这种方式很难向“普通大众”解释。. So, why use the Ruby on Rails framework? Ruby makes programmers happy, as advertised.

虽然大多数开发人员都认为Ruby很方便,但也有一些人认为 too much so. 他们担心Ruby允许的所有自由可能会发生什么, all the potential for misuse. Let me illustrate with some monkey patching:

"1".to_i 
#=> 1

class String
  def to_i
    raise 'foobar'
  end
end

"1".to_i 
#=> RuntimeError: foobar

It’s that easy: with just five lines of code, 我们取了一个现有的类并重写了它的行为. Nohting is sacred–not even a String. 这种特殊的错误很容易发现,但事情可能会变得更加险恶:

class String
  def to_i
    self.to_f - 1.13
  end
end

"2".to_i 
#=> 0.8700000000000001

Just like that, 我们在String类中引入了一个错误,它可以被层层的复杂性包裹并掩盖.

So, you might be thinking: 难道每个人和他们的妈妈都能把我宝贵的申请搞砸吗? 虽然这种行为看起来确实很可怕,但事实并非如此. In five years of using Ruby我对这种行为完全没有任何问题. It may seem counterintuitive, but then again, 以每小时60英里的速度向相反方向行驶的汽车也一样,道路中间只有一条细白线隔开. In practice, both work remarkably well.

It may seem counterintuitive, but then again, 以每小时60英里的速度向相反方向行驶的汽车也一样,道路中间只有一条细白线隔开. In practice, both work remarkably well.

另一个好处是Ruby是一个通用的工具. As such, it has sharp, knife-like edges. 我认为成年人可以很好地处理刀具——儿童防护是为孩子们准备的。Tweet). 在IT界被当作孩子对待,会让你成为保罗·格雷厄姆的受害者 Blub paradox你认为没有某些你不懂的特征或者别人告诉你太危险的特征会更好. Of course, today we are asking “why use Ruby on Rails”; thus, this is a debate for another time. 无可否认,Ruby遗漏了其他语言拥有的一些特性(Lisp嗯,嗯)。. 总而言之,Ruby接近“语言力量连续体”的顶端。.

My first few years with Ruby were humbling. 我从阅读别人的代码中学到了很多东西. Sometimes, I was amazed; sometimes, I was mad; but eventually, 这些知识使我能够比以前更有效地与电脑交流. 我几乎为其他一些“繁文缛节”的语言感到遗憾,它们让你为了跳过它们而跳过它们, 同时告诉你“我只是在做对你最好的事情。, it’s for your own good!”

Pragmatism

在Rails的DNA中,有一种对实用主义的深刻尊重. In combination with the benefits of Ruby, 这种实用主义产生了优雅的解决方案,并鼓励/激发了 Ruby on Rails development community to do the same. 实用主义经常被宣传为Rails软件的宗旨, so this claim isn’t new, 但最近我的一个朋友试图向我展示它有多“酷”,这让我想起了它的真实性。 Hibernate really is. He was struggling. 我能感受到他的痛苦,因为他无法设置一大堆本来应该是框架默认值的选项和配置参数.

随着年龄的增长,我对人工复杂性的要求越来越高. 考虑到我在1989年11岁时就开始编写产品代码(从为我的隔壁邻居做的一个项目开始) Clipper Summer ‘87),我对不必要的并发症几乎是零容忍. And Rails scores really high in that department. 这不仅仅是“约定优于配置”; 我说的是整个实用主义的心态,它在Rails社区中受到高度重视并渗透到整个社区.

Expressiveness

Rails是最接近英语的(除非你使用COBOL). It uses what’s known as an internal DSL, extending Ruby with its own semantics. 构造DSL总是很危险的,因为您正在有效地开发一门新语言. Because it is internal, you don’t need to use an external parser, but in a sense it feels like a new language. Rails团队在DSL中取得了很好的平衡, 在有意义的地方使用它,很少过度使用, demonstrating excellent self-control. I think that any programmer, regardless of Rails experience, (甚至一些非程序员)可以理解这一点:

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
...

In fact, if you’re not familiar with Ruby, 这可能看起来很奇怪——就好像它不是一门编程语言一样. 一旦您意识到它只是没有括号的方法调用,就可以开始了. Still, Rails DSL给人的感觉是用来描述需求的一种特殊语言,而实际上它只是巧妙的命名和Ruby优秀语法的固有用法.

Community

Rails有一大批提交者确保它保持在最佳状态. 许多项目都随着时间的推移而逐渐平静下来,但有了Rails,当需要做出决定时,火花仍然会飞起来. 感觉维护者(仍然)真正关心并希望人们使用Ruby on Rails并了解它的好处.

许多项目都随着时间的推移而逐渐平静下来,但有了Rails,当需要做出决定时,火花仍然会飞起来.

在Rails本身的下面,就像一颗樱桃一样,是Ruby及其强大的包管理器, RubyGems, comparable to CPAN 在包装数量方面,并考虑到CPAN的年龄, 这种说法(委婉地说)令人印象深刻. 当Rails试图制作自己的“Rails插件”时,它有过短暂的脱轨。. Fortunately, this did not stick, so RubyGems remains the unified, 极好的源代码的代码编程非常聪明的个人.

The synergy between a cool language, pragmatic web framework, and superb community gives Rails a result much better than the sum of its parts.

Maturity

Rails has been around the block. 从嬉皮士的角度来说,它甚至不再那么酷了. 在选择技术堆栈时,这是一件好事:你想要一些经过验证的东西. And Rails is just that. 我们最近写了一篇关于各种各样的 Ruby interpreters and runtimes that are now available.

Marketing

I know, I know. As an IT professional, I should really value ‘serious’ things and ignore the ‘glitter’. It may seem shallow, but lets face it:

  1. Compared to the competition, the Rails site looks good.
  2. Rails的第一个屏幕演员,在过去,很简单 breath taking. It might not look that impressive today, 但是请记住,我们都知道Java的唯一原因是每个人都对运行Java的可能性感到非常兴奋 Java Applet in the browser. 这最终证明并不是那么重要,但是,这仍然使Java受到关注. 同样,这个15分钟的博客引擎视频也引起了巨大的轰动,让很多人兴奋不已.

This isn’t even about vanity; it’s about engaging as many smart people as you can to put water into the mill. 当考虑框架时,最好的地方是在人群中. 选择这些聪明人所关注的框架仅仅意味着您已经覆盖了更多的基础. And this brings me to my next point.

(Not) Reinventing the Wheel

I have a soft spot for tiny frameworks. 我喜欢能够理解一个特定框架在做什么以及为什么. 从这个意义上说,Rails有点臃肿,有时甚至是压倒性的.

这里的困境是:你想要一遍又一遍地写同样的东西多少次? 我相信有些可以重写得更好,但这需要时间——很多时间. The more you allow Rails to do for you, 您就不必担心重写或重新实现您的功能.

Rails is (as they say) ‘batteries included’. 如果您热衷于稀疏性,或者您觉得需要对所有事物的工作原理有广泛的了解,那么这不是一件好事. 在实践中,如果你放下你的恐惧,它似乎确实有效. Rails对您需要的几乎所有东西都有合理的默认值,并且足够模块化,可以避免将您逼入困境.

Conclusion

Ask yourself again, why use Ruby on Rails? Rails适用于与单页JavaScript应用程序竞争的最先进的公共网站, 而复杂的企业核心系统应用程序通常看起来有点“难看”(使用更通用的, lower fidelity UI), 但是用大量复杂的业务规则和逻辑来弥补这个缺陷. Aside from these Ruby on Rails use cases, 它的好处是它是多功能的,能够与时尚和强大的竞争.

For most of common problems, Rails有一个组件供您使用,几乎是开箱即用的,其文档始终高于平均水平(不知何故), Rails核心团队说服贡献者写文档很酷(尽管我们都知道不是这样), leading to well written, concise and time-saving docs).

When you put aside unicorns and Friday hugs, 最终,您将得到一个强大的框架,可以用于未来的游戏规则改变者和下一个中间路线的商业站点. And with your pool of top-of-the-line gems, 在你的指尖上有一个兵工厂,它实现了计算机编程中一些最聪明的想法. With no fuss.

Hire a Toptal expert on this topic.
Hire Now
Krešimir Bojčić

Krešimir Bojčić

Verified Expert in Engineering
21 Years of Experience

Zagreb, Croatia

Member since January 24, 2013

About the author

Krešimir热衷于构建出色的应用程序,同时尽量减少项目中经常出现的人为复杂性.

作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

World-class articles, delivered weekly.

输入您的电子邮件,即表示您同意我们的 privacy policy.

World-class articles, delivered weekly.

输入您的电子邮件,即表示您同意我们的 privacy policy.

Toptal Developers

Join the Toptal® community.