Всем добра! Я руковожу агентством web/mobile разработки, поэтому заинтересован, чтобы моя команда росла в скиллах. Тем временем рынок меняется, постоянно выкатываются обновления, а найти действительно сильных специалистов все сложнее.
У нас есть запросы на PHP-бэкендеров, фронтендеров, проджектов и дизайнеров. На первых – самый большой, так как изначально костяк команды занимался созданием программных продуктов на Yii, Laravel и Symfony.
Сейчас из 300 кандидатов на вакансию Мидла откликаются лишь 1-2 человека, которые действительно им являются. Что уж, разработчики, претендующие на позицию Джуна, не знают даже базы. И как быть?
Можно взять и надеяться, что сотрудник обучится всему сам на внутренних песочницах, по рекомендуемым материалам и задавая вопросы старшим. На практике же ребятам нелегко заниматься самообразованием, иногда даже губительно, а лишний раз тревожить коллег они стесняются.
Можно отправить их на сторонние распиаренные IT-курсы. Но мы же понимаем, насколько общее представление в них дается. И часто оно не бьется с реалиями, особенно в разработке. В итоге – обучение пройдено, оплачено, а снова возвращаемся к неспособности закрывать боевые задачи.
Можно никого не нанимать и сидеть на месте, отказываясь от крупных проектов. Однако довольствоваться малым и не желать расти – это не про бизнес. Рано или поздно тебя просто съедят.
Мы нашли ответ в разработке своей программы повышения квалификации. Не только для того, чтобы закрыть проблему с нехваткой специалистов, но и чтобы разом прокачать всех участников команды.
Рассказываю, как выглядит создание курса изнутри и во сколько он нам обошелся.
Как разрабатывалась обучающая программа для бэкендеров
Инициатором создания курса выступил IT-директор компании Дмитрий. Он давно вынашивал идею о системе, которая даст свободу в выборе специалиста под проект. Ведь если все сразу находятся на одном высоком уровне, то есть уверенность, что с поставленными задачами справится любой из подопечных.
Дмитрия поддержали руководители отделов разработки (РОРы). Они распределили программу по блокам, чтобы каждый подготовил для слушателей то, в чем более силен.
Откуда взяли темы для обучения
При выборе наполнения своей программы мы не смотрели на уже имеющиеся рыночные курсы. Ориентировались сугубо на то, что необходимо нам, и логичность последовательности.
Анализировали скиллы команды и выявляли, что требует более глубокого изучения.
Раз в квартал мы проводим грейдирование, чтобы отслеживать динамику развития разработчиков и помочь им наглядно увидеть, что нужно подтянуть в хардах. Ребята отвечают на вопросы, которые составляются под заявленный грейд, и выполняют практическое задание. Потом мы смотрим на результаты и фиксируем нынешний уровень навыков для дальнейшей стратегии индивидуального роста.
Исходили из опыта на проектах старших специалистов.
«Чтобы определиться с направлениями курса, я открыл гугл док и начал записывать все, что хотел передать ребятам. Был момент, когда я без конца дополнял этот список – пришлось самого себя останавливать. Иначе мы бы не смогли закончить обучение в адекватные сроки. К тому же это наш дебютный курс, поэтому решил дать те знания, которые наиболее актуальны для рабочих реалий и востребованы на рынке.»
Дмитрий
IT-директор
Как работали над структурой корпоративного курса
Наше обучение направлено именно на повышение квалификации бэкендеров, а не ввод в профессию. Руководители включили в него углубленные блоки, которые без базовых знаний сложно воспринимать. Но на старте Дмитрий специально для разогрева поставил урок «История создания языка программирования PHP», чтобы разработчики плавно вошли в учебный процесс.
Создатели курса поставили себе цель – не день без слайда, чтобы ускорить его подготовку. Понятно, что были загруженные дни, когда заняться «творчеством» не получалось. Но благодаря такому девизу процесс практически не останавливался.
На выходе получилось 5 модулей, которые включают 47 занятий:
PHP
ООП
Архитектура
Базы данных
Автоматические тесты / CI/CD
Какими информационными источниками пользовались
Наша база знаний формировалась из реальных кейсов специалистов компании и материалов авторитетных разработчиков. Помимо конвертации практики от боевых задач, мы анализировали статьи, печатные и электронные издания.
Для модуля «Архитектура» Дмитрий не ограничивался окружением PHP, а взял данные, что связаны с Java и C#. В них лучше описаны базовые принципы структуры кода, которые присущи всем высокоуровневым языкам.
При подготовке вдохновлялись следующими книгами, которые наиболее ценны в среде разработчиков:
«Мастер-класс. Совершенный код», Стив Макконнелл;
«Рефакторинг: улучшение существующего кода», Мартин Фаулер;
«Принципы, паттерны и методики гибкой разработки на языке C#», Роберт Мартин и Мика Мартин;
«Идеальный программист. Как стать профессионалом разработки ПО», Роберт Мартин;
«Чистый код: создание, анализ и рефакторинг», Роберт К. Мартин;
Implementing Domain-Driven Design и Domain-Driven Design Distilled, Вон Вернон;
Domain-Driven Design: Tackling Complexity in the Heart of Software, Эрик Эванс;
«Паттерны объектно-ориентированного проектирования”, Эрих Гамм, Ричард Хелм, Ральф Джонсон и Джон Влиссидес.
Каждый сторонний аспект, который хотели донести спикеры, трижды проверялся.
Как проходило обучение
Официально курс стартовал 18 марта 2024 года. Формат занятий выбрали классический – оффлайн-лекции два раза в неделю с возможностью подключения онлайн. В среднем урок длился в рамках академического часа – 45-50 минут.
Занятия записывались на камеру. Готовые видео скидывали в чат учеников курса, чтобы те могли в любой момент их пересмотреть, особенно если фактически отсутствовали во время лекции. Еще это делалось на будущее, если мы захотим выложить программу в общий доступ.
Спикерами стали сами создатели курса: IT-директор Дмитрий и руководители отделов разработки Даниил и Михаил. Каждый рассказывал ту тему, которую готовил.
«Изначально я планировал вести лекции с планшета, но в итоге от такого формата отказался – было не очень удобно. Поэтому выбрал другой вариант – перечитывать материал перед занятием и повторять ключевые моменты. Конечно, был определенный страх перед выступлениями, например, если что-то забуду или растеряюсь при ответе на вопрос. Моей мотивацией стало повышение квалификации не только других разработчиков, но и своей собственной, личностностной.»
Даниил
РОР
В первой части курса сотрудникам давались домашние задания для закрепления информации. Чаще всего это был нерабочий код, который нужно отрефакторить. Кстати, зафиксировано несколько случаев, когда ребята прошли тему и на следующий же день применяли знания в проектах.
Дмитрий сделал еще один способ проверки усвоения материала. Назвал его «Генерал знаний» – участники получали батончики Mars за правильные ответы по прошлому материалу и самый интересный вопрос в конце занятия. Возможно, этот формат кому-то покажется детским, но он работал: разработчики не боялись задавать любые вопросы и лучше запоминали сказанное.
В конце обучения мы провели контрольное тестирование. Нам было важно понять, как ребята прослушали программу и что закрепили. По результатам всем ученикам выдали сертификаты о прохождении курса.
Условия прохождения курса для сотрудников
Чтобы проделанная работа не оказалась напрасной, с каждым обучающимся заключили ученический договор. Ключевое условие соглашения – проработать в компании 1,5 года после прохождения программы. Если специалист покинет команду по своей инициативе, то должен возместить обучение полностью или частично. Стоимость курса для одного разработчика мы оценили в 130 тысяч рублей.
Этот пункт принес пользу и HR-отделу: выявили тех ребят, кто потенциально может уйти.
Проблемы в создании собственного курса
При разработке любого решения возникают сложности, и корпоративное обучение – не исключение.
Где найти ресурсы?
Я боялся дополнительно нагружать руководителей, чтобы не отнимать у них время, рассчитанное на клиентские проекты. Но им самим была интересна подготовка, поэтому мы договорились о партнерстве в правообладании обучающей программой и вышли за пределы рабочего графика.
Ребята потратили около 4 месяцев, чтобы создать полноценный курс. И все равно что-то дорабатывалось уже в процессе обучения. Это и не хорошо, и не плохо – просто факт, что требуются огромные человеческие ресурсы. К тому же мы записывали занятия на камеру, поэтому добавляется время на обработку видео и минимальный монтаж.
Кто будет вести лекции?
Создать курс – одно дело, другое – грамотно его преподнести.
Если уроки ведет эксперт без педагогических навыков, значит, есть большой риск, что обучение пройдет безрезультатно. Профессионалы в сложных областях нередко объясняют материал запутанно, не упрощая подачу и стараясь передать как можно больше.
Привлечение коуча тоже имеет негативные последствия. Сторонний спикер может представить материал более структурировано и доступно, но нет гарантии, что он глубоко владеет темой курса. Это приведет к тому, что приглашенный человек не ответит на все вопросы учеников и потеряет авторитет в их глазах.
Нам в этом плане повезло – преподавателями стали те, кто разрабатывал обучение. Наши руководители постоянно общаются с клиентами и привыкли говорить на понятном языке.
Как мотивировать сотрудников?
В коллективе всегда найдутся люди, которые не проявляют интерес к получению новых знаний.
Причины на это разные:
удовлетворенность текущим уровнем навыков и отсутствие потребности в развитии;
страх неудач или неуверенность в своих способностях, опасение показать некомпетентность перед коллегами;
недостаток ресурсов, времени или финансов для обучения;
отсутствие поддержки со стороны руководства.
Чтобы мотивировать сотрудников, помимо перспектив к повышению ЗП с ростом скиллов, важны и нематериальные стимулы. Один из таких – перенятие опыта от востребованного специалиста.
Представьте, Сеньор раскладывает по полочкам все знания, которые он приобрел за десять с лишним лет в боевых задачах. Вам не придется закапываться в документации и огромных статьях – нужно прослушать лекции и взять то, чего не хватает для развития.
Что получили в итоге и сколько потратили
Официально курс завершился 20 сентября 2024 года. Мы сразу убедились в его пользе на наших разработчиках. Многие советы и моменты они ежедневно применяют в решении задач. И теперь смотрят на определенные участки кода под другим углом.
Заключительный в 2024 году грейд показал, что результаты у тех, кто прослушал лекции, улучшились.
При разработке занятий и изучении материалов прокачивались и сами РОРы. Как говорится: «Хочешь в чем-то разобраться – научи этому других») На самом деле здесь речь про «освежить память» и набустить софт-скиллы.
Корпоративное обучение также является плюсом для отдела кадров. Курсы от работодателя привлекают соискателей, которые заинтересованы в профессиональном развитии. Талантливые специалисты склонны оставаться в компаниях, которые инвестируют в рост их навыков.
Итоговая себестоимость нашего курса – 485 000 рублей. Она рассчитана из часов руководителей, которые затрачены на подготовку.
На данный момент «Программа повышения квалификации PHP-разработчиков» доступна только сотрудникам агентства. Но я уверен, что она может быть полезна и другим бэкендерам.
Сейчас размышляем над тем, выпустить или нет курс в общий доступ. Что думаете?
Комментарии (16)
magaffy
21.01.2025 08:01Я понимаю ваш страх, что сотрудник пройдет обучение и уйдет в другую компанию, но ученический договор это худшее, с чем я сталкивался в работе
Итоговая себестоимость нашего курса – 485 000 рублей ...
Стоимость курса для одного разработчика мы оценили в 130 тысяч рублейВо-первых многовато заложили (даже на распиареных сайтах дешевле курсы), а во-вторых, если у вас нет лицензии на преподавательскую деятельность, то увы, ученический договор не имеет веса и будет работать, пока сотрудник это не узнает)
ceomt Автор
21.01.2025 08:01Мы загорелись самим курсом и его целями, только потом пришли к мысли о страховке. В себестоимость не заложены проведение занятий, проверка изученного и монтаж роликов, но, конечно, все еще раз будет взвешиваться, если решимся выпустить. Спасибо за мнение.
FurySeer
21.01.2025 08:01Какая страховка у новоиспеченного сотрудника на случай, если на нем по этому договору начнут ездить полтора года?
ceomt Автор
21.01.2025 08:01У нас есть четко прописанные регламенты, которые работают в обе стороны. Ну и писать могу много, но все свои гарантии сотрудник понимает еще на собесе. Есть ребята, которые в агентстве уже 5 и более лет, с самого начала.
FurySeer
21.01.2025 08:01Ваша страховка - поставить человека на деньги, его страховка - ваши регламенты? Гарантии на собесе? Так потребуйте с сотрудника гарантий на собесе с его стороны и достаточно. Почему вы так не делаете?
ceomt Автор
21.01.2025 08:01Даже мыслей нет в такой интерпретации. И то, и другое - добровольное письменное соглашение, обучение в целом по желанию, без принуждения. Мы изначально даем список задач еще при трудоустройстве, и не можем выйти за его пределы. У нового сотрудника сразу есть на руках гарантии, у нас - 0. Я не могу говорить за всех, но вот так, когда полностью официальная компания.
FurySeer
21.01.2025 08:01Повторяю вопрос - почему вы не ограничиваетесь честным словом соискателя при найме, если сами готовы предоставить в качестве гарантий лишь слова?
ceomt Автор
21.01.2025 08:01Если документы, оформленные по ТК, - лишь слова, то, получается, что и мы берем равноценное честное слово.
FurySeer
21.01.2025 08:01Вы не ответили на вопрос. Вы честное слово, что не будете ездить, вам - что не уйдут. Никаких выставлений счетов. Если у вас так замечательно работается, то какие риски?
lovaz
21.01.2025 08:01А почему они должны начать "ездить" на разработчиках? В чем проблема, если такое случится, оплатить курс? Или не проходить этот, а купить другой, если есть желание поучиться? У Скилфэктори, Нетологии и прочих все за деньги. Вполне адекватная страховка с учетом того, что спецов в IT постоянно хантят.
FanatPHP
21.01.2025 08:01Интересно, где в реальном коде можно применить функцию, которая отдаёт 80000 рандомных значений. А точнее, почему вместо неё нельзя применить функцию, которая отдаёт одно рандомное значение, вызвав её 80000 раз.
ceomt Автор
21.01.2025 08:01Можно, но тема была "генераторы", и на основании данного "хулиганского примера" была задача минимальным изменением кода снизить потребление памяти, используя как раз генераторы.
FanatPHP
21.01.2025 08:01Я так и подумал, но тут есть нюанс: генераторы не имеют отношения к потреблению памяти. Собственно, данный пример это как раз прекрасно и иллюстрирует: память экономит написание осмысленного кода (вызывать функцию не 1 раз, а 80000), а не генератор.
Я просто надеялся, что поскольку курс делают практикующие специалисты, то и примеры они будут брать из практики, а не про кошечек и собачек. Но, в общем, это было наивное ожидание: разумеется, не на всякий аспект языка можно найти пример из непосредственной практики. И всё же я бы порадовался примеру, в котором генератор используется по своему назначению: для написания более удобного кода.
ceomt Автор
21.01.2025 08:01Тут моя вина, я взял первое, что попалось из ДЗ для "галочки" - для вставки в текст. Благодарен за развернутый коммент, принял во внимание.
lovaz
С одной стороны, молодцы, что заморочились, с другой - не факт, что обучение подойдет другому агентству, нужны промо.
ceomt Автор
Думаю над этим, но курс в целом для PHP-разработчиков.