Каковы преимущества Ruby on Rails? После двух десятилетий программирования я использую Rails

Опубликовано: 2022-03-11

Иногда я слышу, как люди жалуются на своих клиентов, говоря, что они настаивают на использовании Rails, что у них слишком много Kool Aid. Если они вербовщики, то у них чуть не болит живот из-за того, что им нужно найти еще одного разработчика-примадона Ruby on Rails. Затем они приводят что-то похожее на это удивительно невежественное сравнение Git и PHP, чтобы доказать свою точку зрения. «Они даже не знают, о чем просят», — говорят они.

Для нас, программистов, иногда действительно кажется, что наши клиенты понятия не имеют. Мы любим преувеличивать подобные случаи. Если немного подумать об этом, кажется неправильным думать, что человек, дающий мне деньги на строительство, каким-то образом ограничен и «просто не получает их». На самом деле, я считаю, что большинство клиентов прекрасно знают свои возможности, но все же решают использовать Rails.

Я попытаюсь объяснить, что, по моему мнению, делает Rails достаточно полезным, чтобы его можно было серьезно рассматривать для множества проектов и нужд.

Преимущества Руби

Возможно, никто бы и не узнал о преимуществах Ruby, если бы не сам Rails. Некоторым нравится принижать 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

Это так просто: всего пятью строками кода мы взяли существующий класс и переопределили его поведение. Ничто не является священным — даже струна. Эту конкретную ошибку было бы легко обнаружить, но все может стать гораздо более зловещим:

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

Точно так же мы ввели ошибку в класс String, которая может быть завернута и скрыта от уровня сложности к уровню.

Итак, вы можете подумать: неужели все и их мамы испортят мое драгоценное приложение? Хотя такое поведение действительно выглядит пугающим, на самом деле это не так. За пять лет использования Ruby у меня не было ровно никаких проблем с таким поведением. Это может показаться нелогичным, но опять же, так же как и вождение автомобилей со скоростью 60 миль в час в противоположных направлениях, разделенных только тонкой белой линией посередине дороги. На практике оба работают на удивление хорошо.

Это может показаться нелогичным, но опять же, так же как и вождение автомобилей со скоростью 60 миль в час в противоположных направлениях, разделенных только тонкой белой линией посередине дороги. На практике оба работают на удивление хорошо.

Еще одним преимуществом является то, что Ruby является универсальным инструментом. Таким образом, он имеет острые ножевидные края. Мне нравится думать, что взрослые прекрасно справляются с ножами — защита от детей предназначена, ну, для детей (твит). А когда в IT обращаются с вами как с ребенком, вы становитесь жертвой парадокса Пола Грэма Блаба: вы думаете, что вам будет лучше без некоторых функций, которые вы не понимаете или которые кто-то сказал вам, что они слишком опасны. Конечно, сегодня мы спрашиваем «зачем использовать Ruby on Rails»; таким образом, это дискуссия в другой раз. Следует признать, что в Ruby отсутствуют некоторые функции, которые есть в других языках (Lisp, хм, хм). В целом, Ruby близок к вершине «континуума силы языка».

Мои первые несколько лет с Руби были унизительными. Я так многому научился, просто читая чужой код. Иногда я был поражен; иногда я сходил с ума; но в конце концов эти знания позволили мне общаться с моим компьютером гораздо эффективнее, чем раньше. Мне почти жаль некоторые другие «бюрократические» языки, которые заставляют вас прыгать через обручи только ради того, чтобы прыгать через них, при этом говоря вам: «Я просто делаю то, что лучше для вас, это для вашего же блага!»

Прагматизм

В ДНК Rails присутствует глубокое уважение к прагматизму на самом низком уровне. В сочетании с преимуществами 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 остается унифицированным превосходным источником кода, написанного очень умными людьми.

Синергия между классным языком, прагматичной веб-инфраструктурой и превосходным сообществом дает Rails результат , намного лучший, чем сумма его частей.

Зрелость

Рельсы были вокруг квартала. В хипстерском стиле это уже даже не круто. Это хорошо, когда дело доходит до выбора стека технологий: вам нужно что-то проверенное. И Rails — это именно то, что нужно. Недавно мы написали статью о большом разнообразии интерпретаторов и сред выполнения Ruby, которые сейчас доступны.

Маркетинг

Знаю, знаю. Как ИТ-специалист, я действительно должен ценить «серьезные» вещи и игнорировать «блеск» . Это может показаться поверхностным, но давайте посмотрим правде в глаза:

  1. По сравнению с конкурентами сайт Rails выглядит хорошо .
  2. Первый экран Rails в свое время просто захватывал дух. Сегодня это может показаться не таким впечатляющим, но помните, что единственная причина, по которой мы все знаем о Java, заключается в том, что все были так увлечены возможностью запуска Java-апплета в браузере. В конце концов, это оказалось не так уж и важно, но тем не менее это привлекло внимание к Java. Точно так же этот 15-минутный скринкаст движка блога стал хитом, взволновавшим многих людей.

Дело даже не в тщеславии; речь идет о том, чтобы привлечь как можно больше умных людей, чтобы пустить воду на мельницу. Когда речь идет о фреймворках, лучше всего находиться в толпе. Выбор фреймворка, на котором сосредоточены эти умные люди, просто означает, что для вас уже охвачено гораздо больше возможностей. И это подводит меня к следующему пункту.

(Не) изобретать колесо

Я питаю слабость к крошечным фреймворкам. Мне нравится, когда я могу понять, что делает тот или иной фреймворк и почему. В этом смысле Rails несколько раздут, а временами даже перегружен.

Здесь дилемма: сколько раз вы хотите писать одно и то же снова и снова? Я уверен, что некоторые из них можно переписать лучше, но это требует времени, очень много времени. Чем больше вы позволяете Rails делать за вас, тем меньше вам приходится беспокоиться о переписывании или повторной реализации вашей функциональности.

Rails — это (как говорят) «батарейки в комплекте». Это не очень хорошо, если вы заинтересованы в разреженности или чувствуете потребность в обширных знаниях о том, как все работает. На практике, если вы отпустите свои страхи, это действительно сработает. Rails имеет разумные значения по умолчанию почти для всего, что вам нужно, и является достаточно модульным, чтобы не загонять вас в затруднительное положение.

Заключение

Спросите себя еще раз, зачем использовать Ruby on Rails? Rails подходит как для современных общедоступных веб-сайтов, которые конкурируют с одностраничными приложениями JavaScript, так и для сложных корпоративных системных приложений, которые обычно выглядят немного «уродливее» (с более общим и менее точным пользовательским интерфейсом), но компенсируют это. порок с кучей сложных бизнес-правил и логики. Его преимущество в том, что он универсален и способен конкурировать как с гладкими, так и с мощными.

Для большинства распространенных проблем в Rails есть компонент в вашем распоряжении, почти готовый к использованию, с документацией, которая постоянно выше среднего (каким-то образом основная команда Rails убедила участников, что написание документации — это круто (хотя мы все знаем, что это круто). нет), что приводит к хорошо написанным, кратким и экономящим время документам).

Когда вы откладываете в сторону единорогов и пятничные объятия, вы получаете мощный фреймворк, который можно использовать как для вашего будущего революционного проекта, так и для вашего следующего среднего бизнес-сайта. А с вашим набором первоклассных драгоценных камней у вас под рукой будет целый арсенал, который реализует некоторые из самых ярких идей в области компьютерного программирования. Без суеты.

Связанный: Усечение метки времени: история Ruby on Rails ActiveRecord