Был ли у вас опыт менторства или код-ревью других разработчиков?

Ответ

Да, у меня есть опыт менторства и проведения код-ревью, в основном в рамках командной работы и адаптации новых сотрудников (onboarding).

Области менторской поддержки

  1. Onboarding новых разработчиков:

    • Помощь в настройке локального окружения (IDE, Docker, БД).
    • Обзор архитектуры проекта, ключевых модулей и соглашений по коду (Code Conventions).
    • Проведение вводных сессий по основным используемым технологиям (Spring Boot, Kafka).
  2. Проведение код-ревью:

    • Регулярный ревью Merge Request (MR) коллег перед слиянием в основную ветку.
    • Фокус на:
      • Качество кода: читаемость, соблюдение принципов SOLID/DRY, отсутствие дублирования.
      • Безопасность: проверка на потенциальные уязвимости (инъекции, неправильная обработка данных).
      • Производительность: неоптимальные запросы к БД, алгоритмическая сложность.
      • Тестируемость: насколько код покрыт тестами, легко ли его mock-ировать.
    • Пример конструктивного комментария в MR:

      "В методе processOrder() есть прямой вызов new SimpleDateFormat(), который не является потокобезопасным. Предлагаю заменить на DateTimeFormatter (Java 8+) или вынести форматтер в статическое поле."

  3. Передача знаний и лучших практик:

    • Организация внутренних митапов (brown bag sessions) по темам: "Оптимизация запросов JPA", "Работа с Kafka в Spring".
    • Демонстрация рефакторинга сложного легаси-кода.
    • Совместное парное программирование (pair programming) для решения нетривиальных задач.

Подход к менторству

  • Цель — научить, а не сделать за человека. Задаю наводящие вопросы, чтобы разработчик сам пришел к решению.
  • Предоставление ресурсов. Делюсь ссылками на документацию, статьями и полезными книгами.
  • Регулярная обратная связь. Обсуждаем прогресс, сложности и дальнейшие шаги для развития.

Результат: Помог двум junior-разработчикам успешно пройти probation period и стать полноценными членами команды, способными самостоятельно выполнять задачи средней сложности.

Ответ 18+ 🔞

А, опыт менторства? Да я, блядь, в этой теме как рыба в воде, только вместо воды — код, а вместо жабр — постоянное желание всё переписать нахуй. В основном, конечно, в рамках команды и адаптации новичков, этих, блядь, зелёных птенцов, которые в проекте как в тёмном лесу.

Чем конкретно занимался, спросишь? А вот чем, ёпта:

  1. Ввод новобранцев в курс дела, он же onboarding.

    • Помогал настроить локальное окружение, чтобы у них всё запускалось, а не вываливалось с ошибкой «Docker не найден», блядь. Идешь такой, смотришь — человек пятый час бьётся. «Чё, — говорю, — брат?» — «Да вот, — говорит, — база не поднимается». А там, сука, пароль от PostgreSQL написан кириллицей в конфиге. Ёперный театр! В рот меня чих-пых!
    • Проводил экскурсии по архитектуре проекта. Объяснял, где у нас тут главный вход, где сортир, а где, блядь, та самая комната с легаси-кодом, в которую лучше не заходить без фонаря и крепких нервов. «Вот это, — говорю, — наш монолит. Не трогай его пока, он спит. А вот это — наш Кафка. Он не спит никогда, он только жрёт сообщения и срёт ошибками».
  2. Священный ритуал код-ревью.

    • Регулярно смотрел эти Merge Request'ы перед тем, как их впихнуть в основную ветку. Чтоб не принесли, понимаешь, какую-нибудь дичь.

    • На что орал в основном:

      • Читаемость: «Иван Иваныч, это что за метод на 300 строк? Ты его для конкурса "Самая запутанная функция года" писал? Разбей на части, ебать!»
      • Безопасность: «Стой-стой-стой! Я вижу строчку "SELECT * FROM users WHERE login='" + input + "'". Ты хочешь, чтобы нас взломали первым же скрипт-кидди? Нахуй, блядь, на параметризованные запросы!»
      • Производительность: «Ты зачем в цикле на 10к итераций дергаешь repository.findById()? Ты с ума сошел? Выгребай всё одним запросом, давай! Терпения ноль ебать смотреть на это!»
      • Тестируемость: «А как это протестировать, если у тебя в методе намертво зашит вызов к облачному API? Вынеси зависимость, дай её замокать!»
    • Пример моего комментария в ревью, который все уже боятся:

      «В методе processOrder() я вижу new SimpleDateFormat(). Мужик, это же не потокобезопасно, ёпта! Это как ходить по охуенно тонкому льду. Замени на DateTimeFormatter, он с Java 8 есть. Или вынеси в статик. Выбери — вилкой в глаз или в жопу раз».

  3. Передача мудрости, или "Как не наступать на те же грабли".

    • Организовывал мелкие митапы. «Собираемся, — говорю, — сегодня обсуждаем, как JPA-запросы не писать так, чтобы они пол-таблицы в память грузили».
    • Показывал вживую, как рефакторить старый код. «Смотри, — говорю, — вот здесь был спагетти-код. Мы его аккуратно распутываем, не дыша. Вот так… и так… и получаем чистые, красивые методы. Красота, бля!»
    • Садился парно программировать, когда задача — пиздец какая сложная. «Давай, — говорю, — думай вместе. Э, бошка, думай!»

А подход у меня какой?

  • Главное — не сделать за человека, а чтобы он сам допёр. Поэтому вместо того, чтобы написать правильный код, я задаю вопросы. «А что будет, если тут придет null? А как этот кусок протестировать? А если нагрузка вырастет в сто раз?». Пусть сам голову ломает, так наука лучше входит.
  • Не жадный до знаний. Сыплю ссылками на документацию, статьями, книжками. «На, — говорю, — почитай, просветись».
  • Обратная связь — регулярно и по делу. Не «молодец/не молодец», а «вот здесь ты вырос, а вот тут ещё хромает, давай подтянем».

Итог, блядь? Двоих джуниоров довёл от состояния «мама, я в IDE» до полноценных членов команды, которые уже сами задачи средней тяжести щёлкают. А один из них, сука, теперь такие вопросы на код-ревью задаёт, что я сам иногда офигеваю. Ни хуя себе прогресс!