Skip to content

Instantly share code, notes, and snippets.

@kate-kate
Last active May 3, 2017 15:53
Show Gist options
  • Save kate-kate/242562f2cf0b2048368ca4edfecd3d0e to your computer and use it in GitHub Desktop.
Save kate-kate/242562f2cf0b2048368ca4edfecd3d0e to your computer and use it in GitHub Desktop.
ROR
Конвенция Ruby on Rails. Оптимизация разработки
Феноменальная популярность 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 разработан с применением схожего с PoLS принципа - принципа большой большой улыбки (DHH), который гласит:
API интерфейсы разработаны с таким пристальным вниманием ко всему подряд, что заставляют меня улыбаться все больше и шире. Когда я излагаю это таким образом, это звучит комично и самовлюбленно, даже мне трудно возразить первому впечатлению.
Создание Ruby on Rails является довольно самовлюбленным начинанием. Оба проекта возникли из ума единого Творца. Но вполне возможно, что я проецирую свои собственные мотивы на Matz, поэтому позвольте воззвать к тому что я знаю: я создал RoR в первую очередь для себя. Чтобы было он заставлял меня улыбаться, в первую и главную очередь. Эта утилита была во многом подчинена идее получения удовольствия от собственной жизни. Избавить себя от ежедневной рутины.
Как и Matz, я временами заходил в тупик. Один из таких примеров - класс 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 обладают большим сообществом, которое преследует именно такие цели. Они кичатся более насыщенной жизнью, это - совокупность позитивных эмоций, и их победа очевидна.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment