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 故事