Современный, простой и дружелюбный – так Ruby описывает тот, кто знаком с этим языком программирования. Сегодня мы хотим разобраться, какой Ruby на самом деле и стоит ли он вашего времени. Нашим проводником в мир Ruby-разработки стал Senior Software Engineer, ментор курсов EPAM Training Center, Александр Шагов. В статье мы раскроем минусы и плюсы этого языка программирования, развеем мифы и подскажем, где обучиться на Ruby-разработчика и как получить первый опыт работы.
Ruby – лаконичный язык программирования, который был создан в середине 90-х в Японии. Часто Ruby называют японским стилем программирования. Страна никак не повлияла на стиль самого языка. Если почитать историю предков Ruby, то можно увидеть там такие языки, как Smalltalk и Lisp. Ruby унаследовал всю модель этих языков в каком-то виде, но с Японией это никак не связано. Программирование вообще не имеет различий по национальном признаку.
Чем Ruby отличается от других языков программирования?
Выразительностью. Даже человек, который не программировал ни разу в жизни, может прочитать хороший код на Ruby как английский текст и интуитивно понять, о чем идет речь.
Стоит ли выбирать Ruby первым языком программирования?
Я бы не рекомендовал, лучше рассматривать Ruby в качестве второго или третьего языка, сейчас объясню, почему. Технология современная и очень развитая, язык построен на большом количестве абстракций. Человек, который ни разу не программировал, может принимать все на веру и бездумно использовать некоторые абстракции, не понимая, как внутри это работает. Те, кто пришел в Ruby-разработку из других языков программирования четко понимают, как все сделано внутри.
С какого языка начать, чтобы потом было легче изучать Ruby?
Я бы рекомендовал выбрать что-нибудь фундаментальное, чтобы выучить основы. Курсы, которые есть в университетах, начиная с языка C, очень хорошо подойдут. Они дают понять суть программирования, а узнав базу, человек понимает куда двигаться дальше.
Почему ты в свое время выбрал Ruby?
Я еще в университете познакомился с ребятами, которые заинтересовались этим языком программирования, и пошел за ними. Это был неосознанный выбор совершенно. И вот я пришел на курс БГУИРа, а мне там стали рассказывать вещи, которые я не то что не знал, а никогда не слышал. И первая моя реакция была: «Что это вообще такое?» Было слишком много непонятного, хотя я имел определенный бэкграунд: знал циклы, переменные и т.д. В общем, я не понял абсолютно ничего и не смог закончить курс. Ушел и стал самостоятельно читать историю языка, углубляться. Спустя время начал понимать больше. Но вопросы все равно копились в голове: у нас есть какая-то конструкция, почему она такая, откуда это пришло. Начал сам раскручивать клубок и докапываться до истины. Но было сложно, честно. Поэтому я обратился за помощью к Ruby-комьюнити. Год готовился, читал, искал ответы на свои вопросы, вернулся на курс и закончил его. Пришел к тому, что есть сейчас, наверное, именно благодаря вопросам «как», «зачем», «почему» и «откуда это взялось».
Что пишут на Ruby?
Если человек наберет в строчке поиска Google слово Ruby, то скорее всего он натолкнется на статьи о Ruby on Rails. Это фреймворк, который написан на Ruby. Этот язык в 80% случаев используют для создания веб-приложений. Но есть еще те самые 20%, которые занимают инструменты для автоматизации серверов, пакетный менеджер OS X и небольшое количество приложений. К примеру, GitHub, Ask.fm, SoundCloud и Bloomberg используют Ruby on Rails. Если рисовать дерево, то в самом верху будут располагаться веб-приложения, скрипты для автоматизации, потом парсинг сайтов (скрапинг), а после – различные системные утилиты.
Но, в целом, это язык общего назначения, на нем можно делать все то же, что и на других языках. Ответвления зависят от того, как сообщество развивает язык. На данном этапе он очень хорошо сделан для веб-разработки, а для всех остальных операций поддержка инструментов чуть менее активна.
Насколько Ruby популярен на рынке?
Мне сложно ответить на этот вопрос. Я бы не сравнивал Ruby с фундаментальными языками, как Java или C#. Там совершенно другого размера комьюнити, Ruby в этом плане поменьше. Проекты Enterprise-уровня на Ruby не делаются. Чаще всего он используется в стартапах, которые на каком-то этапе выросли и стали просто большими проектами.
Я бы не сказал, что Ruby вообще очень популярен, но в узком кругу его все любят. Инженеры из других сообществ называют Ruby-комьюнити одним из самых дружелюбных и активных. Из-за того, что нас не так много, ты можешь быть лично знаком с человеком, чьей библиотекой ты пользуешься.
За что ты любишь Ruby?
За то, что во время работы я думаю о бизнес-логике, а не о коде. Инструмент будто становится продолжением моей руки. Он настолько лаконично сделан, что у тебя не возникает никаких остановок и даже мыслей, что тебя что-то тормозит. Ты просто выражаешь свою мысль, и она становится программной.
Если человек профессионал, то такое у него, скорее всего, получается на любом языке. Язык на каком-то этапе просто стирается, становится неважен, и ты просто решаешь задачу. Например, тебе нужно забить гвоздь. Ты идешь в гараж, но не находишь молоток. А ты всю жизнь пользовался только молотком. И что, это значит, что нужно опустить руки и принять неизбежность происходящего? Это так не работает, гвоздь можно забить кувалдой или любым другим тяжелым предметом. Это и есть работа инженера. У меня нет особой привязанности к Ruby. Я просто люблю его за простоту и выразительность.
С каким образованием будет проще освоить Ruby?
Вопрос только в том, какого уровня вы хотите достигнуть. Если речь идет о разработке базовых приложений, то особая техническая база не нужна. Можно просто брать язык, изучать простой синтаксис и начинать писать приложения. С таким подходом рано или поздно вы упретесь в какие-то непонятные вещи. Именно поэтому я рекомендую начать с другого языка программирования.
С моей точки зрения, техническому специалисту желательно общее техническое образование: не образование программиста, а образование инженера. Чтобы человек хотя бы в общих чертах знал, как работают платы в компьютере и т.д., чтобы для него ничего не казалось магией. Из личного опыта могу сказать, что большинство людей, которых я уважаю как профессионалов, это физики, инженеры, математики – люди, у которых кругозор гораздо шире, чем просто понимание кода. Потому что программирование само по себе – это всего лишь абстракция. Если коротко, то подойдет любое техническое образование, которое расширит ваш горизонт. А дальше нужно задавать вопросы.
Можно ли обучиться на Ruby-разработчика самостоятельно?
Да, если подходить к обучение осознанно и постоянно задавать вопросы. Например: мне непонятно, что такое базы данных – значит надо найти в интернете хорошие книги на эту тему и почитать. Для этого необязательно ходить на курсы. Советую использовать Reddit – это новостной портал, где люди обмениваются информацией и мнениями. Можно зайти в сообщество Learn Programming и попросить подсказать нужную литературу или даже roadmap выбранной профессии.
Не бойтесь быть самоучкой. Из своего опыта скажу, что на собеседовании на сертификаты о прохождении курсов никто не смотрит. Как сказал мне один мой коллега: «Лицо разработчика – это его GitHub. Если кандидат хочет попасть к нам и скидывает не просто резюме, а еще и GitHub-профиль, где видна его активность, его стиль – это хороший знак.
Мой главный совет: идти в сообщество и спрашивать, обсуждать, созваниваться для обмена опытом. Я сам из такого сообщества вырос. Конечно, я прошел курс в университете, и это дало свои плоды, но основу моей инженерной культуры заложили в комьюнити Hexlet.
Можно ли пройти обучение на Ruby-разработчика в EPAM?
По этому поводу есть история. Еще пару лет назад про Ruby-практику в EPAM никто не знал. В окружении сложилось впечатление о компании исключительно с Enterprise-технологиями, в которой Ruby нет места. Но это не совсем так. Наша практика началась с нескольких человек, а теперь в минском офисе нас около 40 специалистов.
С ростом команды мы решили открыть курсы, чтобы передавать свой опыт другим. Мы создали комьюнити Rubyl’nik, и на базе сообщества запустили первую итерацию четырехмесячных оффлайн курсов. В этом году запустилась вторая итерация полностью в онлайн-формате. Тренинг ориентирован на практику и работу в командах. Я не просто шарю презентацию с информацией на лекциях, а делюсь экраном и делаю проект в реальном времени и параллельно отвечаю на вопросы.
В последние полтора месяца курса мы разбиваем студентов на команды и пытаемся закончить проект. Это очень важный этап обучения, потому что современная разработка – это не про одного человека, а про активность группы людей. На каком-то этапе я даже никого не проверяю, вижу, что команда сама общается между собой, составляет расписание и контролирует работу. Я только наблюдаю за тем, как процесс становится более автономным и отлаженным.
Почему люди не доходят до конца обучения?
- Перестают делать домашние задания. Скорее всего, это происходит из-за нехватки времени. Но с этим ничего нельзя сделать. Мы двигаемся в своем темпе, держим его и не можем замедляться, если один или два человека отстают. Это довольно жестко. Но 4 месяца – это довольно маленький срок. Есть люди, которые его не потянут.
- Не умеют и не хотят работать в команде. Повторюсь, современная разработка – это командная работа. Все всё знать не могут: есть один человек, который хорош в одном направлении, а второй – в абсолютно другом, они собираются все вместе, обсуждают задачи и делают что-то общее. Вот как это работает, а не иначе. Поэтому навык эмпатии сейчас в цене. Довольно сложно найти человека, который и разрабатывает хорошо и еще умеет общаться с людьми.
Где получить первый опыт работы?
Сейчас на рынке потребность в кандидатах с опытом. Найти хорошего опытного Ruby-разработчика сложно, потому что часто Senior в резюме не значит Senior на деле. Если вы новичок в профессии, и вам нужен опыт, предлагаю такой вариант. Любой проект основан на каких-то зависимостях, библиотеках. Они, как правило, с открытым кодом. Рекомендую вам открывать репозитории библиотек, пытаться понять, как они работают, и писать улучшения. Таким образом у вас появится опыт разработки, по сути, реального проекта. И строчка open source contribution experience в резюме будет иметь большее влияние, чем любые курсы. Потому что человек проявил инициативу, сам разобрался в том, как библиотека работает (значит и с проектом разберется), внес изменения (значит умеет анализировать и находить недочеты), изменения подтвердили другие разработчики этой библиотеки (поработал в команде), скорее всего это были инженеры из других стран (значит у него неплохой разговорный английский), его изменения теперь используются во всем мире. Вот это самый настоящий опыт, живой и бесплатный. Просто нужно немного времени на то, какую библиотеку выбрать, что изменить и как. Но результат будет.
Советы начинающим Ruby-разработчикам:
- Читайте историю индустрии, вашего направления и языка. Хороший разработчик знает не только как пользоваться тем или иным инструментом, но и почему он появился, какие задачи решает, и почему возникла необходимость эти задачи решать.
- Общайтесь с другими разработчиками. Коммуникация – это самый активный процесс обучения. Найдите интересное сообщество, задавайте вопросы, делитель опытом и учитесь друг у друга.
- Развивайтесь и копите контакты. Ходите на Ruby-митапы и конференции. Здесь всегда можно найти людей с горящими глазами, завести знакомства, зарядиться энергией, получить полезные знания и дозу мотивации.