Привет, читатель! Вот уже три года я провожу собеседования на позиции Unity-разработчиков. За это время я просмотрел более 500 кандидатов на позиции мидла и сеньора, провёл свыше 100 интервью и нанял более 20 Unity-разработчиков. Этот опыт помог мне выявить множество "зелёных" и "красных" флагов, которые помогают определить подходящих кандидатов.
Эта статья будет полезна всем Unity-разработчикам — от Junior до Senior, а также лидам, которые проводят собеседования.
Об авторе
Меня зовут Борис, я Tech Lead в компании, занимающейся игровым аутсорсингом и аутстаффингом. Я пришёл в компанию вторым разработчиком и стал лидом, а сейчас у нас 15 разработчиков, и все они прошли собеседование со мной
Я получил техническую базу в МГТУ им. Баумана по направлению "Компьютерные системы и сети" и менеджерскую — в НИУ ВШЭ по направлению "E-commerce". У меня 12 лет опыта работы в Unity, более 200 выпущенных проектов — от прототипов до игр с десятками миллионов скачиваний.
Также я веду блог в Telegram, где делюсь советами для Unity-разработчиков.
Цель собеседования
Основная цель — заключить взаимовыгодное партнёрство между компанией и кандидатом.
Важно понимать: собеседование — это не экзамен, а интервьюеры — не экзаменаторы. Вы нужны компании так же, как компания нужна вам.
Основные ошибки кандидатов
Сильное преувеличение опыта. На испытательном сроке может выясниться, что ваши навыки не соответствуют заявленным
Отсутствие вопросов о компании. Это создаёт впечатление, что кандидат не заинтересован в сотрудничестве
Пример из практики: один кандидат успешно прошёл все этапы, ушёл с текущего места работы, но через пару недель стало ясно, что у него нет заявленного опыта. В итоге: мы расстались, а он остался без работы. Никто не выиграл.
Этапы собеседования
Отправка резюме
Интервью с HR
Code Review / тестовое задание
Техническое интервью / live coding
Интервью с тимлидом
Этапы могут отличаться в зависимости от компании: в крупных корпорациях, таких как Google или Yandex, собеседование может состоять из нескольких интервью, а в стартапах можно сразу встретиться с лидом или CEO.
Резюме (CV)
Рекомендации:
Сделайте чёткое и профессионально оформленное CV.
Поддерживайте свой профиль в LinkedIn на высоком уровне.
Используйте профессиональную фотографию. Компании часто создают профили кандидатов автоматически, и неподобающая фотография может вызвать предубеждение.
Интервью с HR
На этом этапе HR знакомится с вами, а вы — с компанией.
Причины отказа:
Несоответствие вакансии (например, опыт на Python, а требуется Unity).
Недостаточный уровень английского (у нас, например, требуется уровень B2 для сеньоров).
Неуместные soft skills (например, односложные ответы или грубость).
Code review / тестовое задание
Этот этап — первичная оценка ваших hard skills
Когда достаточно готового примера кода, а когда необходимо выполнить тестовое задание?
Многое зависит от политики компании. Одни всегда требуют выполнения тестового задания, другие — только в случае отсутствия примеров кода или если они не соответствуют их требованиям.
Обычно небольшие и средние компании не настаивают на выполнении тестового задания. Запрос тестового от каждого кандидата может отпугнуть многих, так как далеко не все готовы тратить на это своё время.
Взгляд на code review глазами ревьювера
На code review одного кандидата я выделяю около 30 минут.
Провожу code review дважды в неделю и могу просмотреть до 10 кандидатов за день.
Оцениваю по трём ключевым критериям: код-стиль, архитектура, complexity (сложность кода).
95% проектов я даже не открываю в Unity.
В других компаниях процесс ревью может выглядеть иначе, но всегда держите в голове, что ревьювер уделяет мало времени вашему проекту и просматривает много кандидатов за день
А теперь несколько советов, как правильно проходить code review
Совет 1: Присылайте ссылку на GitLab или GitHub
Это может казаться очевидным, но до сих пор каждый пятый кандидат отправляет архив с проектом, что вызывает множество неудобств:
Потеря времени. Ревьюеру нужно потратить 5 минут из отведённых 30, чтобы скачать и разархивировать проект.
Проблемы с доступом. Часто архивы защищены, и ревьюеру приходится запрашивать доступ.
Вопросы к навыкам. А умеете ли вы вообще пользоваться Git?
Создать репозиторий и залить проект в Google Drive, занимает одинаковое время, а неудобств значительно меньше
Совет 2: Присылайте готовый проект, а не набор скриптов
Я, как ревьюер, хочу понять, как вы умеете работать со всем проектом, и оценить, в том числе, структуру папок, архитектуру и т. п.
И вот почему это важно:
Нельзя оценить структуру проекта.
Часто нарушены принципы SOLID, а скрипты перегружены ответственностями.
Отсутствует часть кода, что не дает возможности полностью понять присланный скрипт.
Многие кандидаты говорят, что их код под NDA, поэтому присылают 2 скрипта из готового проекта. Если у вас такая же ситуация, потратьте полдня или день и сделайте проект специально для code review. Вы можете выполнить тестовое задание для компании, а затем использовать этот проект как пример своего кода.
Совет 3: Оформляйте README
README — это ваша визитная карточка. Только 5% кандидатов его делают.
Что включить:
Краткое описание проекта
Архитектуру и структуру
Особенности, которые вы хотите подчеркнуть
Гифку с примером геймплея
Ссылку на сборку (опционально)
Вот ссылка на мой тестовый проект: https://github.com/romanchikovboris/Tower-Defence
Совет 4: Присылайте ссылку на проект, а не на Git профиль
Ссылка на профиль с множеством проектов усложняет ревью.
И вот почему ссылка на Git профиль это плохо:
Чаще всего я выбираю самый последний проект, но он может быть слабым.
Если первые 2 проекта сложные или не подходят под критерии, я запрашиваю тестовое.
Косвенно, по названиям и короткому ревью других проектов, я ищу ваши слабости, чтобы за них зацепиться.
Оформите один идеальный проект, чем много посредственных. Ревьюеру не за что будет зацепиться, а вы сможете потратить на него больше времени, и ваши шансы увеличатся.
Совет 5: Используйте общепринятые фреймворки
Самописные фреймворки — это изобретение велосипеда, в котором ревьюеру ещё нужно разобраться.
Используйте готовые решения:
Zenject (Extenject)
VContainer
UniRx (R3)
UniTask
Исключение — если вас попросили не использовать сторонние фреймворки. Лучше для таких случаев иметь отдельный проект в репозитории.
Совет 6: Соблюдайте код-стиль
Покажите, что умеете писать чистый код.
Я рекомендую:
Код-конвенцию Microsoft
Гайд Unity: Code Style Tips
Если работаете в Rider, настройте подсказки Code Style для упрощения работы
Совет 7: Архитектура имеет значение
Покажите своё мастерство! ?
Проект можно немного "усложнить", чтобы лучше показать навыки. Иначе зачем это все нужно? Следуйте принципам SOLID, KISS, DRY. Использовать их в реальных проектах — это отдельный холивар, но показать владение ими нужно.
Не используйте Singleton. Это сразу отказ. Почему? Потому что его знают все, а создать архитектуру без него умеет не каждый.
Совет 8: Упрощайте complexity
Если очень просто, то complexity — это то, насколько ваш код легко прочитать и понять.
Чем проще понять код, тем лучше:
Подробнее про complexity: здесь
Также есть книжка Роберта Мартина "Чистый код"
Не пренебрегайте этим советом. Многим компаниям важно понимать, что, если вы уйдёте с проекта, то в нём можно будет разобраться и поддерживать.
Совет 9: Не переусердствуйте с комментариями
Код должен быть понятным без комментариев.
Советы:
Не используйте summary. Они уместны в публичных методах в библиотеках.
Разбейте сложные части на методы или классы (уменьшайте code complexity).
Используйте понятные названия переменных и методов.
Помните, переизбыток комментариев мешает пониманию кода, а не упрощает его.
Совет 10: Не расстраивайтесь при отказе
Отказ — это шанс для роста!
Не расстраивайтесь при отказе: это всегда неприятно, но отказ — не конец, а возможность для роста. Воспринимайте обратную связь конструктивно, работайте над ошибками и возвращайтесь сильнее.
Кстати, вот пример моего тестового проекта: GitHub
Техническое интервью
Техническое интервью – это момент истины. Его цель – понять ваши теоретические знания и навыки.
Об оценке кандидатов
Я разработал авторскую методологию оценки кандидатов, которая показывает отличные результаты: 90% нанятых сотрудников соответствуют оценкам, данным на собеседовании. Углубляться в нее мы не будем, но стоит выделить несколько важных моментов:
Выделено 10 категорий знаний для Unity разработчика.
Каждая категория оценивается от 0% до 100%.
У каждого проекта есть свои “веса” для категории.
По завершению собеседования рассчитывается взвешенная оценка, на основе которой принимается решение.
Я разработал эту методологию, так как наша компания занимается аутсорсингом и аутстаффингом, и мы должны очень четко понимать технический уровень кандидата по всем направлениям. Большинство продуктовых компаний так не делают и сосредотачиваются на определенном наборе категорий под определенный проект.
Я выделяю следующие категории в оценке:
Unity 3D - как хорошо кандидат владеет UnityEngine в 3D пространстве.
Unity 2D - как хорошо кандидат владеет UnityEngine в 2D пространстве.
Physics - как хорошо кандидат владеет физикой в Unity, а также школьные знания кинематики.
UI - умение верстать окна и их оптимизировать.
Shaders - умение писать и редактировать шейдеры, преобразование пространств и т. д.
Оптимизация - инструменты, которые делают код быстрее.
Архитектура - паттерны, подходы (SOLID, KISS, DRY), особенности создания архитектуры в Unity.
C# - в целом всё, что касается C#: от upcasting и сборки мусора до IEnumerator.
Assets/SDK - рекламные, аналитические SDK, пуши, Remote config, Zenject (VContainer), UniTask, UniRx(R3).
Network - Rect API, сокеты, мультиплеер, SaaS сервисы типа Playfab.
ECS - умение работать с ECS архитектурой.
Небольшая ремарка
Я специально не привел список вопросов на собеседовании, потому что 80% вопросов, которые я задаю, являются открытыми, например: “Как ты сделаешь архитектуру движения юнитов для мультиплеерной RTS игры?”. На эти вопросы нет правильного ответа, а я оцениваю, как рассуждает кандидат и что знает.
Раньше я очень часто задавал типовые вопросы, например:
Из чего состоит жизненный цикл MonoBehaviour?
Как работает Vector3.Lerp()?
Но давайте будем реалистами. Все эти вопросы уже давно есть в интернете, и любой кандидат, который потратит немного времени на подготовку, на эти вопросы ответит легко. А с появлением AI-ассистентов такие вопросы вообще теряют смысл.
Из чего состоит техническое собеседование?
-
Рассказ кандидата о предыдущем опыте работы
⏱ 10–15 минут
Перед собеседованием я уже изучаю CV кандидата, но прошу повторить информацию с фокусом на технические детали. Расскажите о своей роли, инструментах и задачах. Помните: чем больше деталей вы дадите, тем меньше будет технических вопросов.Совет: Подготовьтесь к этой части, сделайте небольшую шпаргалку, чтобы показать себя в самом выгодном свете.
-
Технические вопросы
⏱ 40–50 минут
На этом этапе я оцениваю знания кандидата по ключевым навыкам, описанным выше.Совет: Никогда не отвечайте на вопрос: “Я не знаю”. Попробуйте порассуждать и подумать логически. Даже если вы не ответите правильно, то рассуждения принесут вам несколько десятков процентов, а это явно лучше 0.
Вопросы кандидата
⏱ 5 минут
Если у вас есть вопросы о работе, задавайте их – это показывает ваш интерес.
6 советов, как успешно пройти техническое интервью
Используйте деловой язык.
Стиль общения имеет значение. Если интервьюер смягчает тон, вы можете немного адаптироваться, но сохраняйте профессионализм.Подробно отвечайте на вопросы.
Вы пришли не «сдать экзамен», а показать свои сильные стороны. Не заставляйте вытягивать из вас информацию.Отвечайте по делу.
Не уходите в сторону от заданного вопроса. Это снижает доверие к вашим знаниям.Не говорите “я не знаю”.
Если вы не уверены, попробуйте рассуждать. Это лучше, чем просто признать незнание, и добавляет вам баллы.Не используйте шпаргалки.
«Подсматривание» легко заметить, и это вызовет дополнительные, сложные вопросы. Лучше честно показать свой уровень.Спросите обратную связь.
Вопрос «Как я себя показал?» может быть полезен, если компания обычно не даёт фидбэк. Это ваш шанс узнать, что подтянуть.
Live coding
Live coding — это практика программирования в режиме реального времени, когда разработчик пишет и исполняет код на глазах у интервьюера. Это лучший способ оценить прикладные навыки программиста, которые зачастую важнее теоретических знаний.
Мы в компании стали очень часто сталкиваться с тем, что кандидаты, которые хорошо показали себя на собеседованиях, очень плохо справляются с прототипами, делают их медленно и некачественно. Эту проблему мы решили путём введения формата Live coding.
Как проходит live coding у нас?
Нашим заданием является разработать небольшую механику сбора ресурсов в рамках прототипа.
Перед началом интервью мы просим кандидата скачать заранее подготовленный тестовый проект, чтобы не тратить время на настройку.
Вводная часть
⏱ 10–15 минут
Знакомство и объяснение задания.-
Задание
⏱ 2 часа
Кандидат пишет код и демонстрирует экран. Мы оцениваем:Финальное качество игры.
Игра не должна содержать багов, анимации и игровые элементы должны выглядеть «сочно». Мы оцениваем продукт глазами игрока, а не разработчика.Скорость работы.
Оценивается, сколько заданий кандидат успевает выполнить и как быстро. Также фиксируем, на что он тратит больше времени.Навыки.
Как кандидат пишет код, пользуется ли AI и горячими клавишами, какие плагины редактора применяет, как быстро ориентируется в Unity.
Правила:
Можно гуглить и использовать AI.
Разрешено использовать и добавлять любые ассеты.
Код может быть «грязным» — архитектура и качество не оцениваются.
Красные флаги на собеседовании:
Низкое качество проекта. Нет анимаций, плавных переходов, игровых «фишек».
Чрезмерное использование ChatGPT, особенно там, где быстрее написать код вручную.
Ненужные задачи: написание «чистого» кода, рефакторинг, уборка проекта.
Хаотичность: переход от одного задания к другому без завершения текущего.
После завершения работы кандидат отправляет архив с проектом любым удобным способом. Затем я снимаю небольшое видео по заранее подготовленному сценарию, готовлю отчёт, где указываю сильные и слабые стороны и оценку от 0 до 100%. Видео с результатом прикладывается к отчёту, ссылка отправляется кандидату.
Заключение
Я постарался максимально кратко изложить весь свой опыт проведения собеседований на позицию Unity разработчика и поделиться советами, как можно более эффективно проходить собеседования.
Надеюсь, вы нашли для себя что-то полезное, и буду очень рад, если подпишетесь на мой канал в Telegram, где я планирую выкладывать ещё больше полезных советов и рекомендаций для Unity разработчиков.
Комментарии (20)
romanchikov_boris Автор
03.12.2024 05:28К сожалению, успешно пройденный тех. собес еще не гарантия получения оффера
mynameco
03.12.2024 05:28умение искать информацию, подсматривать, искать ответы, это еще более полезный скил и уровень. чем половина всего что в статье. а за него минус.
romanchikov_boris Автор
03.12.2024 05:28Безусловно, это полезный и важный навык, который, как и способность к обучению, является частью soft skills кандидата
Во время технического интервью и других этапов основная задача — оценить hard skills кандидата.
Моя ответственность как лида — быть уверенным, что кандидат, успешно прошедший интервью, сможет выполнять те задачи, для которых его нанимают
mopsicus
03.12.2024 05:28Поставил плюс, потому что согласен. Но не всё так однозначно. То что сейчас можно быстро найти готовый алгоритм, кусок кода, библиотеку и использовать её – уже мастхев. Но как раз то что соискатель может без использования стековефлоу и чатгпт и будет его качественно отличать от других кандидатов. Многое ещё зависит на какую позицию ищут, если это сеньор или лид, то требуются одни скиллы, если джун/мидл, то соответственно другие. Знаю таких кто вообще не хочет брать на себя какую-либо ответственность и работает просто кодером, которому кидают задачи и обе стороны всё устраивает, потому что такие люди тоже нужны.
romanchikov_boris Автор
03.12.2024 05:28Да, полностью согласен. Именно поэтому главная цель это взаимовыгодное партнерство между кандидатом и компанией. Поэтому, чем меньше шероховатостей на этапе собеседования, тем больше шанс придти к этому партнерству
Ichimitsu
03.12.2024 05:28Статья как мне кажется про поиск джуна или мидла. Сеньера/Лида таким образом не найти.А Live Coding это вообще ужасная практика, которая не показывает от слова "совсем" ничего. Ну возможно только в ооочень специфичных конторах.
romanchikov_boris Автор
03.12.2024 05:28Интересно, а почему сложилось такое впечатление?
Мы, как раз в компанию ищем в основном синьоров, реже мидлов и этот процесс прекрасно себя зарекомендовал
На счет Like coding я позволю себе не согласится.
Не смотря на то, что этот формат содержит ряд недостатков. Он занимает 2 часа, он требует продолжительной концетрации кандидата, а так же довольно стрессоый, его плюсы перебивают все минусы
Мы в 100% случаев даем такое интервью для кандидатов, которые идут на новые проекты с нуля и все кандидаты, что прошли его показывают себя просто потрясающе на таких проектахIchimitsu
03.12.2024 05:28Потому что часть вещей не подходят под уровень сеньер/лид. Например у многих в практике проекты под НДА, нельзя их показать, у вас требования, чтобы это был проект Unity - так не бывает. Тем более у сеньера/лида размеры проектов, будут на несколько десятков гигабайт. Лайв кодинг это умение писать код быстро, но это вообще далеко от серьёзных проектов. Сеньеры, а уж тем более лиды, решают задачи, которые занимают огромное кол-во времени порой и быстро писать там - это вообще не вариант.
Ну и там я могу по многим пунктам пройтись, просто времени нет писать).
Вот тот же пункт следуйте принципам SOLID KISS DRY, это джун и миддл должны следовать, в их задачах, как гарантия того, что они не напишут godmode class. А у сеньера/лида надо спрашивать где и как вы это используете и что думаете и т.п. вопросы более глубокие.
То что вы находите кандидатов - это хорошо, значит для ваших конкретных задач, вы подобрали оптимальное решение. Но вот даже в той сфере геймдева где я (kids) - такое не прокатит уже.romanchikov_boris Автор
03.12.2024 05:28Потому что часть вещей не подходят под уровень сеньер/лид. Например у многих в практике проекты под НДА, нельзя их показать, у вас требования, чтобы это был проект Unity - так не бывает. Тем более у сеньера/лида размеры проектов, будут на несколько десятков гигабайт.
Так моя рекомендация заключается в том, что таким сеньорам стоит оформить специальный, отдельный, проект небольшого размера, что бы показывать его на код Review
Лайв кодинг это умение писать код быстро, но это вообще далеко от серьёзных проектов. Сеньеры, а уж тем более лиды, решают задачи, которые занимают огромное кол-во времени порой и быстро писать там - это вообще не вариант.
На счет лидов я соглашусь, это в большой степени менеджерская роль. Но не согласен с тем, что сеньоры не должны уметь быстро писать код
У меня в практике бывали случаи, когда мобильная игра начала хайповать и часто именно от скорости работы разработчиков зависел успех проекта. На скорость сеньора можно не обращать внимание только когда, когда риски плохого кода значительно выше рисков сделать медленно. Как правило это успешные в стадии Liveops поддержкиВот тот же пункт следуйте принципам SOLID KISS DRY, это джун и миддл должны следовать, в их задачах, как гарантия того, что они не напишут godmode class. А у сеньера/лида надо спрашивать где и как вы это используете и что думаете и т.п. вопросы более глубокие.
Я согласен, что синьора нужно спрашивать, но вопросы это этап интервью до которого кандидат может и не дойти. На этапе код ревью, все таки стоит их показать
Ka33yC
03.12.2024 05:28Считаю, что зря статье накидали минусы, а между прочим полезная информация. Да, это сильные фильтры и много кто такой отбор не пройдет, тем не менее, лайв кодинг, например, может показать как быстро разраб может запрототипировать фичу. В этом случае не важна архитектура и чистота кода, если от фичи потом откажутся, главное, чтобы работало. И в целом уже есть много информации о собеседованиях, в которых гоняют одни и те же вопросы, например, про цикл монобеха, как правильно указал автор. Цикл монобеха может не рассказать только стажёр, но никак не мидл или сеньор. В общем, отличная статья
netricks
03.12.2024 05:28Материал должен называться "Как пройти собеседование у ИМЯ". Есть хорошие пункты. Есть хорошие пункты, которые надо выбить в скрижалях. А есть крайне странные тейки, после которых хочется спросить "Что курил автор?"
TachSkim
Прошёл тех собес на отлично, а потом колдун-гадал карты раскидал на нищету
romanchikov_boris Автор
К сожалению, успешно пройденный тех. собес еще не гарантия получения оффера