Почему джун — это классный сотрудник. И что делать, чтобы он не уронил прод
В статье рассказали, зачем и как искать джуна и что делать, чтобы превратить его в важного члена команды.
2К открытий8К показов
Роман Бобровский
Руководитель разработки продукта Rafinad
Junior-разработчик, или джун — это начинающий разработчик. У него не так много опыта, но он может выполнять простые задачи. И время от времени косячить (про пример такого «косяка» мы писали недавно).
Если правильно подойти к найму и обучению, он станет действительно классным сотрудником. В статье расскажем, зачем и как искать джуна и что делать, чтобы превратить его в важного члена команды.
Почему компаниям нужны джуны
Это выгодно
Джун удешевляет разработку без особой потери качества (если у него, конечно, будет ментор, следящий за работой и отвечающий на вопросы). Потому что процессы явно или неявно считают в человеческих часах, которые в среднем делят на всю команду.
Допустим, у нас есть список задач — простых и сложных — на спринт. Мы заложили на их выполнение 100 часов на трёх человек. И теперь можем оптимизировать ресурсы с максимальной выгодой для бизнеса. Например, взять не трёх мидлов с зарплатой по 100 у.е. каждый, а двух мидлов и одного джуна с зарплатой в 50 у.е. И передать ему самые лёгкие задачи из списка.
В первые недели понадобится чуть больше вложений на то, чтобы сформировать джуну список задач, натаскать его, время от времени контролировать работу. Но это всё равно меньше, чем регулярно доплачивать мидлу за выполнение тех же задач.
Их проще онбордить
Мидл — это человек, у которого уже есть опыт работы над проектами. И ему может быть сложно отказаться от стиля и практик, к которым уже давно привык.
Тут сужу и по себе — я стоял у истоков Python-версии «ГдеСлон?». Задавал архитектуру и оформление кода, но в Rafinad пришлось подстраиваться под уже написанное — ради удобства коллег.
С сеньорами ещё сложнее. Они могут уйти из проекта, если их не устроит кодовая база. Так, у нас был классный и опытный сотрудник, который написал много хорошего. Он перешёл в другую компанию, но спустя некоторое время вернулся на парт-тайм. Потому что «не мог видеть тот код».
У джуна же нет особого опыта, привычек и, скорее всего, проектов, с которыми можно сравнить текущий. Поэтому и переступать через себя не приходится. К тому же с джуном проще взаимодействовать: показал пример работающего кода, сказал «делай так же», проверил через некоторое время.
Им можно поручать простые задачи
Чаще всего те, что уже не очень интересны опытным программистам — но всё равно отнимают время. Примеры задач, которые можно поручить начинающим разработчикам:
- CRUD (Через API и не только);
- перенести данные;
- добавить локализацию;
- сделать выгрузку данных (вручную или настроить автоматизированную);
- написать тесты.
Но не загоняйте джунов в бесконечное написание тестов. Это быстро превращаются в работу ради работы и никак не развивает человека — я видел такие случаи.
Первая задача, которую я ставил одному из джунов — сделать для Rafinad скрипт, который перенесёт данные на локальный сервер. Дал ему время разобраться, получить доступы, освоить работу с нашей базой данных и прочим.
На первый взгляд, это похоже на «дедовщину»: новички занимаются рутиной, пока опытные — чем-то сложным и интересным. Но человеку с небольшим опытом простые задачи кажутся нетривиальными и интересными (скучными они становятся как раз на уровне мидла). И кроме того, они — база, которую надо пройти, чтобы привыкнуть к коду, научиться контактировать с менеджерами и заказчиками.
Имейте в виду, что у опытных разработчиков на описанные задачи уйдёт полдня, а джуны потратят от двух дней до недели. Но это нормально, новички в любом случае освободят ресурсы более опытных коллег (у которых банально может не быть этой самой половины дня, зато будет завал). Чтобы такое «растягивание» задачи по времени не навредило бизнесу, лучше при планировании спринта закладывать риски и давать джунам не самые приоритетные таски.
Не все знают, как найти джуна. И не все «джуны» — джуны
Можно взять практически любую вакансию, чтобы понять, как не нужно искать джунов на проект. Вот, например:
1-3 года опыта — это не Junior, это — Middle. И ценовая вилка у такого соискателя будет выше. Junior — сотрудник, знающий синтаксис и базы данных и не имеющий коммерческого опыта (либо опыт до года).
Из такого описания джуну будет сложно понять, что такое «базовые знания». Ещё сложнее — соотнести «базовые знания» соискателя со своими. Например, у человека, который вышел много лет назад из математического вуза, в это понятие входят особенности хранения списков в Python. Но не у большинства джунов.
Вакансия должна состоять, в большей степени, из того, что вы будете спрашивать на собеседовании: синтаксис, типы данных, ООП. Грубо говоря — из оглавления какой-нибудь широко известной книжки для программистов или программы обучения в онлайн-школе. Мы в LoftSchool, например, постарались собрать ту самую «базу».
Вот образец моей
Проект, над которым предстоит работать: партнёрская платформа Rafinad. Наш стек технологий: Python 3.6, Django 2.2, React, Redis, Postgresql, MongoDB.
Требования
Python
- Типы данных: числовые, строки, словари, списки, кортежи. Методы и для чего нужны. Знать разницу между изменяемыми и неизменяемыми типами данных.
- Понимать, для чего нужны и как работают условия (if then else).
- Понимать, для чего нужны и как работают циклы. Что такое итераторы.
- Функции. Что это такое, и как они работают.
- ООП. Создание классов и экземпляров, наследование. Разница в методах. Перегрузка операторов.
Реляционные базы данных (mysql, postgres)
- Понимать разницу между первичными и внешними ключами.
- Понимание работы SELECT, JOIN, OUTER JOIN, GROUP BY, ORDER BY, EXPLAIN.
- Знать, как добавлять данные в таблицу, удалять из неё.
- Уметь редактировать таблицы.
- Будет плюсом опыт работы с функциями CREATE FUNCTION.
Базовые знания веб-разработки
- HTML, CSS + JS.
Будет плюсом опыт работы с:
- Нереляционными базами данных (Redis, Mongo).
- Любым web-фреймворком, особенно с Django. Понимание логики MVC.
- Git: push, pull, reset, знать разницу между merge и rebase;
- jquery, react и/или другими js-фреймворками.
Задачи
- Писать чистый и понятный код, который будет решать новые задачи от клиента.
- Исправлять ошибки в коде, закрывать технический долг, поддерживать проект в рабочем состоянии.
- Приобретать новые знания для более эффективной работы.
Мне попадались вакансии для джунов с пометкой «Опыт в Phyton от года» — не надо так.
На собеседовании нужно пройти строго по списку из вакансии (или соискатель, который готовился по вакансии, почувствует себя обманутым — будет неприятно), плюс дать задачки по программированию, сортировке по спискам, хождения по циклам, может, рекурсии (на сервисе для лайвкодинга https://replit.com/ можно собрать хорошие варианты и в реальном времени посмотреть, как соискатели пишут код). Можно дать задачи, связанные с базами данных: по джойнам, группировке. Или, например, попросить выбрать записи, которые имеют больше одного свойства.
При желании можно спросить про работу с системой контроля версии и фреймворками. У Джуна, скорее всего, нет коммерческого опыта, а значит, полноценно с тем же Git и фреймворками он вряд ли сталкивался.
По мне, разработчику без коммерческого опыта достаточно уметь заливать проекты на GitHub.
Тестовое должно включать пример задач, которые вы планируете поручить. Например, у нас разработка ведётся на Django, поэтому я поручаю сделать CRUD с некоторыми условиями. И при проверке смотрю на готовность продукта (отсутствие ошибок, лёгкий запуск), на использование CBV или FBV, на написание тестов и то, есть ли готовые данные.
Если с опытным разработчиком можно обсудить, над чем тот работал и какие практики применял, то с начинающим — нет, так как опыта у него не будет.
Сами джуны давали такую обратную связь по вакансии и собеседованию
«Обычно на собесах немного нервная атмосфера, но в этот раз очень быстро получилось от неё избавиться, я не чувствовал давления, всё было довольно расслаблено. Прошлись по всем основным темам для Python backend-собеса, копали не очень глубоко, учитывая позицию, на которую я собеседовался.
На лайвкодинге была классическая задача на написание декоратора, и задачка на итерацию по списку разными способами, с которой я справился не очень — зато хорошо её запомнил. Собеседующие пытались направить мысль в нужное русло, задавали наводящие вопросы, чтобы в конечном счёте я сам справился с задачей. В целом, собеседование мне понравилось, чувствовалось, что собеседующие заинтересованы в том, чтобы ты чувствовал себя спокойно и уверенно и проявил свои лучшие качества.»
«Собеседование проходило в дружеской атмосфере. Вопросы соответствовали должности джуна. Не было никакого давления, даже наоборот, чувствовалась поддержка в моменты, когда было сложно ответить на вопрос. То же могу сказать и про часть с лайвкодингом. В целом, из моего опыта прохождения собесов на позицию джуна, этот был прям топовым. Всё было по-классике: вопросы «за жизнь», теоретические вопросы по тех. части, лайвкодинг.»
Как помочь джуну прижиться — и не дать уронить прод
Надо готовиться к тому, что джун первые 1-2 месяца будет «слепым котёнком» в проекте. У него может быть не просто много, а очень много вопросов.
Например, я некоторое время назад нанимал на работу джуна-фронтендера. Поначалу она спрашивала обо всём: где находится то или иное в проекте, как подключать модули, как выкатывать на сервер, как запускать и развернуть проект на Linux. На ответы уходило по 2-3 часа в день.
Но сейчас я реально чувствую, что избавился от пласта задач, связанных с фронтом. Я знаю, что любую задачу могу поручить фронтендеру (кстати, она — большая молодец), а сам — перевести внимание на бэкенд. Стоило ли потраченное время того? Определённо.
Да, ментору может быть тяжело и больно постоянно отвечать на вопросы, но надо потерпеть — это окупится.
Количество потенциальных вопросов сокращают документация и гайды. А с бизнесовыми вопросами можно сразу отправить к проджекту. Это тоже способ разгрузить ментора, и заодно — научить новичка общаться с заказчиком.
При постановке задач для джуна первое время придётся показывать, что, где и как делать. Практически «на бумаге». Но если регулярно проводить ревью и потихоньку давать новичку всё больше свободы, это быстро пройдёт. И компания получит крайне лояльного сотрудника, а разработчики — человека, которому можно передать рутинные задачи, если упало что-то важное и интересное.
Обучать джунов тяжело, но это развивает и старых разработчиков. Например, они вспоминают основы, что напрямую влияет на качество кода. Но если на обучение времени нет, лучше ещё раз подумать, а нужен ли джун.
Как сопровождать джуна в процессе выполнения задач
- Каждую задачу проговорить в момент постановки.
- Провести промежуточный контроль через какое-то время — проверить, не появились ли вопросы.
- Провести ревью «с вниканием». В нём ментор должен сам мысленно выполнить задачу, изучить решение джуна — и уже потом обсуждать код. Не только синтаксис, но и логику, те же паттерны. Но такой подход помогает быстрее натаскать новичка.
Раз в месяц нужно проводить встречу, обращая внимание как на успехи, так и на вещи, которые стоило бы улучшить. И не забыть поинтересоваться мнением на тему, что нравится, что не нравится.
Итак, чтобы нанять и удержать джуна нужно
- Определить, какие задачи он будет выполнять.
- Детально описать вакансию.
- Просматривать множество вакансий.
- Сопровождать джуна в первые месяцы.
- Давать обратную связь.
И пара советов самим джунам
- Не брезгуйте писать тестовые — до конца. Относитесь к ним, как к полноценным, коммерческим, проектам.
Я заворачиваю все тестовые, которые выдают 404 при открытии index-страницы.
- Покрывайте свой код, даже в ТЗ — тестами. Они показывают работодателю, что вы умеете чуть больше.
- Не бойтесь отказов. Ходить по собеседованиям в первое время придётся много.
2К открытий8К показов