Тебе не стоит изучать руби

Geekfest

Опять стартап-школа и снова меня заворачивает в технопарк.
Да и как вообще можно было не повременить с программой на вечер, если тема доклада была в стиле Джоэла Спольски: «Sinatra — когда нет ничего лишнего» (презентация). Тема не вписывалась в формат аудитории, что выступавший и почувствовал. Для себя я так и не ответил на свой вопрос, зачем собравшимся советовать Синатру и о нём слушать?

После, спросив у некоторых “будете знакомиться с синатрой?” было видно, что никто так и не понял зачем им это. Хотя знакомиться с гитом и руби, искать аналитику, новости сказали будут.

Так что, я пожалуй напишу почему не стоит тратить время на знакомство с руби и что ваша позиция должна быть короткой: руби отцой.

Документация

Первое и главное на чём спотыкаешься. Официальная документация по рельсам это поиск гугла. Гугл конечно крутой источник, но всё же не сравним к примеру с php.net или perldoc.perl.org ( по сравнивению с ruby-doc.org apicodk.com github.com/ruby guides.rubyonrails.org api.rubyonrails.org). Нет такого ресурса по рельсам (руби), где было бы подробное и внятное описание языка, функций, методов, библиотек, модулей, с ссылками на сопутствующую инфу и примеры с обсуждением сообщества. Не получиться просто открыть и начать последовательно постигать (исходники не открыты), выполнять тутотариалы и испытывать то самое наслаждение от пользования этим инструментом. Придётся исследовать и вникать в то, япошка когда-то элегантно аккумулировал. В руби на здравом смысле не прокатишься, хоть он и хорошо читаемый. Ведь он нефига не интуитивно-понятный, хоть вещи типа stdlib не сравнимы с тем как это в php. Кто-нибудь конечно возразит, что есть подкасты и блоги, но это не сравнимо с офф. документацией и вообще в руби такая версионность, что пара мажорных релизов и всё устарело. Это возражение так же ошибочно как и то, что фреймворку не нужна документация.

Порог вхождения

Не верь презентациям которые гласят что это очень легко. Когда они транслируют свои массонские скринкасты, где за несколько часов собирают блог (попробуйте это! потом развернуть без знания nginx/ phusion passenger). По ним тебе будет легко собрать из гемов 80% функционала и интегрировать его. В случаи php хватила бы наверно пары плагинов. А для питона это был бы стандартный функционал.
Притянутый пруф: python-django-sample/requirements.txt и ruby-on-rails-tutorial-sample-app/Gemfile

Да в рельсах многое автоматизированное и если сделать то выйдет быстро. Но это отнюдь не значит, что это легко понять. Необходимо знать основные паттерны на хорошем уровне, что лично для меня попаболь. К тому же, MVC, ActiveRecord, etc. в руби отличны от классического.
И то перечисление языков на которых писал докладчик, Александр Бацуев, я возьму как пруф, к доводу что среди рубистов очень много опытных разработчиков пришедших из других языков. Выбравших лисп-подобный синтаксис и быструю разработку прототипа и вывод в туманный продакшн. Такие разработчики укладываются в догму Голодного, что человек который выучил один язык программирования, за три недели выучит другой язык.
Я не считаю, этот синтез лиспа, смаллталка и перла подходящим в качестве первого языка. Во всяком случаи его собрат питон точно лучше, пусть будет по причине жёсткой стандартизованности и наличия литературы на русском.
Я бы даже не рекомендовал какой-либо фреймворк, даже твиттер бутстрап. Безусловно использование синатры облегчит в разы разработку, но ¾ присутствующих это первый курс и они не знакомы с абстракциями… Для новичка фреймворк это не тупиковая ветвь, это шлакбаум т.к. он не будет понимать почему это работает так, а в руби это может работать по всякому (только вариантов задания переменной четыре способа). Не буду ещё раз упоминать про, ‘а вот в другие’.

Сообщество

Вокруг этого интерпретируемого языка сложилось уникальное сообщество элитарных эгоистов. Разработчиков которые почти при любом сравнении действительно могут говорить: “в руби это появилось много лет назад”. У хипстоты своя атмосфера и они не хотят притока php-быдлокодеров, может поэтому и нет доков.

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

Косяки

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

Руби хоть и язык универсальный, но сегодня область его оправданности и практического применения аналогична области PHP т.к. по mri,rubinius,maglev,jruby, rubymotion ещё нельзя ничего сказать. Он как php, только сахара больше. Я не нашёл доказательств обратного. Из значимого ПО только puppet ещё жив. Chef, Vagrant, Metasploit доказывают мою точку зрения.

Одна из концепции руби это свобода разработчика, создатель рельсов (считает)[https://vimeo.com/17420638], что это неправильно когда язык ограничивает разработчика, не позволяя ему использовать лучшие решения. Утверждает, что отсутствие в руби жёсткой структуры и правил это очень удобно, для опытных программистов. Но это узкая тропинка и плохие привычки для новичков.

Обезьяно-латание делается в руби так легко и непринуждённо, что это явление разрушает руби Это ещё более худшая особенность руби по сравнению с реализацией ActiveRecord, RSpec прошу заметить.

Метапрограммирование предлагает свой путь, удобный для написания и невероятно трудный для поддержки

Уникальное метапрограмирование, мульти-парадигмы, динамичность дают вам редкую возможность гибко извернуться и выстрелить себе в ногу. Хоть неклассический ООП во многом безусловно полезен, как то Scaffolding и “встроенные” юнит-тесты.

Но очень многого в руби недостаёт: всё ещё нет нормальной IDE, а те что есть написаны не на руби, а на java кстати.Очень серьезные траблы с отладкой которые многих отпугивают от руби.Поддержка интернационализации хилая. Нет байт-код кэшеров, невозможность компиляции-оптимизации, неуправляемое выделение памяти, … не заперечисляешься.

Будущее

Рельсы являются прекрасным примером того как красиво упаковать то, что было открыто в области разработки программного обеспечения на протяжении последних пяти лет и получить то, что позволяет получать удовольствие от программирования.
just fo fun направленность как и быстрое становление сказалось на архитектуре. Когда у языка с новой версии нет обратной совместимости, API претерпевает кучу изменений это неприятно.
Послушав интервью с Матцом, кажеться, что у него до сих не выработались цели, у него даже сейчас, когда его проект получил кучу последователей, нет чёткой картины будущего. (Обойдёмся без мема с Торвальдсом.)

Уникальность Ruby в том что это язык который стал популярен благодаря фреймворку Rails, что уже не обычно. Вы ошибаетесь если считаете, что с Джангой похожая история. Если бы 37signals не сделали и так активно не пиарили rails, то на ruby так бы и писали 2,5 азиата. По сути, весь язык на рынке представлен одним фреймворком. А всё, что сейчас для него создаётся, почти всё это, обвязки вокруг рельсов. Если вы хотите написать веб-приложение на Ruby, то другие фреймворки хоть и пиляться, но если что-то не пишете что-то маленькое, то выбора у вас и нет. Rails это как JUnit в java в своё время – тоже мешает развитию других решений. То количество вакансий что есть мизерное и это одни рельсы.

Дальнейшеее развитие очень туманно, да и отсутствует поддержка со стороны enterprise-сектора и интернет-провайдеров.

Rails won’t become mainstream

P.S и да, это рубиный бложек с синатрой в сердце.