На рынке IT спрос на кадры превышает предложение, при этом компании стремятся нанять идеального сотрудника, который сможет приносить пользу бизнесу и расти внутри компании. Однако типичные вопросы по теории на собеседовании зачастую дают обратный эффект ― работодатель выясняет, чего кандидат не знает и не умеет.
Илья Сазонов, руководитель разработки в сервисе рассрочек «Всегда.Да», делится советами, как правильно выстроить беседу и не упустить перспективного разработчика на Java. Материал будет полезен HR-специалистам в сфере IT и руководителям разработки в сфере бэкенда.
Люди ― основа любого бизнеса. Наш финтех-сервис развивается благодаря команде талантливых и перспективных специалистов. Половина штата ― это IT-специалисты, более 100 человек. За прошедший год мы взяли 20 разработчиков — на базе опыта собеседований хотим поделиться советами, как лучше общаться с кандидатом, чтобы раскрыть его практические знания и умения. Тот, кто сумеет выбрать наиболее перспективных сотрудников, получит серьёзное преимущество перед теми, кто в это время проводит собеседования, рассчитывая закрыть вакансию идеальным соискателем.
Вот какие задания мы предлагаем кандидатам.
Даём реальные задачи на примере кода
Типичные вопросы на собеседовании по Java — например, «Какие методы есть в классе Object?», «Чем отличается ArrayList от LinkedList?», «Из каких этапов состоит жизненный цикл спринг-бина?» — нацелены на выявление теоретических знаний кандидата.
Но в жизни чаще всего это не отражает практических знаний и навыков. Представьте кандидата, который уверенно говорит, что примитивные типы передаются по значению, а объекты по ссылке. Для кого-то это уже может стать поводом для отказа.
Лучше задавать практико-ориентированные вопросы.
Составить их можно, исходя из требуемых навыков. Посмотрите на тех, кто в компании вырос на соответствующей позиции: с каким кодом они работают каждый день, какие решают задачи, с какими трудностями сталкиваются и что помогает им обучаться. Можно и нужно использовать фрагменты кода.
Вернёмся к примеру с вопросом о передаче параметров. Если кандидат на первый вопрос по теории ответил неправильно, спросите, что будет, если передать в параметр метода List, а потом внутри метода присвоить параметру новое значение ― см. пример далее.
Если кандидат даст верное решение этой рабочей задачи, значит на практике он понимает, как ведёт себя язык, но не знает теорию ― что такое передача по значению и по ссылке. И это не повод отклонять кандидатуру специалиста — после выхода он(-а) начнёт решать именно задачи бизнеса.
Оценивайте не только текущие компетенции, но и потенциал ― как человек думает над вопросами, какие решения предлагает.
Чем больше вариантов, каждый из которых кандидат может пояснить с точки зрения плюсов и минусов, тем выше квалификация. К таким вопросам нельзя подготовиться заранее или погуглить решения — это даётся только с опытом.
Кому-то может быть некомфортно раскрываться на первом собеседовании, поэтому дайте время на то, чтобы перебороть волнение. Свободные размышления расскажут о кандидате и его опыте больше, чем любой стандартный вопрос по теории.
Пример выше ― простой вопрос, и опытный Java-разработчик не ошибётся с ответом. Если же приходится делать уточнения, то перед нами с высокой вероятностью junior или middle. Но и для опытного разработчика обязательно найдётся теоретический вопрос, ответа на который он(-а) не помнит, хотя на практике сталкивается каждый день.
Вопросы должны быть направлены на реальные рабочие задачи.
Не давайте выдуманный код, написанный специально для собеседования, как в этом антипримере практического вопроса на знание Java:
Да, чтобы понять, что делает такой код и работает ли он вообще, нужно досконально знать правила Java — даже те, которые обычно применять не требуется. Но с таким кодом никто никогда не сталкивается и не столкнётся в жизни, а если это всё-таки случится, то в связи с тем, что пришлось переписать его с нуля.
Просим покритиковать проект в качестве тестового задания
Не все программисты готовы тратить время и силы на выполнение тестового задания. Особенно, если под этим подразумевается масштабный проект, на который уйдёт большая часть выходных, — можно сходить на собеседование в другую компанию, где таких задач не дают.
Но в разговоре не получится раскрыть все грани профессиональных компетенций кандидата — узнать больше поможет только тестовое задание. К тому же некоторые кандидаты, пройдя большой круг собеседований, очень хорошо осваивают теорию, и без практической части сложно выявить их реальный уровень знаний и опыт.
Вместо стандартного написания кода по ТЗ попросите разработчика покритиковать чужой код ― небольшой проект, наполнённый ошибками и антипаттернами. Такая задача позволит оценить, способен ли кандидат разрабатывать фичи самостоятельно, и может ли помогать в этом другим.
Кроме этого узнаете, насколько хорошо потенциальный коллега справляется с ревью кода, которые регулярно проводятся в IT-компаниях.
Посмотрим, какие ошибки можно спрятать в код.
Например, опытный разработчик обязательно обратит внимание, что у Entity в методе equals используются другие поля, кроме помеченных аннотацией Id.
Вот пример тестового задания с ошибками в коде и вариант его исправления:
Другой пример ― метод, который возвращает партнёру какие-то стандартные справочные значения, не использует кеш и каждый раз запрашивает эти значения из соседнего микросервиса:
Если кандидат не только находит ошибки, но и предлагает улучшения ― это хороший сигнал. Например, в Java порекомендовал убрать из какого-нибудь метода длинный switch и заменить его map, из которого по enum ключу можно получить полиморфный объект, инкапсулирующий ветку switch. Можно понять, что он(-а) не только изучает видео с конференций, отраслевые материалы, но и умеет применять знания в реальной жизни.
- Научитесь программировать с нуля
- Соберёте портфолио уже во время обучения и создадите собственный Google.Диск
- Программа разработана в партнёрстве с Альфа-Банком ― получите приоритет при приёме на вакансии и стажировки для Java-разработчиков
Предлагаем кандидату другие позиции, если он не подходит на роль бэкенд-разработчика
В IT-компаниях, как правило, открыты позиции в разных направлениях, а компетенции кандидатов могут пересекаться. Стоит подобрать варианты, на какую роль можно рассмотреть человека, который не подошёл под требования к бэкенд-разработчику.
Например, это может быть Kotlin-разработчик, который ищет вакансии на Java — компетенции разработчиков на этих языках тесно пересекаются. Или это может быть позиция в автотестировании, где не требуется много знаний по Java. Это позволит быстрее и эффективнее закрыть вакансии и не придётся привлекать специалиста с нуля. Это особенно важно для стартапов, которые не успели ещё создать и развить HR-бренд.
Рассмотрим подробнее, какие альтернативные роли можно предложить кандидату.
Разработчик на другом языке
Обычно в компаниях есть позиции для разных языков ― в сфере бэкенд- и фронтенд-разработки, а также разработки мобильных приложений, без которых сейчас не стреляет ни один проект.
Кандидат может обладать навыками в том языке, которого не указал в резюме.
Вот ситуация из нашей практики. На собеседование по Java пришёл программист, который всю жизнь писал на Javascript, а последний год факультативно развивается в кодинге на Kotlin и считает, что этот опыт хорошо проецируется на Java. Выясняется, что в данный момент он не сможет закрыть задачи по бэкенду, но для вакансии мобильного разработчика на Kotlin подходит отлично.
И бизнес получает того, кто ему нужен, и кандидат остаётся доволен результатами собеседования. Сам он(-а) про Kotlin может и не рассказать, но об этом можно догадаться, когда он(-а) скажет, что equals и «==» — это одно и то же. Ведь в Kotlin на практике это действительно так.
Автотестировщик с возможностью развиваться в бэкенде
Если пригласить кандидата на роль разработчика по какой-то причине не получается, то можно предложить ему заняться автоматизацией тестирования при наличии такого опыта.
QA-специалисты, которые хотят перейти в разработку, не редкость ― это легко увидеть из резюме. Через некоторое время ― например, полгода или год ― можно провести ещё одно собеседование, по итогам которого перевести его в бэкенд.
Такой приём создаёт дополнительные условия для роста внутри компании и становится дополнительным мотивирующим фактором. Вы показываете готовность делиться знаниями и опытом в той сфере, куда кандидат хотел попасть изначально. Обучаться в поле и под руководством опытных коллег легче, чем самостоятельно, и можно расти быстрее.
Безусловно, компания должна своё обещание сдержать. Соблазн оставить тестировщика на той роли, с которой он(-а) великолепно справляется, весьма велик. И если ему поддаться, то человек всё равно перейдет в разработку — только в другой компании.
Резюмируем
Поиск хорошего специалиста ― это долгий и трудный путь, а в сфере разработки задача усложняется высокой конкуренцией работодателей. Поэтому для IT-компаний — в особенности стартапов — ценен каждый кандидат, который приходит на собеседование.
Чтобы привлечь перспективного коллегу в компанию, важно правильно выстраивать процесс найма:
- Не фокусироваться на теоретических знаниях ― если разработчик не может назвать все методы класса Object, это не значит, что он(-а) не умеет программировать. Лучше составить план интервью заранее и сфокусироваться на практических задачах из числа тех, с которыми успешному кандидату предстоит работать каждый день.
- Отказаться от масштабных тестовых заданий из серии «напишите код» в пользу ревью кода, в котором спрятаны ошибки.
- Держать в уме другие роли, на которые может подойти кандидат помимо бэкенд-разработки, ― так получится быстрее и продуктивнее закрыть вакансии.
Мнение автора и редакции может не совпадать. Хотите написать колонку для Нетологии? Читайте наши условия публикации. Чтобы быть в курсе всех новостей и читать новые статьи, присоединяйтесь к Телеграм-каналу Нетологии.