Сыны IT-полка
ИТ / Статьи
кадры экспертная колонка
14.10.2022

Сыны IT-полка

Как эффективно внедрить в IT-проекты Junior-разработчиков

В настоящий момент существует дефицит разработчиков ПО с опытом от трех лет. Их поиск усложняется, а востребованность для решения ключевых задач – растет. При этом, как показывает опыт, есть большое количество джуниор— (младших) кандидатов с отсутствием или минимальным опытом. На российском рынке не так много компаний, которые готовы их нанимать с целью дальнейшего продвижения до middle и seniorуровней. О том, как можно эффективно подключать к проектам junior-разработчиков и добиваться значительных результатов, читателям RSpectr рассказал эксперт в разработке программных продуктов Артем Коновалов.

ПОДБОР ПЕРСОНАЛЬНЫХ ЗАДАЧ

Нечасто можно встретить в команде по разработке ПО специалистов класса junior. Это происходит из-за того, что таких разработчиков внедрять достаточно долго и отсутствуют единые методологии их внедрения на рынке. Практика существует только в рамках крупных компаний, где процесс поставлен на поток. Для небольших компаний наиболее распространенная практика сводится к тому, что на местах senior и lead разработчикам дают под крыло начинающих специалистов. А таким менторам, кроме вынужденной опеки, еще и свои задачи нужно выполнять, которых обычно немало. Из-за этого на планирование и выстраивание процессов внедрения просто нет ни сил, ни желания, а менторство может быть пущено на самотек, когда просто скидываются на джуниоров рутинные и несложные задачи, которые не особо помогают последним развиваться.

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

Из результатов могу отметить:

  • Время на внедрение сокращается в среднем на 20-30% за счет выстраивания оптимальных процессов и понятного плана внедрения.
  • Разгружаются senior-разработчики, за которыми закрепляют новичков, их время на менторство становится более систематизированным, не происходит расфокусировка.
  • Разработчики, прошедшие период внедрения по данной методике, потом могут брать в среднем более сложные задачи в работу.

Значительная часть задач для джуниоров являются типовыми, их можно систематизировать и выделить из них основные типы, градировать их по уровню сложности и времени.

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

Важно наличие понимания рабочих задач для внедряемого специалиста на ближайшие 6-9 недель

Пример типизации задач для front-endразработки:

  • Добавление/редактирование поля/нескольких полей в существующую форму – 2 ч.
  • Добавление модального окна с формой – 8 ч.
  • Реализация карточки сущности в режиме просмотра – 8-12 ч.
  • Реализация карточки сущности в режиме редактирования – 16 ч.
  • Добавление списка сущностей с фильтрами и поиском – 16 ч.

Как видим, расписано достаточно абстрактно, но этого достаточно. Можно также уйти от оценки в часах и перейти на условные обозначения сложности (или объема) задач: s, m, l, xl, xxl.

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

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

Важно к каждому типу задачи приложить пример «коммитов» из GIT (наиболее распространенная система контроля версий) проекта, которые разработчик должен изучить перед тем, как приступать к работе. Если такого примера нет, то перед началом работы стоит обговорить, как разработчик видит реализацию задачи. Лучше, если он попробует схематично нарисовать структуру кода финальной версии (какие файлы, компоненты, функции).

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

Важно показывать решение в рамках системы, а не изолированно, это приучает изначально мыслить системно

Соответственно, для внедрения подобной методологии должна быть высокая инженерная культура разработки в команде. К примеру, в рамках одного «коммита» должна решаться конкретная задача, с понятным описанием «коммита» и номером задачи в трекере задач. Так можно по каждому «коммиту» исследовать реализованную в рамках него задачу, ее путь от сбора бизнес-требований до конечной постановки задач. При необходимости ознакомиться и со связанными с ней задачами, реализуемыми другими специалистами: дизайнерами, аналитиками, разработчиками другого типа.

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

Кроме того, требуется подготовить общую информацию о проекте, основных сущностях и бизнес-логике, так как зачастую процессы весьма специфичны и требуется разбираться в деталях.

ПРОЦЕСС РАБОТЫ С МЕНТОРОМ

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

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

К примеру, с утра на старте рабочего дня джуниор-разработчик описывает свои планы на день, как он видит реализацию задач, какие возможны трудности и вопросы, получая ответы и предложения от ментора. В дальнейшем в течение дня, при необходимости, можно выделить второй блок, когда ментор проверяет код выполненных задач (если таковые есть) и дает комментарии по нему. Если необходимо, то в формате звонка, лучше, если время будет определено заранее.

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

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

Если джуниор приходит за советом к ментору, ему нужно постараться предложить варианты путей решения проблемы, даже если он считает, что они не оптимальны. Требуется развивать собственное мышление и совместно разбирать предложенные варианты, учиться самостоятельно находить пути решения и дорабатывать их.

Минимум раз в две недели, а первое время и еженедельно, нужно разбирать результаты, вести оценку прогресса и подбадривать обучающегося специалиста, подмечать его прогресс и успехи.

ВЫДЕРЖИВАНИЕ ОБЩЕГО СТИЛЯ ПРОЕКТА

В коммерческих приложениях над проектом обычно работает команда инженеров и требуется соблюдать общий стиль приложения. Это упрощает поддержку текущей кодовой базы и делает интуитивно понятным любой раздел проекта без детального изучения.

Опытные разработчики могут и сами определить стиль кода и принципы построения приложений, но новички не всегда мыслят системно и часто недооценивают важность однообразности проекта, вставляя собственные «велосипеды» или именуя файлы/переменные/функции отлично от остального проекта.

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

К примеру, при реализации на TypeScript выносить все типы компонента в отдельный файл types.ts или все запросы выносить в отдельный файл requests.ts.

Правила оформления «коммитов», веток в GIT, а также все процессы работы с версиями кода в этой системе контроля версий (или в другой, если в вашей команде другой вариант) должны быть описаны.

ТРЕНИНГ ПО РАБОТЕ СО СРЕДСТВАМИ РАЗРАБОТКИ И ОКРУЖЕНИЕМ

Многие недооценивают важность такого тренинга в проекте. Используемый софт и окружение везде разные, а многие думают, что все и так интуитивно понятно и в этом легко разобраться. Поскольку опытные специалисты выполняют все это на автомате после многих лет работы. А как показывает практика, джуниоры часто даже не знают о многих крайне полезных функциях в средствах разработки, баг-трекерах и другом. От поиска по проекту по регулярному выражению, использования локальной истории в IDE, удобной работы с контролем работы версий из IDE до сложного поиска задачи по баг-трекеру. Все эти вещи далеко не очевидны для начинающего в коммерческой разработке специалиста, у которого за плечами только домашние проекты. Понимание этих вещей значительно ускоряет ход обучения и саму работу такого специалиста.

Так как все используют разный софт, то рекомендую собрать список используемого у вас и составить рекомендации по эффективному применению именно вашего, оформив это в единый тренинг. Как это сделать:

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

Крайне рекомендую сделать упор на использование IDE, так как это наиболее часто используемое ПО и от эффективности его применения зависит эффективность работы. Пример раскрываемых в тренинге моментов по работе с IDE:

  • Весь процесс работы с GIT:
    • Работа с ветками и тегами.
    • Работа с GIT логом.
    • Оформление «коммитов».
    • Отслеживание незакоммиченных изменений, работа с ними.
    • Основные часто используемые команды, такие как: pull, push, fetch, merge, rebase, cherry-pick и др.
  • Работа с локальной историей.
  • Методы поиска и замены текста по документу, разделу и проекту целиком.
  • Конфигурации по форматированию кода и шаблоны.

Это также касается использования баг-трекера (Jira, clickup и др.), платформы для хранения документации по проекту (confluence, notion и др.) и пр.

ЗАКЛЮЧЕНИЕ

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

Автор: Артем Коновалов

Изображение: RSpectr, Adobe Stock

Еще по теме

Где находится грань между возможностями ECM- и BPM-систем

Что может дать искусственный интеллект эффективной экономике данных

Как привлечь зарубежный капитал через международное сотрудничество

Рынок унифицированных коммуникаций на пороге консолидации. Причем тут экспорт?

Как правильно выбрать информационную систему и изменить работу медучреждения

Почему сейчас лучший момент для совершенствования сервисной поддержки дата-центров

Как крупный бизнес диктует собственные правила в технологическом секторе

Как собрать в одном доступе цифровые медицинские ИТ-помощники

Что нужно знать техлиду при запуске проектов на основе искусственного интеллекта

В каких отраслях промышленности искусственный интеллект находит применение

Как региональные фестивали стали источниками кадров для столичных компаний

Грозит ли сбой, аналогичный инциденту с Microsoft, критической инфраструктуре РФ

Стоит ли ожидать дефицита качественной информации для обучения ИИ-моделей

За счет чего российская цифровая техника будет востребована за рубежом

Как изменились подходы и скорость цифровизации за последние 20 лет