Как я построил эффективное обучение Junior программистов
- суббота, 1 марта 2025 г. в 00:00:02
Senior Developer в крупном финтехе. С 2012 года в IT, участвовал в разработке мобильных приложений, игр и сложных распределенных систем. Несколько лет работал удаленно в крупных стартапах Кремниевой долины.
Программирование — одна из самых востребованных профессий, но путь в IT для новичков часто оказывается сложным и запутанным. Курсы, онлайн-школы, самообучение — все это может дать базовые навыки, но далеко не всегда приводит к трудоустройству.
Я много внимания уделяю контролю знаний, а значит, каждый, кого я рекомендую, был мною проверен и не просто прошел, а освоил программу и доказал это. Репутация в этом деле решает все, также, как репутация топовых вузов.
Если вы нанимаете, и готовы рассмотреть хорошего Junior+/Middle Python Backend, напишите мне в Telegram. Я учу людей программировать, а не просто проходить собеседования. Даже если прямо сейчас у вас нет вакансии, в будущем у вас появится потребность в хорошем Junior+, который готов к самостоятельной работе и может быстро расти до уровня Middle.
Почему я этим занимаюсь подробно ответил в этом комментарии.
Содержание
Они перестали работать не сейчас, так было всегда. Да, никогда онлайн-школы никому не помогали стать программистом.
Есть миф, что раньше после онлайн-школ нанимали, а последние пару лет перестали, потому что выпускников очень много, и требования выросли. Это не так.
Настоящая причина в том, что раньше в онлайн-школах учились другие люди.
Это были самоучки, которые шли в IT не ради денег, а потому что им это нравится. У них за плечами есть серьезные собственные проекты, которые не делают ни в одной онлайн-школе. Им часто даже не важно, возьмут их на работу или нет. Они все равно будут что-то создавать и продолжать учиться. Было много людей с профильным образованием, в общем, качество студентов было другим.
Т. е. людей после онлайн-школ нанимали, но не благодаря онлайн-школам. Этих людей и так бы наняли без всяких курсов. Им было достаточно в резюме описать проекты, которые они делали иногда годами, а на курсы многие из них шли просто заполнить пробелы в теории и, возможно, быть более уверенными в себе.
Сегодня же большинство студентов онлайн-школ — это люди, которые поверили рекламе, в которой говорится, что программирование — это легко, и любой может стать программистом, обучаясь в свободное от работы время.
Онлайн-школы, как и всякие бизнес-тренеры, зарабатывают на доверчивых людях, продавая им мечту вместо оказания реальной помощи.
Люди, чтобы получить образование, 4-6 лет платят 300-500к рублей в год, сдают экзамены, пишут лабораторные, курсовые и дипломные проекты. А тут какая-то онлайн-школа вдруг без какого-либо контроля знаний начнет выпускать специалистов, которые учатся в свободное от работы время.
Если кто и нашел работу, пройдя один курс в какой-то онлайн-школе, то это не более чем исключение из правил, о котором эти онлайн-школы будут трубить на всю округу. Реальные цифры трудоустройства после курсов хорошо, если хотя бы 1%. И это полностью заслуга этих ребят, а не онлайн-школ, либо, в редких случаях, это заслуга хорошего наставника, которых в онлайн-школах очень мало.
Люди, которые накрутили себе опыт в резюме, еще больше ухудшают ситуацию. Многие работодатели видят кучу резюме, где у людей 3-5 лет опыта и желаемая зарплата всего 120-170к и просто не видят смысла нанимать Junior без опыта за 100к. Большая часть этой массы работу все равно не находит, так как не могут пройти собеседование, но рынок портят изрядно, создавая иллюзию для работодателей, что на рынке полно Middle программистов, меньше, чем за 200-250к.
Обучение происходит в реальной рабочей среде со всеми рабочими инструментами: Jira, Confluence, GitLab (CI/CD), корпоративный VPN, Vault, Grafana, OpenSearch, Sentry, PostgreSQL (master/slave), Docker и т. д.
Работаем по Kanban над распределенной системой с высокой нагрузкой. Трафик неорганика, но все же, постоянное нагрузочное тестирование максимально приближает требования к качеству кода к реальному проекту среднего размера.
Задачи проходят все стадии от аналитики до релиза/отката с разбором всех возможных проблем на каждом этапе.
Программирование — это в первую очередь практический навык.
На протяжении всего обучения студенты выполняют как индивидуальные, так и командные проекты.
Индивидуальные проекты — это своего рода лабораторные работы, направленные на получение практических навыков в различных направлениях, например, настройка Nginx, Docker, оптимизация CPU и I/O, изучение структур данных, архитектура проектов и т. д. Некоторые навыки проще получить в небольшом индивидуальном проекте, чем в большом, где некоторые задачи уже выполнены, или их просто нет в данном типе проекта, а кодовая база просто увеличивается.
Командный проект — это один большой проект, над которым студенты работают на протяжении всего времени обучения, соблюдая все рабочие процессы. Это важная часть обучения, которая прокачивает не только hard skills, но и soft skills. Как правило, это проект с микросервисной архитектурой, где студенты разделены на команды, и каждая команда работает над своим сервисом.
Тут важна коммуникация не только внутри команды, но и между командами, чтобы договариваться о контрактах между сервисами, порядке и/или правилах релизов и т. д.
Пример схемы взаимодействия компонентов в командном KYC-проекте.
Краткое описание сервисов:
Public UI — это публичный UI, где пользователи проходят верификацию. Если вкратце, пользователь загружает документ и/или селфи (HTTP-запрос к Media-сервису), после чего ждет положительного или отрицательного ответа на верификацию по WebSocket.
Dashboard — сервис, который содержит настройки верификации и ее результаты. Основной бэкенд для Public UI.
Media — это сервис для хранения загруженных файлов. На время верификации он кэширует изображения в себе для быстрого доступа из других сервисов в рамках одного кластера; для постоянного хранения используется S3.
Step-manager — этот сервис отвечает за порядок выполнения верификации и контролирует, что все шаги выполнены.
Documents — это сервис, который выполняет валидацию документов и селфи, загруженных пользователями. Тут подразумевается взаимодействие с конвейером ML-сервисов для различной обработки изображений (эмуляторы).
Manual — этот сервис является внутренним инструментом для ручной проверки загруженных документов и селфи.
Internal UI — это UI для Manual-сервиса, на котором можно посмотреть загруженные документы и селфи и вручную проверить корректность загруженных файлов в случае, если ML-сервисы по какой-то причине не смогли это сделать.
WS-transport — сервис для асинхронного взаимодействия с пользователем, отправки результата верификаций, уведомлений.
Это лишь иллюстрация и пример учебного проекта. Можно долго рассуждать, насколько схема хорошая или плохая, и что, возможно, некоторые сервисы можно объединить, но для учебы лучше, когда компонентов много, со сложными связями и элементами Event-driven архитектуры. Это хорошо развивает навыки отладки, так как, чтобы докопаться до проблемы, нужно размотать длинный клубок связей компонентов, научиться правильно выбирать подход к логированию и читать эти самые логи.
Параллельно с практикой мы разбираем всю необходимую базу знаний: от операционной системы Linux до масштабирования сервисов, архитектуры/оптимизации/масштабирования БД.
По каждой теме необходимо сдать экзамен, чтобы двигаться дальше. Экзамен никогда не состоит из простых вопросов и ответов. Необходимо показать достаточную глубину знаний и продемонстрировать способность применить эти знания на практике.
В общем, моих учеников не напугать вопросами о том, как работает асинхронность на уровне операционной системы, оптимизацией и архитектурой БД, практическими заданиями, алгоритмическими задачами и другими форматами собеседований для уровня Middle+.
Далеко не все, даже опытные разработчики и менеджеры, по-настоящему понимают, что мы занимаемся не просто разработкой ПО, а автоматизацией каких-либо задач и/или процессов, и мы делаем это, чтобы увеличить прибыль и сократить расходы.
Из-за этого непонимания команды часто неэффективно расходуют ресурсы, выбирают неверную стратегию найма и так далее.
У меня есть ряд задач, которые направлены на то, чтобы научить думать о задачах, не просто как о технической проблеме, а в первую очередь как о проблеме бизнеса. Я подталкиваю студентов к типичным ошибкам в принятии решений, и потом вместе с ними разбираю эти ошибки и последствия в виде нерационального расходования ресурсов команды.
Эти задачи основаны на реальных ошибках принятия решений в командах, с которыми я работал. Часто это непонимание правила: 20% усилий дают 80% результата. Бывает, что оставшиеся 20% результата могут оказаться не такими уж и нужными. Надо просто научиться видеть это и общаться с бизнесом.
Иногда бизнес может решить, что любые усилия стоят оставшихся 20% результата, а иногда нет, но решение все равно должен принять бизнес, а не разработчики, которым очень хочется запилить какой-нибудь сервис или функционал, чтобы покрыть все 100% требований.
У меня нет конкретного срока, когда обучение заканчивается. Нельзя просто просиживать штаны год, получить какой-то сертификат и пойти искать работу.
Все зависит от скорости прогресса каждого студента. Если вдруг ко мне придет человек, который уже все знает, я готов сразу его порекомендовать в компанию-партнер, но честно, такого еще ни разу не было.
Как правило ко мне приходят ребята после онлайн-школ, курсов или вузов, кто уже как минимум несколько месяцев обучается программированию.
В среднем доучивание до нужного уровня происходит за год при условии очного обучения. С нуля я не обучаю, но если вам вдруг интересо я считаю, что срок обучения с нуля в среднем 2 года учебы на полный день. Если вы хотите учиться с нуля в свободное от работы время, то срок обучения уже 3-5 лет, но чаще люди не доходят до конца. Все зависит от того, сколько времени вы уделяете учебе.
Как я уже сказал, учебу нельзя совмещать с полноценной работой. Подработка возможна, в свободное от учебы время, но не наоборот. С полноценной работой срок обучения непредсказуемо большой. Онлайн-школы, именно так и зарабатывают, подобно фитнес клубам, продавая абонементы людям, которые не будут заниматься. Конечно все знают, что не сможете вы совмещать работу и учебу, но задача бизнеса продать вам курс.
По моему опыту, чтобы продуктивно учиться, нужно уделять учебе не менее 30 часов в неделю. 2-3 часа вечером после работы - это утопия.
Я активно ищу вакансии для студентов, веду переговоры с работодателями. Никакой накрутки опыта в резюме. Я не помогаю с трудоустройством, а по сути беру на себя ответственность за поиск работы.
Раньше у меня вообще не было необходимости общаться с компаниями. Любой студент мог сам откликнуться на вакансию, получить тестовое задание, выполнить его и получить первую работу. Мне было достаточно просто хорошо обучать и все.
Сейчас из-за описанных в первой главе проблем компании практически полностью перестали рассматривать Junior после любых курсов. Т.е. проблема даже в том, чтобы получить тестовое задание. Рассматривают только выпускников вузов и лишь в редких случаях всех остальных. В другой своей статье я написал комментарий по этому поводу, также рекомендую прочесть саму статью. Большая часть тестовых, которые сегодня дают Junior, это на самом деле не работодатели, а различные помогаторы в поиске работы за процент от будущей зарплаты, замаскированные под аутстафф/аутсорс.
Итак, сегодня, чтобы найти работу для студентов:
Пишу компаниям на почту и в другие каналы связи, пытаюсь договариваться.
Пишу в различных Telegram чатах, где сидят HR'ы. Посмотрите этот мой пост в ТГ.
Начал вести публичную жизнь, писать статьи и т.д., чтобы привлечь внимание компаний.
Гарантирую, что люди, которых я рекомендую, хорошо подготовлены и замотивированы.
Условия найма моих студентов:
Мне ничего платить за это не нужно
Официальное трудоустройство. Другие варианты возможны, только если кандидат и компания в разных странах.
Только белая деятельность. Никаких парсингов порно сайтов и тому подобное.
Все это сложно и отнимает много сил, но пока что мне удается трудоустраивать всех своих студентов, но не всегда это работает быстро. Благо, у меня мало студентов. Плюс те компании, которые знают обо мне, приходят снова. Для компаний это хорошая возможность сэкономить свои ресуры на поиск людей, и даже те кто нанимают только Middle программистов, потратив на поиск месяц или два, нанимают моих ребят закрывать эти вакансии.
Студентов у меня не много, так как нет никакой рекламы.
Основные требования:
Отсутствие полноценной работы. Возможны только подработки. Совмещать учебу с работой 5 дней в неделю нереально, если вы не можете прямо во время работы несколько часов учиться. Некоторые ребята могут совмещать, но это прям редко у кого получается.
Базовые навыки программирования достаточные, чтобы написать хотя бы простенький сервер на Python. Как минимум для меня это показатель, что студент не забросит учебу через месяц или два так как идея стать программистом к нему пришла не вчера.
Готовность учиться самостоятельно, задавать вопросы и сдавать экзамены где нужно будет показать достаточную глубину знаний по широкому кругу тем.
Готовность учиться в команде, работая над одним большим учебным проектом с соблюдением всех рабочих процессов.
Большая часть людей отсеивается по первым двум пунктам. Это либо те, кто с компьютером на ВЫ и не имеют мотивации, чтобы хотя бы базовые навыки получить самостоятельно. Или те, кто хочет учиться в свободное от работы время по вечерам. Всем я обычно даю несложное задание, после чего большинство пропадают.
Надеюсь, эта статья откроет глаза тем, кто только начинает свой путь в IT, и хотя бы часть людей перестанут верить рекламе о том, что это легко и можно учиться с нуля в свободное от полноценной работы время всего несколько месяцев.
Обратите внимание на пример учебного проекта в статье, а потом посмотрите, какие проекты делают в онлайн школах. Несколько проектов на уровне среднего тестового задания не могут быть хорошим портфолио.
Возможно, это звучит самоуверенно, но я убежден, что практика, которую я даю, лучше, чем большая часть коммерческого опыта, который могут получить люди на рынке на первой работе. Часто первая работа — это разработка проекта в одиночку с минимальным контролем качества кода или вообще без него. Вобщем не любой учебный опыт можно игнорировать и не признавать.
Пишите мне в Telegram по вопросам найма или обучения. Выпускники готовы к самостоятельной работе и могут быстро расти до уровня Middle.