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.


А если вы уже крутой рубист, откликайтесь на вакансии и приходите к нам в команду.

Комментарии (28)


  1. Machirodont
    18.02.2022 11:41
    +15

    Пересадить разработчиков на нишевый/непопулярный стек, чтобы никуда не убежали и своими офферами с требованием повышения зарплаты менеджмент не доставали - это, конечно, сберу ок. Но разработчикам-то это зачем?

    По этой же, похоже, причине, в российской php-разработке нежно любят практически неизвестный за бугром Yii - гарантия того, что разработчик не наработает опыт, позволяющий ему переключиться на зарубежного работодателя.


    1. roswell
      18.02.2022 12:11
      +1

      Один мой знакомый подошёл к вопросу с противоположной точки зрения: специально подсаживает заказчиков на собственные Ruby-based решения, устраивая, таким образом, некоторый vendor lock-in.


    1. buntu Автор
      18.02.2022 12:16
      +2

      Добрый день!
      Мы обучаем ребят не только Ruby. Наши микросервисы пишутся на языке Go. Не вижу ничего плохого в желании людей расширять свой стек и стремиться стать сильнее. А по поводу “удержания” разработчиков, в этом уж точно нет никакой необходимости, так как компания предоставляет хорошие условия для комфортной работы сотрудников. Обстановка гармоничная, а обновление кадров происходит в рамках средней статистики, как и в других компаниях. Не стоит искать негативного смысла там, где его нет. Хорошего вам дня!


    1. FlashHaos
      18.02.2022 15:31
      +1

      Сбер тут не причём, Сбер любит Java и ни на что ее не променяет.


  1. WinLin2
    18.02.2022 12:42
    +2

    >Сейчас нагрузка выросла, и мы постепенно переходим на микросервисы.

    Перепишут на Go и "Всем Спасибо, дальше без Вас".

    На hh.ru встречаются объявления поиска разработчиков на Perl со знанием Python или Go.


    1. QtRoS
      18.02.2022 15:27
      +4

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


  1. Thomas_Hanniball
    18.02.2022 14:26
    +3

    превращают разработчиков других стеков в рубистов

    Сразу вспомнилось прекрасное.it :)


    1. chooselife
      19.02.2022 09:40
      +2

      Ждем вас в Днепропетровске!

      дружная команда рубистов


  1. forgotten
    18.02.2022 14:41
    -2

    Я тут делал одно тестовое задание на Руби, вот буквально — прототип накидать. Остался в полном недоумении, зачем в 2022 году это использовать.

    Гемов мало, по сравнению с node.js — просто смехотворно. Даже самые популярные документированы исключительно плохо. А учитывая возможность расширять синтаксис, которой активно пользуются всякие фреймворки, программирование превращается в какую-то череду магических заклинаний — там подсмотрел один кусочек тайного знания, тут другой, всё в месте вроде б как-то пыхтит (правда, совершенно непонятно, как). Шаг влево-шаг право — и всё превращается в тыкву.


    1. VolkTeoretik
      18.02.2022 21:18
      +2

      Расскажите что у вас там за стек такой на node js ? Если к фронтовым решениям я претензий не имею, то качество пакетов для бекенда очень хромает


      1. forgotten
        18.02.2022 23:33

        Хм. А назовёте платформу, качество пакетов для бэкенда к которой не хромает? Установим бейзлайн, так сказать.


        1. supernapalm
          19.02.2022 00:00

          Ну вот чем вас тот же RoR не устроил?


        1. VolkTeoretik
          19.02.2022 00:22
          +1

          Возможно прозвучит удивительно, но в той же PHP экосистеме вокруг популярных фреймвокров вполне нормальные пакеты. Вокруг того же РоР и спринга как мне кажется тоже. Вот к ноде вопросы. Почему то экспресс никак не прикратит свое существование


          1. forgotten
            19.02.2022 00:29

            А, ясно. Пожалуй, на этом стоит закончить обсуждение.


          1. Format-X22
            19.02.2022 01:50

            А как же пачка других фреймворков и Nest как нынешний лидер? Возможно вы пропустили последние лет 8.


            1. VolkTeoretik
              19.02.2022 11:38

              Какая пачка фреймворков ? Куча микрофрейморков которые заброшены, экспресс который прикратил развитие и давно не поддерживает новые возможности платформы. Ну и nest который к сожалению тащит за собой легаси наследие экспреса


              1. Format-X22
                19.02.2022 12:31

                Nest умеет работать и не только на базе Express, если он вам не нравится по каким-то причинам. Причём ядро можно выбрать в процессе или поменять на ходу. Про заброшенность всего и вся - хотелось бы каких-то графиков или сравнений, в моём мире оно очень даже живо.


                1. VolkTeoretik
                  19.02.2022 12:46

                  У вас есть опыт смены адаптера в настоящем проекте ? Как минимум сломаются e2e тесты. Были проблемы со свагером ещё. И это если у вас auth не сделан с помощью passport'a, загрузка файлов через multer и нет никаких других мидлвар от express. Насчет заброшенности express можно посмотреть на то сколько времени 5 версия находится в alfa версии. Та же koa тоже непонятно в каком состоянии находиться. Многие пакеты для нее уже кучу лет не обновлялись.


        1. beezy92
          19.02.2022 16:24
          +1

          Для baseline - .NET Core


          1. forgotten
            19.02.2022 17:46
            -1

            Гм. И как же вы оценили качество, поделитесь методологией?

            Я, скажу честно, под .NET не программировал с 2007 года. Но вот первый взгляд на статистику меня настораживает. Топ пакетов NuGet по их же официальной статистике:

            Newtonsoft.Json — фреймворк для работы с JSON (что само по себе выглядит странно, что за платформа такая, что в 2022 году не поддерживает JSON нативно)

            serilog — библиотека логирования

            Castle.Core — набор из четырёх никак не связанных между собой пакетов [вот с таким вебсайтом](http://www.castleproject.org/) и документацией в виде .md-шек в репе

            Swashbuckle.AspNetCore.Swagger — обёртка над сваггером

            AWSSDK.Core — обёртка над AWS API

            Итого, один пакет решает проблемы недоработанной платформы, одна либа логирования и две с половиной обёртки над чужими API. Что здесь примечательно? В топе нет ни одного пакета, который привносил бы в платформу какие-то новые возможности, которые выделили бы её среди других платформ.

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


    1. k4ir05
      19.02.2022 05:40

      С пониманием как языка вся магия пропадает. А по поводу гемов - возможно, не все видят смысл в написании гемов для каждой незначительной задачки. И как по мне, так лучше минимизировать внешние зависимости (а то они потом ещё и переругаются).


  1. i360u
    18.02.2022 14:46
    +3

    Из текста так и не понял, зачем привязываться к руби. "Быстрый MVP для инвесторов" возможен сейчас, практически, на любом популярном стеке. К чему эта некрофилия? Зачем тратить лишние ресурсы на переобучение в то, что не имеет особых перспектив? Если у вас микросервисы, то вдвойне не понятно.


    1. alexeishch
      18.02.2022 16:59

      У них там ж монолит на руби, который не раскалывается


  1. moonjester
    18.02.2022 18:44
    +1

    Отличная статья, спасибо большое!


  1. Hunt666
    18.02.2022 19:58
    +1

    Как же ваши HR`ы задрали. Фразу "я в курсе, что у вас много вакансий по моему стеку, когда будет актуально сам напишу" не понимают, с фанатичной регулярностью продолжают пинговать. Эффект достигается обратный тому, который вам бы хотелось.


  1. zandelok
    18.02.2022 21:30
    +4

    Не понимаю хейта выше насчёт руби, чем он вам не угодил? Я вот руби разработчик и у нас в компании их очень много + постоянно нанимают рубистов и обучают с нуля на курсах. Очень много добротный проектов и куча стартапов на нем. А насчёт малого количества гемов - ощущение, что просто не смотрели их как следует)) к тому же язык постоянно обновляется, очень много классных вещей интегрируют. И если руби без перспектив, то почему все так любят Netflix и используют Github, которые написаны на Ruby?)

    Статья отличная, было очень интересно читать и приятно осознавать, что крупная компания тоже готова развивать руби-сообщество!


    1. Tsimur_S
      19.02.2022 01:13

      Не понимаю хейта выше насчёт руби, чем он вам не угодил

      Ну не то что бы не угодил но вот хотя бы объективный аргумент против:
      benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/ruby-node.html
      И если руби без перспектив, то почему все так любят Netflix и используют Github, которые написаны на Ruby

      Допустим вам нравятся автомобили марки Мерседес. Вы любите на них кататься. Следуя такой логике можно ли утверждать что вам так же нравиться производитель манипуляторов для сварки самого дальнего угла, где-то под бензобаком, использовавшиеся при сборке?


      1. Noskov_A
        19.02.2022 18:36
        +5

        Ну не то что бы не угодил но вот хотя бы объективный аргумент против:
        benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/ruby-node.html

        1. Существует достаточно задач, для которых скорость работы системы является наименьшей из проблем. И принимать решение о выборе инструмента по этому критерию - худшее что можно сделать.

        2. Даже если нужна производительность, синтетические тесты едва ли отражают влияние на производительность системы в целом. База и любой ввод/вывод чаще займут время чуть менее чем полностью.