Как проводить собеседование бэкенд-разработчиков: опыт финтех-компании

На рынке IT спрос на кадры превышает предложение, при этом компании стремятся нанять идеального сотрудника, который сможет приносить пользу бизнесу и расти внутри компании. Однако типичные вопросы по теории на собеседовании зачастую дают обратный эффект ― работодатель выясняет, чего кандидат не знает и не умеет.

Илья Сазонов, руководитель разработки в сервисе рассрочек «Всегда.Да», делится советами, как правильно выстроить беседу и не упустить перспективного разработчика на Java. Материал будет полезен HR-специалистам в сфере IT и руководителям разработки в сфере бэкенда.

-сазонов.jpg

Илья Сазонов

Руководитель разработки в сервисе рассрочек «Всегда.Да»

Люди ― основа любого бизнеса. Наш финтех-сервис развивается благодаря команде талантливых и перспективных специалистов. Половина штата ― это IT-специалисты, более 100 человек. За прошедший год мы взяли 20 разработчиков — на базе опыта собеседований хотим поделиться советами, как лучше общаться с кандидатом, чтобы раскрыть его практические знания и умения. Тот, кто сумеет выбрать наиболее перспективных сотрудников, получит серьёзное преимущество перед теми, кто в это время проводит собеседования, рассчитывая закрыть вакансию идеальным кандидатом.

Вот какие задания мы предлагаем кандидатам.

Даём реальные задачи на примере кода

Типичные вопросы на собеседовании по Java — например, «Какие методы есть в классе Object?», «Чем отличается ArrayList от LinkedList?», «Из каких этапов состоит жизненный цикл спринг-бина?» — нацелены на выявление теоретических знаний кандидата.

Но в жизни чаще всего это не отражает практических знаний и навыков. Представьте кандидата, который уверенно говорит, что примитивные типы передаются по значению, а объекты по ссылке. Для кого-то это уже может стать поводом для отказа.

Лучше задавать практико-ориентированные вопросы.

Составить их можно, исходя из требуемых навыков. Посмотрите на тех, кто в компании вырос на соответствующей позиции: с каким кодом они работают каждый день, какие решают задачи, с какими трудностями сталкиваются и что помогает им обучаться. Можно и нужно использовать фрагменты кода.

Вернёмся к примеру с вопросом о передаче параметров. Если кандидат на первый вопрос по теории ответил неправильно, спросите, что будет, если передать в параметр метода List, а потом внутри метода присвоить параметру новое значение ― см. пример далее.

image1.png
Пример кода для демонстрации передачи параметров в Java

Если кандидат даст верное решение этой рабочей задачи, значит на практике он понимает, как ведёт себя язык, но не знает теорию ― что такое передача по значению и по ссылке. И это не повод отклонять кандидатуру специалиста — после выхода он (-а) начнёт решать именно задачи бизнеса.

Оценивайте не только текущие компетенции, но и потенциал ― как человек думает над вопросами, какие решения предлагает.

Чем больше вариантов, каждый из которых кандидат может пояснить с точки зрения плюсов и минусов, тем выше квалификация. К таким вопросам нельзя подготовиться заранее или погуглить решения — это даётся только с опытом.

Кому-то может быть некомфортно раскрываться на первом собеседовании, поэтому дайте время на то, чтобы перебороть волнение. Свободные размышления расскажут о кандидате и его опыте больше, чем любой стандартный вопрос по теории.

Пример выше ― простой вопрос, и опытный Java-разработчик не ошибётся с ответом. Если же приходится делать уточнения, то перед нами с высокой вероятностью junior или middle. Но и для опытного разработчика обязательно найдётся теоретический вопрос, ответа на который он (-а) не помнит, хотя на практике сталкивается каждый день.

Вопросы должны быть направлены на реальные рабочие задачи.

Не давайте выдуманный код, написанный специально для собеседования, как в этом антипримере практического вопроса на знание Java:

image2.png

Да, чтобы понять, что делает такой код и работает ли он вообще, нужно досконально знать правила Java — даже те, которые обычно применять не требуется. Но с таким кодом никто никогда не сталкивается и не столкнётся в жизни, а если это всё-таки случится, то в связи с тем, что пришлось переписать его с нуля.

Просим покритиковать проект в качестве тестового задания

Не все программисты готовы тратить время и силы на выполнение тестового задания. Особенно, если под этим подразумевается масштабный проект, на который уйдёт большая часть выходных, — можно сходить на собеседование в другую компанию, где таких задач не дают.

Но в разговоре не получится раскрыть все грани профессиональных компетенций кандидата — узнать больше поможет только тестовое задание. К тому же некоторые кандидаты, пройдя большой круг собеседований, очень хорошо осваивают теорию, и без практической части сложно выявить их реальный уровень знаний и опыт.

Вместо стандартного написания кода по ТЗ попросите разработчика покритиковать чужой код ― небольшой проект, наполнённый ошибками и антипаттернами. Такая задача позволит оценить, способен ли кандидат разрабатывать фичи самостоятельно, и может ли помогать в этом другим.

Кроме этого узнаете, насколько хорошо потенциальный коллега справляется с ревью кода, которые регулярно проводятся в IT-компаниях.

Посмотрим, какие ошибки можно спрятать в код.

Например, опытный разработчик обязательно обратит внимание, что у Entity в методе equals используются другие поля, кроме помеченных аннотацией Id.

Вот пример тестового задания с ошибками в коде и вариант его исправления:

image3-1.png
Entity с неправильными equals и hashCode
image4.png
Корректное решение

Другой пример ― метод, который возвращает партнёру какие-то стандартные справочные значения, не использует кеш и каждый раз запрашивает эти значения из соседнего микросервиса:

image5.png
Фрагмент кода, где метод прописан неверно: постоянно делаются запросы для получения тех же результатов
image6.png
Корректное решение: результаты кешируются

Если кандидат не только находит ошибки, но и предлагает улучшения ― это хороший сигнал. Например, в Java порекомендовал убрать из какого-нибудь метода длинный switch и заменить его map, из которого по enum ключу можно получить полиморфный объект, инкапсулирующий ветку switch. Можно понять, что он (-а) не только изучает видео с конференций, отраслевые материалы, но и умеет применять знания в реальной жизни.

 Профессия

Java-разработчик

Узнать больше

  • Научитесь программировать с нуля
  • Соберёте портфолио уже во время обучения и создадите собственный Google.Диск
  • Программа разработана в партнёрстве с Альфа-Банком ― получите приоритет при приёме на вакансии и стажировки для Java-разработчиков

Предлагаем кандидату другие позиции, если он не подходит на роль бэкенд-разработчика

В IT-компаниях, как правило, открыты позиции в разных направлениях, а компетенции кандидатов могут пересекаться. Стоит подобрать варианты, на какую роль можно рассмотреть человека, который не подошёл под требования к бэкенд-разработчику.

Например, это может быть Kotlin-разработчик, который ищет вакансии на Java — компетенции разработчиков на этих языках тесно пересекаются. Или это может быть позиция в автотестировании, где не требуется много знаний по Java. Это позволит быстрее и эффективнее закрыть вакансии и не придётся привлекать специалиста с нуля. Это особенно важно для стартапов, которые не успели ещё создать и развить HR-бренд.

Рассмотрим подробнее, какие альтернативные роли можно предложить кандидату.

Разработчик на другом языке

Обычно в компаниях есть позиции для разных языков ― в сфере бэкенд- и фронтенд-разработки, а также разработки мобильных приложений, без которых сейчас не стреляет ни один проект.

Кандидат может обладать навыками в том языке, которого не указал в резюме.

Вот ситуация из нашей практики. На собеседование по Java пришёл программист, который всю жизнь писал на Javascript, а последний год факультативно развивается в кодинге на Kotlin и считает, что этот опыт хорошо проецируется на Java. Выясняется, что в данный момент он не сможет закрыть задачи по бэкенду, но для вакансии мобильного разработчика на Kotlin подходит отлично.

И бизнес получает того, кто ему нужен, и кандидат остаётся доволен результатами собеседования. Сам он (-а) про Kotlin может и не рассказать, но об этом можно догадаться, когда он (-а) скажет, что equals и »==» — это одно и то же. Ведь в Kotlin на практике это действительно так.

Автотестировщик с возможностью развиваться в бэкенде

Если пригласить кандидата на роль разработчика по какой-то причине не получается, то можно предложить ему заняться автоматизацией тестирования при наличии такого опыта.

QA-специалисты, которые хотят перейти в разработку, не редкость ― это легко увидеть из резюме. Через некоторое время ― например, полгода или год ― можно провести ещё одно собеседование, по итогам которого перевести его в бэкенд.

Такой приём создаёт дополнительные условия для роста внутри компании и становится дополнительным мотивирующим фактором. Вы показываете готовность делиться знаниями и опытом в той сфере, куда кандидат хотел попасть изначально. Обучаться в поле и под руководством опытных коллег легче, чем самостоятельно, и можно расти быстрее.

Безусловно, компания должна своё обещание сдержать. Соблазн оставить тестировщика на той роли, с которой он (-а) великолепно справляется, весьма велик. И если ему поддаться, то человек всё равно перейдет в разработку — только в другой компании.

Резюмируем

Поиск хорошего специалиста ― это долгий и трудный путь, а в сфере разработки задача усложняется высокой конкуренцией работодателей. Поэтому для IT-компаний — в особенности стартапов — ценен каждый кандидат, который приходит на собеседование.

Чтобы привлечь перспективного коллегу в компанию, важно правильно выстраивать процесс найма:

  • Не фокусироваться на теоретических знаниях ― если разработчик не может назвать все методы класса Object, это не значит, что он (-а) не умеет программировать. Лучше составить план интервью заранее и сфокусироваться на практических задачах из числа тех, с которыми успешному кандидату предстоит работать каждый день.
  • Отказаться от масштабных тестовых заданий из серии «напишите код» в пользу ревью кода, в котором спрятаны ошибки.
  • Держать в уме другие роли, на которые может подойти кандидат помимо бэкенд-разработки, ― так получится быстрее и продуктивнее закрыть вакансии.

Читать также

 13 расширений VSCode, которые пригодятся любому веб-разработчику

 Как выбрать исполнителя для разработки сайта: советы агентства INPRO.digital

 «Хороший разработчик просит от 450 € в день»: как найти работу за рубежом и организовать там свою жизнь

Мнение автора и редакции может не совпадать. Хотите написать колонку для Нетологии? Читайте наши условия публикации. Чтобы быть в курсе всех новостей и читать новые статьи, присоединяйтесь к Телеграм-каналу Нетологии.

-сазонов.jpg

Илья Сазонов

Руководитель разработки в сервисе рассрочек «Всегда.Да»

Полный текст статьи читайте на Нетология