Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Ruby-разработчиков на рынке почти нет — на одну вакансию на hh приходится по одному резюме. Для других языков это соотношение 1 к 5. Чтобы восполнить нехватку рубистов, в СберМаркете переобучают разработчиков на другом стеке.
Меня зовут Александр Бунтов, я руководитель группы разработки в СберМаркете. Расскажу, кому будет полезна наша программа переподготовки, как она проходит и чем же так хорош Ruby.
Почему в СберМаркете используют Ruby
СберМаркет выбрал именно Ruby, потому что на нём можно было быстро разработать MVP и показать инвесторам. Сейчас нагрузка выросла, и мы постепенно переходим на микросервисы. При этом монолит никуда не исчез.
Под капотом СберМаркета монолит на пятой версии Ruby on Rails. Он обрабатывает 160 000 заказов в день, в пиковые дни — больше 200 000. И каждый день раздаёт задания 38 000 сборщиков и курьеров.
Рубисты в команде решают две задачи: поддерживают монолит и выносят часть его функций в микросервисы. Поэтому без них никуда.
Как появилась программа переподготовки на Ruby
Я взял резюме соискателей на HeadHunter и сравнил с количеством вакансий. На одну вакансию Python-разработчика приходится семь соискателей, на Elixir — четыре. С Ruby-разработчиками ситуация ужасна: чуть больше одного специалиста на вакансию. Это значит, что выбора нет, а брать тех, кто написал только «Hello, world» на Ruby, мы не можем.
Язык программирования — это лишь инструмент. СберМаркет быстро растёт, нам не хватает разработчиков. Поэтому мы придумали нанимать опытных инженеров с другим стеком и переучивать на Ruby. Они должны хорошо знать любой язык программирования, например PHP, Scala, Perl или Java. А мы обучим Ruby и поможем влиться в команду.
В 2021 году мы наняли 2 скрам-команды для переподготовки в рубистов. В следующем хотим нанять еще больше — сейчас готовим менторов и шлифуем задания.
Как проходит переподготовка
Программа состоит из трех этапов:
- изучение основ языка с ментором: синтаксис, RubyGem, gems, tools;
- знакомство с Ruby on Rails и разработка пет-проектов;
- глубокая работа с фреймворком, unit-тесты и боевые задачи.
Первый этап — менторство. К каждому новичку прикрепляют ментора, который помогает изучить Ruby: синтаксис, систему управления пакетами RubyGems и другие инструменты.
Важно понимать, что это не школа программистов, поэтому бо́льшую часть времени новый сотрудник учит язык самостоятельно, под присмотром ментора. Он ответит на вопросы, проведёт код-ревью и обсудит с подопечным задачи на нескольких встречах в неделю.
Второй этап — фреймворк Ruby on Rails и пет-проекты. На втором этапе разработчик изучает Ruby on Rails — фреймворк для интеграции приложений с веб-сервером и базами данных. А освоив его, начинает писать свои пет-проекты.
Третий этап — best practice, unit-тесты и простые боевые задачи. Это работа над реальными задачами в проектах и передача опыта и знаний нашей команды. Наша программа — не стажировка. Поэтому переход на проект переподготовки — это не даунгрейд: разработчики также работают (только в процессе учат Ruby) и получают конкурентную зарплату. Сейчас мы набираем в маркетинговый домен, но если кто-то захочет взять сотрудника из другой команды, это не проблема.
По нашим наблюдениям, чтобы человек успешно адаптировался к Ruby, ему в среднем требуется 3–4 месяца. Сдерживаю себя и статистики мало, но хочется сказать: «Святые угодники, Ruby мистически жив». Я очень рад, что Ruby-комьюнити пополняется опытными разработчиками.
Что должен уметь разработчик для перехода на Ruby
Примерный список требований к кандидату такой:
- писал на любом скриптовом языке программирования от двух лет (Perl, Scala, PHP и другие);
- разрабатывал клиент-серверные приложения;
- понимает, как работают сети;
- работал с реляционными базами данных (MySQL, PostgreSQL);
- владеет классическими алгоритмами и структурами данных;
- использовал Git;
- работал с Linux.
Я считаю, что хороший разработчик самостоятелен: он может сам выяснить требования к задаче, написать документацию, протестировать и вынести задачу на прод. Эти качества отличают хорошего программиста от среднего, за которым нужно бегать. Именно этого мы ждем от кандидатов — самостоятельности и высокой инженерной культуры.
Какие задачи решают разработчики во время переподготовки
Задачи на ресерч. Например, слетает промокод после оформления заказа. Чтобы решить проблему, разработчику нужно понять, как применяется промокод, выяснить, какие есть узкие места, и написать фикс. Подобные задачи помогают понять, как устроен наш монолит.
Новые функции. В этом случае ребята уже что-то катят в прод. Например, была задача сделать повышенное начисление СберСпасибо по промокоду. Мы зарелизили этот функционал, а пользователи сервиса получили дополнительную выгоду от покупок.
Фикс. Например, удалить старый сбор метрик с API Сбера. Тут речь о простых задачах: что-то исправить, добавить, убрать, проверить, чтобы все нормально работало.
Программисты параллельно с Ruby могут выучить еще и Go как второй язык. Задачи схожие. Например, у нас в планах сделать сервис нотификаций. Мы хотим собрать в одном сервисе все нотификации пользователя: email, push-уведомления, SMS и так далее. Интересная и непростая задача, которую мы намерены реализовать на Go.
Что думают сами разработчики о переподготовке
Пока у нас прошел переподготовку один поток, еще два в процессе. Мы собрали отзывы ребят, которые сейчас учат Ruby.
Дмитрий Кононов, пришел на переподготовку в октябре 2021 года
«Раньше я писал на Scala, а последние пару лет — на Perl. Но вакансий на Perl сейчас мало, и бытует мнение, что они с Ruby они очень похожи. Потому я решил изучить его.
Задачи на Ruby, которые мы решаем в СберМаркете, принципиально не отличаются от задач на других языках. Но много «магии» происходит где-то внутри самой реализации языка, из-за чего для новичка даже простые задачи могут оказаться нетривиальными.
Самая крутая задача, с моей точки зрения, онбординг для итогов года. Я считаю, это полезно: разобраться с проектом, пообщаться с различными отделами, выкатить и запустить рейк-таску, узнать, как катятся миграции. При этом с точки зрения бэкенда таска небольшая и новичок в состоянии разобраться с ней в сжатые сроки».
Виктор Потехин, пришел на переподготовку в ноябре 2021 года
«Раньше я писал на Python и PHP, но захотелось попробовать для себя новый стек. Кроме того, мне было интересно получить опыт работы в большой компании — до СберМаркета я работал в командах до 20 человек.
Задачи на Ruby отличаются в силу отсутствия типизации языка и возможности тайп-хинтинга, некоторые „клубки“ может быть проблематично „разматывать“. У меня был ментор Глеб, он очень крутой, помогал практически во всех случаях. Из трудностей в процессе переподготовки: были сложности со сдачей задачи в мастер, оказалось проблематично найти QA».
Алексей Просвиров, пришел на переподготовку в ноябре 2021 года
«До того как прийти в команду СберМаркета, я писал на PHP. Но я хотел расширить кругозор, кроме того, у меня был небольшой опыт написания кода на Ruby, поэтому решил перейти на другой стек. Первое время я не понимал, как устроен проект, но неразрешимых проблем не возникало. Самой интересной оказалась задача по изучению взаимодействия API и мобильных клиентов для решения проблемы с невозможностью оплаты бонусами СберСпасибо».
Андрей Хвостовец, пришел на переподготовку в октябре 2021 года
«В Ruby и Ruby on Rails очень много неочевидных вещей. А в остальном все примерно так же, как и везде: есть задачи и есть инструмент для их решения. Просто теперь инструмент немного другой формы».
Новый набор переподготовки мы объявим, как только завершим предыдущие. Анонс будет в соцсетях, подпишитесь, чтобы не пропустить: Telegram, VK, FB, Twitter.
А если вы уже крутой рубист, откликайтесь на вакансии и приходите к нам в команду.