Проблема популярности Ruby и Ruby on Rails - плохая документация
Эту статью я написал 23 апреля 2012, она появилась еще задолго до появления этого сайта, что вполне естественно, так как тогда я только приступил к изучению Ruby и Ruby on Rails, вот и поделился своими впечатлениями.
Я до сих пор не в восторге от документации Ruby on Rails, хотя документация Ruby еще более-менее.
Собственно, статья:
Хочу поделиться своими соображениями. Я читал много топиков на тему Ruby, Ruby on Rails, Ruby vs PHP, Python vs PHP. «Каждый кулик свое болото хвалит». Я считаю, что это дело сугубо каждого — какую систему или язык программирования использовать, личные предпочтения, как говорится, на вкус и цвет товарищей еще поискать. Но суть даже не в этом. Я хорошо знаю PHP, не так давно взялся за изучение Ruby и Ruby on Rails. Знаете, как ни странно это звучит, но мне нравятся обе системы — и PHP, и Ruby, возможно даже одинаково. В Ruby есть свои прелести, которые привлекают — мощность самого языка, очень понятный и лаконичный синтаксис (если с толком подойти к изучению), в PHP — простота и все та же лаконичность языка. Хорошие системы, хорошие инструменты, но все же Ruby как-то в роли догоняющего. Что же тут не так?
И вот над чем я задумался. Если Ruby — столь привлекательный и модный ныне язык разработки, то почему же его продвижение идет с неком скрипом? Вроде там все ясно и понятно, но вот чего-то явно не хватает. А не хватает по сути самого главного — хорошей документации. Предвижу много возражений. Да, она есть, но в каком виде? На официальном сайте есть несколько ссылок на доки. Все вроде бы хорошо, всего с избытком. Но! Позвольте-ка, как я могу доверять документации в которой не нашел описания элементарного метода core (!) method_missing, зато в другом источнике — на-то пожалуйста! Плюс ко всему нет каких-то перекресных ссылок на сопутствующие, похожие методы.
И как это все рознится с документацией по PHP. Вот вам сайт, вот вам тут же ВСЯ документация — и описание языка, и функции, и перекрестные ссылки. Я помню, как я начал писать на PHP — я просто открыл сайт и шаг за шагом начал исследовать сначала сам язык, попутно узнавая о функциях. Просто прелесть! За месяц с нуля я написал небольшой сайт вообще без всяких проблем.
Совсем иная картина с Ruby. К изучению Ruby я подошел более основательно — купил книгу, досконально все изучил (кстати, очень рекомендую «Язык программирования Ruby» Д.Флэнаган, Ю.Мацумото), затем приступил к Rails — нашел перевод книги, последовательно по примерам изучал. В принципе там все ясно и понятно изложено. Но вот после окончания прочтения возникает такое чувство, как-будто тебе кратко чего-то объяснили («от опушки леса до чащи лесной довели»), а потом — «дальше давай уж сам как-нибудь, браток, по темному лесу топай, а фонарик и компас, не, мы тебе не дадим — тут же и так все ясно-понятно, мы сами, вон, спокойно по этому лесу бродим и не блуждаем, и ты не заблудишься». А ничего, что я в этом «лесу» впервые?..
Документация по RoR просто отвратительная — там не найти того, о чем не знаешь — нет полного и понятного описания методов, нет описания параметров методов, нет примеров, нет описаний классов и их взаимосвязей. Опять же, парируя возражения, скажу, что те описания, которые есть — это как раз на уровне учебника для начинающих — описано то, что и так в принципе понятно. А куда же дальше идти? Исходники ковырять? Но, позвольте, я не сторонник автоВАЗа, например, именно потому, что эти машины надо почти сразу же после покупки «допиливать». Тут похожая ситуация — изучить авто, чтобы нормально ездить на нем. И к чему это? Я машину покупаю, потому что водителем хочу быть, а не автомехаником. Я хочу пользоваться инструментом, а не познавать его в деталях, да к тому же без инструкции — опять же отсутствие документации. Многие совершенно не представляют, как работает их мобильник, но с успехом им пользуются. Будет интерес — залезу в исходники, но пока вот мне это совершенно ни к чему. Что-то я не припомню, чтобы мне функционал того же PHP на официальном сайте предложили изучать по исходникам. Я хочу использовать язык программирования, фреймворк, при чем хочу на полную мощность, а не только на уровне того, что мне в учебнике преподнесли, развиваться и двигаться дальше, а не топтаться на месте, ковыряясь в исходниках. Поймите правильно, мне не важны детали работы того инструмента, которым я пользуюсь, лишь бы он выполнял все свои функции правильно, и знать обо всех этих функциях хочу, но из документации, «инструкции по использованию инструмента», а не выспрашивать у кого попало и не ползать по инету в поисках.
Насколько я уже убедился на собственном опыте (я в IT-индустрии более 20 лет), выигрывают чаще удобные и доступные системы, и наличие хорошей, удобной документации — это практически половина успеха, а не те системы, где внутри все круто, но стороннему наблюдателю не понятно, да и рассказать некому.
Вот, собственно, мои соображения. PHP, Ruby, Python, C++, Java — лишь один из способов общения с машиной, не более того. И нам всем повезло в том, что мы можем выбирать на чем писать и как писать. Но пока система остается мало доступной для легкого изучения для любого пользователя или программиста, то грош цена всей той крутости, которую она скрывает за отсутствием документации. За примерами ходить далеко не нужно — популярность и широкое использование какого-либо средства разработки — лишь следствие его доступности и наличие удобной и полной документации в частности.
Сразу оговорюсь, что наличие форумов или других разрозненных источников информации я за документацию не считаю. Любая мощная система должна обладать прежде всего полной и удобной документацией. И, я думаю, многие со мной согласятся, что тратить свое драгоценное время на исследование исходников, вместо того чтобы заниматься делом — не самое приятное и полезное занятие. Оно конечно хорошо — знать исходники — типа развивает и все такое, но у меня дел своих полно, а разработчикам Ruby и Ruby on Rails пора бы задуматься над хорошей документацией, иначе так и будут плестись в хвосте столь превосходные средства разработки.
Мои замечания уже после того, как я более-менее освоился с Ruby и Ruby on Rails.
Да, есть множество источников с разрозненной информацией - поисковые системы, различные сайты по теме, но все же очень недостает единой, стандартной, хорошей и полной документации. К этому вопросу, конечно, можно подойти и философски - осилит дорогу идущий, при чем с Ruby это можно перефразировать как - осилит дорогу очень целеустремленно идущий. При высоком пороге вхождения самого языка, отсутствие хорошей документации еще более повышает этот порог, что может быть совсем и не плохо - остаются за бортом дилетанты, а в сообщество Ruby попадают действительно профессионалы своего дела, целеустремленные и настойчивые программисты. Кстати, книгу по Ruby («Язык программирования Ruby» Д.Флэнаган, Ю.Мацумото) я действительно прочел 2 раза, чтобы усвоить все, о чем, кстати, в предисловии предупреждал автор (я еще тогда подумал - что за бред?) - первый раз - знакомство, погружение в эту среду, второй (уже после некоторого времени программирования на Ruby) - уже с маркером, чтобы отметить для себя важные моменты.
Так что мой совет - не останавливайтесь в изучении Ruby и Ruby on Rails и вы получите в свое распоряжение прекрасный, удобный и мощный инструмент разработки - настоящий Рубин (драгоценность) для программиста, для профессионала.
При переходе с PHP на Ruby бывали моменты, когда восклицал "блин! ну это есть в PHP, почему же тут такого нет?!", когда не мог найти какого-то механизма. Поверьте мне, в Ruby есть все, что есть в PHP, и даже намного больше! Просто это своего рода "ломки" при переходе на новую систему разработки, вырабатывается несколько иной способ мышления, а потом уже находится все прекрасно, понимаешь, насколько здесь все более логично и насколько более мощные средства разработки предоставляет Ruby.
И, кстати, уже после полугода разработки на Ruby on Rails у меня совершенно пропало желание каким бы то ни было образом снова разрабатывать на PHP - даже свои прошлые разработки я планирую переписать на RoR, так как совершенно нет никакого желания снова работать с кодом на PHP, даже в плане развития, правок своих собственных разработок, хотя это все-равно приходится делать по долгу службы - есть крупные проекты, написанные на PHP, и заказчикам важно, чтобы они продолжали исправно работать и даже совершенствоваться.
Ради чего все это? К примеру, статья: приемущества интернет-сайта, веб-приложения на Ruby on Rails. По своему опыту скажу, что если, например, на верстку и разработку сайта средней сложности на PHP я уделял примерно 2 - 3 недели, то сейчас на Ruby on Rail сайт примерно такой же сложности я пишу за 1 - 2 недели.