Как мы в «Лесте» ищем UI-программистов: от резюме до оффера
Привет, DTF! Меня зовут Виталий Заборов, и я ведущий UI-программист в «Мире кораблей». В этой статье расскажу, как у нас устроен процесс найма, какие качества мы ценим в кандидатах и на что обращаем внимание на каждом этапе.
Конечно, это мой личный взгляд — требования в других командах могут отличаться. Но если вам интересно, как попасть именно в нашу UI-команду, читайте дальше.
UI в «Мире кораблей»: кто чем занимается
Наш UI создается двумя группами специалистов:
- UI-программисты — работают с бизнес-логикой клиента, обработкой данных, пользовательским вводом и так далее. Пишем в основном на Python (на нем же написана большая часть игровой и серверной логики). Есть немного легаси на ActionScript, но его в основном читают, а не пишут.
- UI-разработчики — занимаются версткой интерфейса. Они тоже могут писать логику на Python, но это не их основная задача, и требования к их навыкам программирования ниже.
Junior, middle, senior: как мы определяем уровень
Термины junior, middle и senior в индустрии уже устоялись, но нюансы везде разные. Наш главный критерий — самостоятельность:
Junior. Это в первую очередь программист, который нуждается в кураторстве. Как правило, это недавние выпускники, только начинающие свой профессиональный путь в нашей компании. Наша кодовая база достаточно обширна и сложна — на ее освоение могут уйти месяцы, поэтому мы никогда не поручаем новичкам крупные или срочные задачи.
Мы сознательно выделяем джунам дополнительное время на изучение и освоение технологий. При распределении задач мы руководствуемся не срочностью или приоритетностью для проекта, а обучающим потенциалом задания. Это своеобразная инвестиция в будущее: чем качественнее junior освоит основы на старте, тем эффективнее он будет работать, достигнув уровня middle.
Особую роль в обучении играет код-ревью – это когда все разбирают код друг друга. Однако код junior-разработчиков всегда проходит особенно тщательный разбор со стороны лидов и senior-разработчиков. Поначалу может быть огромное количество замечаний, а решения иногда приходится переделывать несколько раз. Это нормальный процесс — важно, чтобы количество замечаний постепенно сокращалось от задачи к задаче.
Ключевой показатель для junior-разработчика — постоянный профессиональный рост, освоение наших технологий и глубокое понимание задач. Иногда новички, желая произвести впечатление, делают упор на скорость выполнения задач в ущерб качеству. В результате: задачи формально закрыты, но появляются новые баги, ломается работающий функционал, а код создает больше проблем, чем решает. Это, конечно, никуда не годится. Когда junior достаточно разобрался в кодовой базе своего отдела, начал писать код, который уже не требует большого числа правок на ревью, он становится middle.
Middle. Такого программиста больше не нужно курировать, он — полностью самостоятельная единица. Может не просто сам написать хорошее решение в коде, но также декомпозировать задачу на подзадачи, оценить сроки каждого этапа. Хорошо разбирается в своей области кода и имеет представление о смежных областях. Иногда пишет документацию.
Разумеется, он может и должен обращаться за помощью к коллегам, когда она нужна, но сама потребность в такой помощи возникает намного реже, чем у junior.
Основное направление развитие здесь — решение более сложных задач, освоение смежных частей кода, написание инструментария, которым будут пользоваться остальные программисты.
Senior. Наставничество и признание заслуг остальной командой — обязательное условие для этого грейда. Какой бы хороший код ни писал middle, как бы быстро не закрывал свои задачи, он не станет senior, если не начнет делиться своим опытом и помогать младшим коллегам.
Но и само качество написания кода, безусловно, тоже важно: senior должен быть примером для остальных. Даже без его личного участия коллеги будут смотреть на его решения и делать по образу и подобию.В общем, если коротко описать, кто такой junior, middle и senior, то junior – тот, кто решает задачи, обращаясь за помощью к коллегам, middle справляется сам, а senior — не только решает свои задачи, но и помогает другим.
Как нанимаем
Обычно процесс выглядит так:
- Изучаем резюме
- Собеседуем по видеосвязи
- Даем тестовое задание
- Проводим очное собеседование
Иногда этапы меняются: например, вместо звонка по видеосвязи проводим встречу в офисе (если кандидат в том же городе) или даем тестовое прямо на собеседовании.
Итак, сперва поговорим про резюме. Если позиция middle или senior, наши HR мониторят открытые резюме и присылают нам подходящих кандидатов. Обычно их немного, опыт у всех релевантный, и почти все переходят на следующий этап.
С джунами сложнее: откликов много, поэтому HR отправляют их пачками по 10-20 штук. Разбор всех заявок занимает время, и поэтому ответ может затянуться.
В резюме, в первую очередь, обращаем внимание на опыт работы. Для нас важно, что именно человек делал, а не где официально работал. Пет-проекты, фриланс, стажировки, университетская практика — все считается. Главное, чтобы был реальный опыт в разработке.
Особенно ценим пет-проекты: они показывают, что человек умеет принимать архитектурные решения и писать поддерживаемый код.
А вот нерелевантный опыт (например, 7 лет в риелторстве + год на курсах) — скорее минус. Курсы — это учеба, а не работа, и записывать их в опыт не стоит.
Образование – не главный фактор для нас. Выпускники топовых IT-вузов иногда проваливают собеседования, а самоучки или выпускники колледжей — проходят на ура. Если два кандидата с равными навыками, но у одного годичные курсы, а у второго — диплом бакалавра, выберем первого: он достиг того же уровня за гораздо меньшее время.
Далее поговорим про собеседование по видеосвязи. Здесь мы знакомимся с кандидатом, обсуждаем его прошлый опыт: над чем работал, как были устроены процессы, какие задачи решал. Также задаем технические вопросы (одинаковые для всех уровней). Они помогают сравнить кандидатов между собой.
Какие темы затрагиваем:
- Алгоритмы. Начинаем с простого вопроса (чтобы кандидат размялся), затем переходим к более сложным. Важно не знание конкретных алгоритмов, а умение их придумать. Если человек за 5-10 минут «изобретает» то, что проходят на первом курсе, — это круче, чем если бы он просто его назвал.
- ООП и архитектура. Один вопрос «на подумать» — без единственно верного ответа. Смотрим, как кандидат рассуждает и подходит к решению задачи.
- Структуры данных. Проверяем, понимает ли кандидат, как язык работает «под капотом» и какие структуры данных лучше использовать.
- Математика. В UI часто приходится работать с позиционированием элементов, так что логическое мышление важно. Раньше начинали с математики, но многие спотыкались даже на простых вопросах, поэтому теперь оставляем ее на очное собеседование (или пропускаем).
Что дальше?
Если кандидат проходит собеседование, его ждет тестовое задание или очная встреча. Но об этом расскажу в следующий раз!