Не получилось нанять действительно толковых джунов с рынка – воспитайте их сами. Рассказываю, как получилось реализовать идею летней стажировки, и предостерегаю от ошибок, которые мы совершили.  Привет, я Андрей Степанов, CTO fuse8. Этим летом у нас в компании прошла стажировка для начинающих бекенд-разработчиков. Решили нанять лучшего джуна и выделить перспективных ребят для ближайших проектов. Когда идея стажировки пришла мне в голову, предприятие казалось сильно проще, чем получилось на практике. В статье поделюсь хорошими и не очень решениями и процессом в целом. У нас есть успешный опыт курсов по веб-разработке сайтов на .NET для начинающих. Сейчас он лежит на ютубе. Многие из обучающихся тогда стали разработчиками, а некоторые работали у нас и выросли в сеньоров.  Этим летом я подумал, что было бы круто сделать что-то похожее на наш давний курс, но уже с фокусом на бекенд-разработку в формате летней школы. Потребность в этом выросла во многом и из-за того, что мы можем нанимать джунов только при условии, что они сами готовы развиваться и уже изучили то, что нам нужно в работе. Вот и отличная возможность своими руками помочь новичкам в учебе. Летней стажировкой занялись 3 наших бекенд-разработчика, а рулил процессом HR Generalist. На первых порах эта команда подготовила план лекций с разбивкой на двух спикеров: 10 уроков по 2 часа каждый.  Разработчики спланировали домашние задания, которые по итогам курса собрались в петпроект. Выполняли их ребята в GitHub. С каждым новым заданием стажеры накручивали логику в уже существующем проекте и расширяли его функциональность. Суть проекта – приложение для получения курсов валют, состоящее из двух сервисов. Один отвечает за получение, хранение и кэширование курсов валют. Второй – web API. Если интересно, можете ознакомиться с заданиями. Когда планы были готовы, сделали гугл-форму для заявок и раскидали ее по нескольким каналам: наши соцсети, grintern и ЧелГУ.  Курс рассчитывали на 2 месяца и 9 занятий, к 6 из которых прилагались домашние задания, формирующие пет-проект. Старт планировали 3 июля. Ожидали, что соберем желающих поучаствовать человек 40, и возьмем на курс где-то 15. Подведение итогов и интервью с лучшими учениками должны были случиться примерно на первой неделе сентября. За это время мы думали не только провести занятия и проверить домашние задания стажеров, но и подготовить эти самые занятия и задания в процессе. Спойлер: план немного провалился.  Желающих пришло гораздо больше – анкету на участие заполнили 162 человека. По итогам проверки тестовых мы решили взять ребят, которые выполнили задачи идеально, либо с небольшими огрехами, но изящно. Также брали во внимание бэкграунд, который запросили в форме заявки. Из 162 человек отобрали 29. При этом, конечно, тестовые отправили не все – примерно половина из заявившихся.  Относительно проведения занятий в сроки мы уложились. Последняя лекция курса состоялась 24 августа – на восьмой неделе со старта стажировки. А вот с подведением итогов затянули. На проверку итоговых проектов ушло много времени, да и организовать интервью с лидерами курса получилось не сразу. В итоге оффер лучшему кандидату на место в команде выслали только в октябре. О том, почему такая временная пропасть образовалась, расскажу далее. Проверять итоговые проекты стажеров мы закончили примерно в середине сентября, хоть и дедлайн их сдачи был 4 числа. Когда пришло время проверки, один из наших разработчиков-преподавателей ушел в отпуск, у другого была большая загрузка на проекте. Словом, пришлось успевать кое-как, поэтому процесс затянулся. Хоть и не быстро, но сделали все по совести: пяти лучшим студентам предложили интервью, остальным ребятам рассказали, что подтянуть, чтобы справляться лучше. До «финала» дошли 10 ребят, с пятью из которых мы провели интервью. Студенты нам попались действительно крутые и талантливые. Некоторые по своей инициативе усовершенствовали пет-проект. Кто-то сделал автоматический запуск тестов при изменениях кода. Кто-то уже после проверки дорабатывал решение. Если кто-то из наших стажеров читает эту статью сейчас, знайте, что вы большие молодцы! Продолжать коммуникацию со стажерами по почте было бы неудобно. Поэтому мы сделали канал в ТГ, к которому присоединили чатик. Основную информацию (анонсы уроков, домашки и организационные моменты) публиковали в канале, а в чате обсуждали возникшие вопросы. Получилось ненапряжно, да и ребята между собой общались в ходе дискуссий о домашках, например. Три раза за курс собирали обратную связь со стажеров через гугл-формы – после первого занятия, в середине и конце курса. Старались учитывать просьбы и пожелания. Занятия, которые проводили наши бекенд-лиды, организовывали в гугл-мит. Записи занятий и презентации для них после присылали в тг-чат ребятам для повторного или самостоятельного изучения теми, кто не смог присутствовать на занятии онлайн. Изначально наш курс мы позиционировали именно как стажировку. В итоге проект больше, конечно, походил именно на курс по разработке, потому что было всего два вида активностей: лекции и ДЗ.  Чтобы приблизиться к формату реальной стажировки, нам стоило вводить более интерактивные занятия, на которых был бы некий мозгоштурм, например, имитирующий процесс командной работы на реальном проекте. Такой подход убил бы двух зайцев: ребята бы получили возможность профессионально проявить себя, а мы, памятуя о предстоящем найме, сразу оценили бы их коммуникацию и способность презентовать идеи. Чего точно не стоит делать – пренебрегать домашними заданиями на таком курсе. Это ценная штука для стажеров и для нас, как нанимателей – можно уже после первых проверок понять, как человек думает и решает задачи. Однако цена проверки этих заданий не менее высока – одновременно отсматривать задания и готовиться к лекциям оказалось непросто. Мы действительно переоценили себя, предположив, что готовить курс и проводить его одновременно будет посильной ношей. Весь проект стажировки занял у нас порядка 500 часов разработчиков, PR и HR. В денежном эквиваленте это около 1.5 млн рублей, что сравнимо со стоимостью небольшого заказного проекта. Боли добавил отпускной сезон. Одному из преподавателей-разработчиков где-то в середине курса пришлось в одиночку работать на проекте и при этом еще готовить занятия, потому что коллеги ушли в отпуск. Этого нюанса на старте не учли, а стоило бы. Зато теперь у нас есть опыт готовая программа для обучения джунов на .NET. Использовать ее, добавляя минимальные корректировки, можно будет еще пару лет, повторяя опыт курса, но уже без неизбежной потребности уложиться в сжатые сроки.  Ну и главный позитивный исход всех стараний – активный и продуктивный новичок в команде. Кроме того, выделили еще пару ребят, которых не можем устроить на работу сейчас, но будем рады предложить им место в команде, когда начнем реализовывать наши новые проекты. Пишите вводные, максимально объясняя все подряд – даже те моменты, которые вам кажутся очевидными. У нас на этапе тестовых заданий в самом начале случалось, что кто-то решал задания на java, хотя курс у нас по C#. Кто-то присылал ответы в нечитаемых форматах, кто-то писал тему письма как попало, поэтому мы такие ответы просто теряли. Google Meet не подходит для проведения курса. Стажеры жаловались, что нельзя отмотать видео назад, если опоздал на занятие (в случае трансляции на ютубе можно). Также были жалобы на качество записанных уроков – даже если выставлять 720р, не видны фрагменты кода на презентациях. Отчасти эта проблема решалась пересылкой презентаций стажерам, но на будущее нужно будет искать все-же другие способы. Можно сократить время на проверку ДЗ, если первые несколько ДЗ по основам дисциплин сделать автоматически проверяемыми – через тесты, которые были готовы вместе с проектом на этапе проектирования ДЗ. В таком случае проверяться будет работоспособность кода, а не его красота, но время на организацию процесса существенно сократится. Отдельное занятие по Git действительно нужно некоторым начинающим разработчикам. Оказалось, что не все умеют им пользоваться, либо знают, но не понимают, зачем он нужен. Вследствие этого  несколько человек писали, что сломали ветку и удаляли по этой причине репозитории, а потом создавали их заново, соответственно запрашивая повторную проверку. Это тоже тратило наше время.  Закладывайте время на подготовку до начала курса. Особенно, если делаете его с нуля только на базе опорных материалов, а не берете уже готовую программу.  Подбирайте для проведения курса ребят с разных проектов. Так можно избежать рисков, связанных с нехваткой времени, когда все «зашиваются», и нет свободных рук, которые бы работали работу.  Считаю, что опыт организации первой стажировки получился успешным, пусть и не без казусов. Теперь больше знают не только наши стажеры, но и мы сами. Буду рад узнать о схожем опыте со стороны и обсудить – вдруг получится помочь друг другу сделать классные образовательные проекты в будущем.  СТО — fuse8