Инструментально-библиотечный рай — Ruby on Rails
1 июня стартует новый поток обучения на факультете разработки на языке программирования Ruby. Мы попросили автора курса, тимлида «Баланс-Платформы» Игоря Симдянова рассказать о том, что из себя представляет язык Ruby и почему его популярность стремительно растёт.
История появления языка Ruby и фреймворка Ruby on Rails
Ruby был создан японским разработчиком Юкихиро Мацумото в 1995 году. В тот период IT-индустрия подошла к созданию сложных долгоиграющих программ: операционных систем, баз данных, офисных пакетов, игр… Одновременно задумались о создании программного обеспечения, ориентированного на людей и интуитивно понятного им, вместо прежнего, позволяющего только говорить с компьютером на его языке и о его проблемах.
При помощи старых языков программирования разработка программ шла долго и дорого, поэтому по мере роста вычислительных мощностей и числа запросов на ПО появилось много новых, молодых языков, которые позволили работать быстрее и создавать код с меньшим количеством ошибок.
В тот период начался бум создания языков программирования — Python, Java, PHP… Юкихиро Мацумото поставил своей целью сделать язык программирования не только удобным, но и приятным — и Ruby до сих пор остается одним из самых красивых языков программирования. Поначалу Ruby не встретил большой популярности: хотя его документация была переведена на английский ещё в 1997 году, он долгое время оставался малоизвестным японским языком программирования. Всё изменилось в 2006 году, с появлением фреймворка Ruby on Rails.
Фреймворк — это набор библиотек и утилит, по сути заготовка, которая позволяет писать проект не с нуля, а с уже заложенного фундамента, что, конечно, проще и быстрее. Ruby on Rails — это фреймворк, написанный на Ruby для веб-разработки, для создания сайтов.
Не мне рассказывать вам о роли интернета в нашей жизни — если в начале 2000-х годов им пользовалось 5% нашей страны, то сейчас — уже 75%. За пару десятков лет из клуба по интересам интернет вырос в новую планетарную инфраструктуру связи. Сам по себе он довольно сложно устроен, но из-за постоянно растущего числа пользователей с этой сложностью нужно было как-то бороться. Одним из способов стала разработка отдельных специализированных языков программирования — того же PHP. В ранних системах, однако, были существенные недостатки: проблемы с информационной безопасностью, разрозненность сообществ и, как следствие, несовместимость систем друг с другом.
К 2006 году у нас было уже множество примеров того, как не нужно разрабатывать веб-приложения, а также стало ясно, какие подводные камни может встретить веб-разработчик на любом языке программирования. Как ни странно, успех фреймворка Ruby on Rails заключался в его позднем выходе на рынок. Он оказался настолько лучше и удобнее всего, что уже было на рынке, что даже необходимость учить новый язык программирования Ruby не остановила разработчиков.
В чем секрет успеха Ruby и Ruby on Rails? Чем они привлекают разработчиков?
Сам я в коммерческой веб-разработке уже больше 15 лет, при этом около 10 лет я писал на PHP. Я хорошо помню момент перехода на Ruby on Rails — мне показалось, что у меня просто выросли крылья и открылось неограниченное поле возможностей.
Во-первых, Ruby on Rails — это просто инструментально-библиотечный рай. Выверенный и красивый Ruby привлекает много талантливых разработчиков, которые создают качественные и тщательно проработанные заготовки кода.
Во-вторых, в Ruby on Rails отличная развитая инфраструктура: системы тестирования, линтеры, доставки компонентов, взаимодействие с базами данных и пр.
В-третьих, работая на PHP, вы имеете дело с разными его фреймворками — Symfony, Laravel, Yii, — компоненты которых несовместимы друг с другом. В результате относительно большие сообщества вынуждены создавать, поддерживать и переписывать несколько версий одной и той же библиотеки для разных фреймворков. В Ruby on Rails разработчики уже десять лет находятся в единой экосистеме компонентов (гемов). Приходя в Ruby on Rails, вы просто попадаете в будущее. До этого будущего многим экосистемам (PHP, JavaScript) еще очень далеко, а некоторые экосистемы (Python, Java) пришли к нему лишь недавно.
Чем Ruby отличается от других популярных языков программирования?
Языки C++, C#, Java относятся к единому классу типизированных объектно-ориентированных языков — грубо говоря, когда нельзя умножать яблоки на лошадей, потому что типы разные. Язык накладывает на типы ограничения, которые нужно обходить довольно замысловатыми способами, прикладывать для этого усилия. Например, когда вы захотите выяснить, сколько всего яблок нужно для всех лошадей. Кроме того, это компилируемые языки, поэтому в результате вы получаете исполняемый файл, который процессор может читать без «перевода». Это тоже накладывает ограничения на приемы разработки — обычно программируют так, чтобы максимальное количество проблем вскрывалось на этапе компиляции, а не во время исполнения программы.
Объектно-ориентированный подход отличается от типизированных языков (C++, C#, Java). Нет типов, нет интерфейсов, некоторые паттерны проектирования просто не нужны. Для меня две эти группы языков отличаются как электропоезд и легковой автомобиль — вроде, и то и другое транспортное средство, даже задачи одинаковые решают, но с точки зрения управления они сильно отличаются.
Ruby и Python — это интерпретируемые языки программирования, в которых программу шаг за шагом выполняет интерпретатор. Для запуска программы нужно устанавливать исполняемую среду на компьютер, при этом этап компиляции отсутствует, поэтому саму программу можно отладить даже в полевых условиях.
Ruby и Python по своей философии и концепции очень похожи, отличаются детали реализации — например, преобразование объектов к логическому значению или механизм перегрузки операторов.
На данный момент Python, безусловно, более известен — во многом благодаря тому, что научное сообщество облюбовало его в качестве языка проверки гипотез, разработки математического программного обеспечения, нетребовательного к ресурсам. Поздняя популярность Ruby привела к тому, что многие основополагающие книги, которые должен прочитать каждый рубист, были изданы очень маленьким тиражом или не переводились на русский язык вообще. Информацию найти сложно, поэтому Ruby-сообщество сейчас составляют очень мотивированные сотрудники, которые изучали язык, несмотря на дефицит обучающих материалов. В связи с этим, Ruby-коллективы обычно очень сильные — и разработчик в них быстро растет.
Какие известные проекты были написаны на Ruby или Ruby on Rails?
GitHub, Twitter, Aviasales.ru, Twitch, Kickstarter, Airbnb, Groupon — и множество других компаний, которые зарождались как стартапы.
Вообще Ruby on Rails — популярный инструмент для запуска и быстрой атаки рынка. Им не пренебрегают даже компании-гиганты, когда хотят проверить гипотезы или экспериментировать — например, проекты Сбера ДомКлик и СберМаркет обслуживаются Ruby on Rails. А ещё многие онлайн-школы, в том числе и сам GeekBrains, тоже написаны на Ruby on Rails.
Новый бизнес в веб-среде лучше всего начинать именно с Ruby on Rails — это самый быстрый способ вывести новую идею на рынок. Кто-то так и остаётся на нем, кто-то переходит на более производительную Java или изобретает свой собственный язык программирования (Go, Hask). С постоянно идущей от проекта прибылью делать это проще, можно нанять и содержать параллельную команду. Или можно дальше продолжать работать на Ruby on Rails, как в GitHub. Если стартап не выстрелит, то будет потрачено не так много денег и времени, как если бы он разрабатывался на Java или C#.
Как и где работают Ruby-программисты? Достаточно ли Ruby-разработчиков на рынке?
Если не считать Японии, где Ruby — это почти национальный язык программирования, на котором программируют роботов, линии сборки автомобилей и встроенное ПО, во всем остальном мире Ruby — это в первую очередь веб-разработка. Причем веб-разработка на фреймворке Ruby on Rails.
Ещё в Ruby-экосистеме имеется неплохие инструменты для автоматического тестирования, однако автотестеров, использующих Python, всё-таки больше.
Что касается компаний-работодателей, то, как правило, это веб-ориентированные компании и стартапы, например, финтех-компании. Ruby также остается популярным в медийной сфере: на нем написаны Лента.ру, Медуза, life.ru и множество других изданий.
Также, из-за последствий пандемии активно стали развиваться службы доставки, школы удаленного обучения, телемедицина, в которых тоже нужны разработчики. Это относится не только к России — многие из наших соотечественников стали работать на зарубежные компании по удаленке, что только усилило кадровый голод. Для компаний это вызывает трудности, зато для кандидатов без опыта это отличный шанс сразу же устроиться на хорошую позицию.
Обычно это работа в небольшом коллективе, от двух до десяти человек. Иногда Ruby-разработчики работают и поодиночке, но, на мой взгляд, лучше иметь коллегу-партнёра, с которым можно обсудить решения и который может провести код-ревью.
Чем отличаются обязанности начинающего и уже опытного сетевого специалиста по Ruby? Как быстро проходит карьерный рост? Сколько в среднем получают специалисты junior-, middle- и senior-уровня?
Единой жёсткой градации по уровням нет, всё зависит от компании — где-то раз в полгода проводят аттестации, где-то повышают в должности после завершения больших проектов, а кому-то дают звание senior-специалиста за выслугу лет.
На мой взгляд, junior-специалист — это тот, под кого нужно подбирать задачу, чтобы разработчик победил задачу, а не она его. При этом у него обычно есть ментор, который может и должен расписать задачу по пунктам и проверить правильность выполнения в контрольных точках. В Москве junior-специалист может получать 90–120 тысяч рублей, в регионах — от 40 тысяч.
Middle-специалист — это инженер, который может решать задачи самостоятельно, при необходимости разбивая их на более простые. Зарплаты миддлов — где-то от 120 до 180 тысяч рублей в Москве, около 65–90 тысяч в регионах.
Наконец, senior-специалист может решать архитектурные задачи, проявляет инициативу по улучшению работы всей системы и проводит исследования новых технологий, поиска узких мест, устранения хитрых багов. При этом ожидается, что, когда сениору забрасывается проблема, то в следующий раз вы от него получите готовое решение. Senior-разработчик в Москве получает от 180 до 300 тысяч, при работе на западные компании ценник — от 3 до 4 тысяч долларов.
Рост от junior до middle-специалиста обычно занимает год — за этот срок разработчик должен перейти от решения детально расписанных задач к самостоятельным инженерным решениям. Рост от middle до senior-специалиста может занимать от 2 до 10 лет — всё зависит от задач, коллектива, и, конечно, от самого специалиста.
Чем этот курс по Ruby отличается от других?
В других школах программирования обычно стараются как можно быстрее перейти к Ruby on Rails, а сам язык программирования дают очень сжато. Из-за этого многие элементы Ruby on Rails и экосистемы гемов для студентов выглядят как чёрный ящик, к которому нужно применять магические заклинания.
На нашем курсе мы в течение трех месяцев изучаем сам Ruby и добиваемся устойчивого понимания языка. Параллельно готовимся к штурму Ruby on Rails — изучаем Git, Linux, базы данных, вёрстку и лишь затем, уже полностью вооружившись нужными технологиями, переходим к изучению Ruby on Rails. Такой подход очень экономит время учеников и обеспечивает их конкурентным преимуществом, позволяющим не слепо верить фреймворку или гему, а при необходимости заглянуть внутрь и проанализировать любой Ruby-код.
Нужны ли какие-то базовые знания для того, чтобы поступить на курс по Ruby? Подойдет ли он для новичков в программировании?
Не нужно практически ничего, кроме владения компьютером и знания арифметики. Ruby очень дружелюбен к новичкам — о назначении методов иногда можно просто догадаться самому, даже не заглядывая в документацию.
Как будет проходить обучение на факультете Ruby on Rails?
Занятия будут проходить два раза в неделю в формате вебинаров длительностью 1,5–2 часа. При этом я как преподаватель очень рассчитываю на обратную связь от студентов, постараюсь найти к каждому индивидуальный подход и давать не только обязательные материалы, но и дополнительную информацию по интересам.
Я убежден, что пассивное потребление информации (лекции, книги, статьи, обучающие видео) должно по-хорошему составлять 10% обучения, а 90% времени должно уходить на выполнение заданий, совершенствование программ и отладку кода. Хороший разработчик — это человек с большим опытом практического программирования и создания пусть и не самых красивых и изящных, но реальных решений задач. К каждому уроку будут домашние задания — как базовые, так и дополнительные, необязательные, чуть забегающие на следующие темы и помогающие воспринимать дальнейший материал, то есть слушать теорию, уже вспоминая свой практический опыт.
Также для перехода к следующему курсу нужно будет сдать две итоговые работы по предыдущему блоку. Это будут различные консольные утилиты: календарь, поиск по словарю, подсчет строк кода в Ruby-проектах, анализ графических файлов. После перехода к Ruby on Rails мы начнем разрабатывать веб-сайты, которыми студенты смогут пользоваться сами: ведение ToDo-списков, приложение для изучения английского языка и т. д.
Наработки по проектам будут отправляться в GitHub — там же будет приниматься домашняя работа. Ruby on Rails разработчиков редко принимают на работу по портфолио, так как часто сложно что-то визуально показать. Без наличия проектов коммерческой разработки в портфолио, именно GitHub-аккаунт, по которому видно, как и насколько интенсивно кандидат работал над кодом в последний год, может служить доказательством его профессионализма и высокого потенциала.
Новый поток на факультете Ruby on Rails начинается с 1 июня, узнать подробнее о программе и условиях обучения можно на странице факультета.
О создателе курса
Программировать я начал в университете — изучал квантовую химию, а для этого нужно было много заниматься исследованиями и математическим моделированием. Приходилось адаптировать научный софт на FORTRAN, писать свои расчетные программы, визуализировать результаты расчетов. Параллельно освоил Visual Basic и Wolfram Mathematica, а на последних курсах увлекся веб-разработкой.
Я довольно долго программировал на PHP и знаю, что в нем много непоследовательных мест и ошибок в архитектуре, поэтому я перешел на Ruby — работаю с ним уже восемь лет и считаю, что это один из самых удобных и красивых языков программирования.
Ещё я являюсь автором одного из самых известных русскоязычных самоучителей по Ruby — написать я его решил в 2017 году, когда начал работать в GeekBrains преподавателем и столкнулся с тем, что студентам, не знающим английского языка, просто неоткуда брать дополнительную информацию.
По мере работы над курсами, переработки методических материалов, создания видео-курсов и общения со студентами у меня сложилось понимание, как следует преподавать Ruby с нуля. Поэтому я взял творческий отпуск и за полгода создал книгу, по которой многие уже не первый год самостоятельно изучают язык.