Ruby on Rails конвенция. Оптимизация для разработки

в 2:54, , рубрики: ruby, ruby on rails, метки: , ,

Ruby on Rails конвенция. Оптимизация для разработки - 1Феноменальная популярность Ruby on Rails в значительной степени обусловлена переходу к новым трендам и технологиям в нужный момент времени.

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

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

Итак, вот девять самых важных столпов Rails конвенции и того как их воспринимает ваш покорный слуга:

  1. Оптимизация для разработки
  2. Конвенция выше конфигурации
  3. Меню это омакасе
  4. Отсутсвие парадигм
  5. Культ красоты кода
  6. Острые лезвия
  7. Интегрированная система ценностей
  8. Прогресс превыше стабильности
  9. Снарядись большой палаткой

Оптимизация для разработки

Ruby on Rails не существовало бы без Ruby, поэтому логично, что первый столп конвенции появился из самих истоков Ruby. Ruby возвеличивает удовольствие от разработки на пьедестал в отличие от многих других языков программирования.

Если Python может похвастаться тем, что есть ‘один и желательно только один способ реализации чего-либо’, Ruby пришлось по вкусу выразительность и лаконичность.

Там где Java активно защищал программистов от самих себя, Ruby сбросил веревку и стартовый набор для первых шагов в изучении.Там где Smalltalk пробил непорочность установленной культуры, Ruby накапливал ключевые слова и конструкции с прожорством.

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

Ruby был разработан не только для того чтобы осознать, но и вместить в себя всю палитру чувств программиста. Будь то неадекватность, фантазии или радость. Matz обеспечил реализацию идеи поразительной сложности, суть которой в том, что среда разработки должна быть помощником программисту. Ruby это один из тех случаев где, то что кажется простым и понятным на первым взгляд является акробатическим трюком с завязанными за спиной руками. За эти решения приходится платить (спросите об этом команду Jruby, которые пытались сделать реверс инжиринг всего этого), именно поэтому они так сильно заслуживают уважения.

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

Я описал бы погружение в Ruby как находку волшебной перчатки, которая идеально заполнила мое сознание. Лучшее что я мог бы себе представить. Событие, которое стало моим личным переходом от парадигмы ‘создавать программы потому что я в них нуждаюсь’ к ‘созданию программ с любовью и самовыражению через них’. Для тех кто знаком с работой Mihaly Csikszentmihalyi, тем трудно переоценить его влияние на Ruby сообщество.

Я не преувеличиваю, когда говорю, что Ruby изменил меня и мою жизнь. Для меня это было неким откровением. Он проник внутрь моего сознания и призвал помочь меня выполнять миссионерскую миссию в качестве услуги за творение Matz. С целью помочь распространить его творение и рассказать о его преимуществах.

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

В любом случае, вопрос в том, что такое Ruby on Rails и как он руководствуясь своими принципами и идеями продолжает развиваться? Чтобы ответить на данный вопрос, я думаю, уместно будет привести один из принципов, который был часто использован при написании Ruby в первые дни: принцип наименьшего удивления (PoLS). Ruby должен вести себя так как вы ожидали.

Это легко описать на контрасте с Python:

$ irb
irb(main):001:0> exit

$ irb
irb(main):001:0> quit

$ python
>>> exit

User exit() or Ctrl-D (i.e. EOF) to exit

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

Причиной тому что PoLS попал в немилость сообщества Ruby, является его субъективный подход. Но удивительно кому же он пал в немилость? Что же, этот человек Matz. И люди, которые удивляются таким же образом, как и он. Как только Ruby сообщество пополнило свои ряды люди стали удивляться несколько разным вещам, что стало причиной бесчисленных писем.

Итак, еще раз, как это связано с Ruby on Rails? Rails разработан с применением такого же принципа и принципа большой большой улыбки (DHH), который гласит:

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

Создание Ruby on Rails является довольно самовлюбленным начинаем. Оба проекта возникли из ума единственного Творца. Но вполне возможно, что я проецирую свои собственные мотивы на Матц’а, поэтому позвольте воззвать к тому что я знаю: я создал RoR в первую очередь для себя. Чтобы комфортно разрабатывать и основная ценность RoR состоит в том чтобы больше наслаждаться жизнью. Избавить себя от ежедневной рутины.

Как и Матц я временами заходил в тупик. Один из таких примеров класс Inflector, который понимает много неточностей английского языка чтобы преобразовать класс Person в имя таблицы People, Analysis в Analyses и Comment в Comments. Такое поведение системы воспринимается сейчас как неприкасаемая часть Rails, но были времена когда бушевали споры на эту тему, когда конвенция еще только создавалась.

Еще один небольшой пример, который потребует немного меньше усилий для восприятия:
о ужас, Array#second #fifth (и как кто-то хорошо подметил #forty_two, хороший тролинг). Эти алиасы были очень оскорбительны для некоторых людей которые сокрушались по поводу того, что зачем столько наворотов, если можно написать просто Array#[1] Array#[2] и Array#[41].

Оба решения вызывают у меня улыбку и по сей день. Я с удовольствием пишу людям, third как тестовый кейс в консоли. Нет, это не логично. Это не эффективно. Но это заставляет меня улыбаться и следовать принципам для обогащения своей жизни и оправдывает мой дальнейший вклад в Rails дальнейшие 12 лет.

В отличие от оптимизации производительности, трудно измерить удобство разработки и счастье программиста. Это делало данное начинание почти антинаучным по своей сути. Программистов учат спорить и оперировать измеримыми материями, то в чем можно сделать четкий вывод, там где A категорически лучше чем B.

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

Оригинал

Автор: рекрут

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js