Написать пост

Как оценить профессионализм программиста за 5 вопросов — отвечают эксперты

Аватар Никита Прияцелюк

Для быстрой оценки кандидата хочется иметь несколько вопросов, которые позволят оценить его профессионализм. Узнаём у экспертов, есть ли такие вопросы.

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

На мой взгляд, достаточно всего трёх вопросов.

Каковы причины ухода с прежнего места работы?

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

Какой ваш самый интересный реализованный проект?

По ответу на этот вопрос можно определить уровень разработчика: какие задачи он считает действительно сложными, какие решения называет удачными. Если это его личный проект, можно узнать, как программист совмещал роли аналитика, разработчика, тестировщика, как решал вопросы интеграции данных и нагрузки. Рассказ о командном проекте позволяет оценить навык совместной разработки и уровень развития soft skills.

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

Расскажите про свои увлечения

Хороший показатель увлечённости именно программированием — чтение и просмотр профильных статей и подкастов. В том числе интересно, что человек читал или смотрел в последнее время. Это хороший показатель интереса к новым технологиям: даже если программист работает в компании с давно запущенными продуктами, где много legacy-кода, он должен интересоваться нововведениями в области технологий.

Кроме того, интересны и личные увлечения. Программисты обладают аналитическим складом ума, и рассказ об увлечениях показывает, готов ли человек разбираться в сложных процессах, погружаться в предметную область. Однажды я собеседовал на позицию бизнес-аналитика кандидата, который занимался дельтапланеризмом. На вопрос об увлечении он рассказал, что для набора высоты пилоты ищут границы между участками вспаханной и необработанной земли: у вспаханной земли заметно выше теплоотдача, и из-за разности температур там возникают восходящие потоки воздуха. Это пример глубокого понимания процессов, а следовательно и демонстрация того, что человек глубоко анализирует процессы и их связи. Бывает и наоборот: человек увлекается чем-то поверхностно и не понимает, что лежит в основе его увлечения, не понимает механику происходящих процессов, для кандидата в программисты это не очень хороший признак.

Любое собеседование в нашей компании — это разговор не только о технологии. Мы стараемся прежде всего узнать и понять человека, который к нам пришел. Впишется ли он в нашу культуру? Будет ли нашей команде комфортно работать с ним в будущем? Не противоречат ли принципы человека принципам компании? От этого зависит, сможет ли человек работать с нами долго и насколько продуктивным будет это сотрудничество.

Поэтому мы начинаем с самого простого, но важного: «Как вы пришли в разработку?». Этот вопрос помогает оценить кругозор соискателя в программировании и понять уровень его вовлечённости. По ответу становится ясно, заинтересован ли человек расти в этой профессии или для него это только «дань моде» и средство заработка.

Следующим вопросом, скорее всего, будет «ваша самая интересная/сложная решённая задача». Позволяет понять, что кандидат считает сложным и как подходит к решению таких задач.

Дальше можно переключиться на темы, связанные с фундаментальными знаниями: паттерны программирования, основы объектно-ориентированного программирования, ключевые принципы разработки (SOLID, DRY, OR, KISS и другие).

Оставшиеся вопросы связаны с направлением разработки (frontend, backend, mobile application) и характерной для него специфической областью знаний. Они позволяют выяснить много важных вещей: например понимание принципов взаимодействия пользовательского интерфейса с бэкендом, REST, API, работы с памятью устройств (в случае мобильного приложения) и многое другое. После обсуждения этих моментов уже можно переходить к типовым вопросам конкретной технологии.

Наши программисты занимаются как созданием собственных решений, так и разработкой на заказ, а также сервисами сопровождения, обновления нетиповых конфигураций 1С. Работа построена в небольших командах по 3–4 человека, каждая со своей специализацией: например кто-то глубже знает определённую конфигурацию 1С, кто-то лучше разбирается в обновлениях, свёртках информационных баз.

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

Почему он захотел стать разработчиком?

Этот вопрос помогает «разбить лёд» в начале разговора, найти точки соприкосновения. Позволяет понять, как человек принимает решения, что побуждает его к изменениям, что для него важно в профессии.

Какие личностные качества помогли ему стать разработчиком и какие из них наиболее значимы?

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

Кем он видит себя (на какой должности) через 1 год, 2 года, 5 лет (не обязательно работая в нашей компании)

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

Какие 5 его любимых книг и почему именно они?

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

Чем он может быть полезен нашей компании? Что он сможет привнести нового в работу компании?

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

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

Если же можно только 5 вопросов, то я всегда спрашиваю о проектах, в которых участвовал кандидат.

  1. Дошли ли они до промышленной эксплуатации?
  2. Как был организован процесс разработки? Кто и как ставил задачи? Как тестировалось? Кто принимал решение о том, что задача выполнена?
  3. Что не устраивало кандидата в процессе разработки? Предлагал ли он идеи по улучшению процесса?
  4. Как документировался код?
  5. Привык ли кандидат автоматизировать свою деятельность?

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

  1. Какие структуры данных и алгоритмы вам приходилось применять в прошлых проектах и в чём польза их использования?
  2. Расскажите о плюсах и минусах вашего языка программирования. Почему вы выбрали именно этот язык?
  3. Важно ли, чтобы код, написанный вами, был понятен другим? Если да, то почему?
  4. Опишите процесс разработки и внедрения программного продукта на прошлых местах работы.
  5. Напишите или расскажите словами алгоритм градиентного бустинга над деревьями. Как вариант: метод обратного распространения ошибки в нейронных сетях.

По своему опыту работы в этой сфере я могу сказать, что ответы на любые вопросы на собеседовании не позволяют точно выявить реальную эффективность и профессионализм разработчика. Эти характеристики проявляются в полной мере только в работе. Я сталкивался с ситуациями, когда соискатели идеально отвечали на сложные теоретические вопросы, но на практике не оправдывали ожиданий даже на среднем уровне.

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

Формат вербального собеседования в отношении программистов, если он реализуется в виде простого опросника, даёт валидность верификации профессионализма на уровне не более 30 %. Решение практических задач — минимум 80 %.

У нас на собеседовании обязательно попросят рассказать о своих последних проектах. Вопрос может быть сформулирован, например, так: «Чем вы занимались на прошлой работе? Как выглядела команда? И какую роль вы в этой команде занимали?». Из ответа станет понятно, как кандидат идентифицирует себя в команде, как работает внутри неё, насколько он командный игрок.

Следующим вопросом вас могут попросить рассказать о проекте, который разочаровал или наоборот воодушевил? И спросят: «Что бы вы изменили при работе над этим проектом?». Это даст HR понимание того, как человек анализирует свои ошибки, может ли что-то впоследствии изменить, или, возможно, из раза в раз допускает похожие промахи. Кроме того, косвенно из ответа станет понятно, готов ли собеседник к дальнейшему росту и какому более — профессиональному или карьерному.

Ещё один важный вопрос: «Работали ли вы напрямую с заказчиком или взаимодействовали с ним на каких-то этапах проекта?». Здесь мы предварительно тестируем наличие особенно ценных сейчас коммуникативных навыков. Нам важна привычная для кандидата структура коммуникаций: были ли это еженедельные очные или телефонные митапы с заказчиком, или же человек больше привык к письменным отчётам. Затем, скорее всего, последует ряд вопросов: «Готовы ли вы защищать свой код на уровне заказчика? И что происходило в случае неудачной коммуникации?». Например, эскалация проблемы тимлиду или же отстранение от решения проблемы. Эта часть интервью посвящена коммуникации с заказчиком.

Ещё хороший вопрос: «Как описали бы вас другие разработчики или ваш РП?». Ответ на этот вопрос расскажет нам о самооценке будущего сотрудника, о том, что он лично думает о своих результатах и работе в целом. Здесь я всячески рекомендую говорить правду. Ведь даже ответ: «У всех бывают косяки. Но мы в команде всегда работаем над этим», — даёт HR правильный посыл о личных качествах и верном настрое на диалог.

Также показательный вопрос: «Что в программировании для вас самое сложное?». Ответ на этот вопрос позволяет нам выявить слабые технические стороны кандидата. Честный рассказ о слабостях показывает, что человек адекватно оценивает свои возможности и готов в них развиваться. Например, ответ: «Сложностей нет, я просто с этим не работал», — однозначно говорит о том, что сложности в названной области явно есть.

Несмотря на то, что меня просили назвать пять вопросов, я бы добавил к ним ещё один: «Как вы следите за последними тенденциями в разработке?». Или как вариант этого же вопроса: «Какие последние три книги или статьи вы прочитали?». Если хоть одна из статей или книг касалась разработки или профессиональной области, то для нас это знак, что кандидат действительно интересуется техническими темами за пределами сугубо рабочих задач.

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

Как вы узнаёте что-то новое для себя? Расскажите об опыте работы с новыми для вас решениями

Этот вопрос позволяет понять, есть ли у человека стремление к новым знаниям и как он предпочитает их получать — проявляет ли самостоятельность или ждёт директивы сверху. Также ответ соискателя покажет, легко ли он берётся за что-то новое. Сфера программирования развивается постоянно, поэтому без постоянного обучения не обойтись.

Позволяете ли себе отклоняться от ТЗ, экспериментировать с кодом? В каких случаях?

Программист может отклоняться от ТЗ и экспериментировать с кодом по-разному. Некоторые пытаются оптимизировать его, продумывают архитектуру, тестируют получившийся код и обязательно сообщают о предполагаемых результатах. Такой подход вряд ли вызовет вопросы, особенно если результат экспериментов всех устраивает. Если же человек считает, что отклоняться от ТЗ можно без всякой цели, «ради интереса», это повод задуматься.

Что вы будете делать, если понимаете, что у проекта нет будущего?

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

Готовы ли вы исправлять ошибки других?

Только кажется, что программирование — прекрасная работа для интровертов: сиди себе с компьютером в уголке и всё. На самом деле, работа над проектом чаще всего ведётся в команде. Трудности случаются у всех. Этот вопрос позволит нам понять готовность человека «подхватить» проблему, возникшую у коллеги, и помочь с её решением.

Опишите свою самую большую неудачу: в чём она состояла?

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

В каждой компании свои особенности процесса разработки, и разные задачи у каждого программиста. В зависимости от них будут важны те или иные компетенции: умение действовать в команде, или, напротив, сосредоточиться на индивидуальных целях, работа с творческими или рутинными задачами, самостоятельность либо исполнительность и так далее. Главное, чтобы предпочтения будущего сотрудника совпали с тем, что он реально увидит в компании. Именно в такой ситуации человек будет действовать максимально эффективно.

А вот те самые пять вопросов, которые бы мы задали:

  1. Как вы представляете себе идеальный рабочий процесс?
  2. Какое ваше определение идеального программиста?
  3. Какая команда будет для вас наиболее комфортной?
  4. Какие задачи для вас самые интересные?

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

  1. Что для тебя самое важное в работе и на какие критерии в выборе работы мечты вы ориентируетесь?

Если оставить в стороне технические вопросы для оценки профессионализма разработчика, то для меня были бы показательны ответы на следующие вопросы.

Каким образом вы оказались в сфере ИТ?

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

Как давно занимаетесь программированием?

Да, из резюме видно, какой у него опыт, но этот вопрос позволяет рассказать кандидату, что программированием он занимается, например, со школы. Обычно школьные годы не относят к опыту работы, но на деле многие высококлассные специалисты приходят в ИТ именно со школьной скамьи.

В каких профессиональных сообществах участвует кандидат и/или есть у него публикации?

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

Проверка коммуникативных навыков

Это может быть деловая игра в группе, решение кейса индивидуально и т. д. Вообще такие тесты обычно проходят на позиции менеджеров, но для разработчика эти навыки теперь также важны. Не все и не всегда работают индивидуально над конкретной разработкой. Есть задачи, где, например, финансовый блок разрабатывает один программист, а логистический — другой. Таким образом, это уже команда из 3–4 человек (2 программиста, 1–2 постановщика), и все они как-то должны взаимодействовать и решать вопросы.

Участвовали ли вы в сторонних проектах помимо проектов на своей основной работе?

Это была роль разработчика или больше эксперта/архитектора? Нет ничего плохого, если кандидат участвует в сторонних проектах. Наоборот, это показатель его востребованности как профессионала и признанного знатока.

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

Для оценки профессионализма кандидата первоначально составляется перечень ключевых компетенций по конкретной должности.

Ключевые вопросы для оценки профессионализма программиста:

  1. Расскажите о себе и своём опыте работы.
  2. Какие технологии вы применяете в работе? Оцените, какие технологии знаете лучше.
  3. Опишите самый интересный реализованный(-ую) вами проект/задачу, результатами которого(-ой) вы гордитесь.
  4. Расскажите о своём неудачном опыте. Что произошло и чему вы научились?
  5. Опишите ситуацию, в которой вам пришлось делать то, чего вы не умели. Как вы с ней справились?

А также на собеседовании мы предлагаем кандидату выполнить тестовое задание по программированию (разработке).

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

  1. Какими проектами он гордится и почему?
  2. Если бы он сейчас решал задачу, которую решал 1–3–5 лет назад, что бы он в решении изменил?
  3. Что ему нравится/не нравится в работе программиста?
  4. Какие приоритеты у кандидата при выборе работы (технологии, команда, график, уровень оплаты и т. д.)?
  5. Решение новых задач/изучение новых технологий — это плюс или минус для кандидата?

Каковы принципы работы быстрой сортировки или красно-чёрного дерева?

Как уверяет учёный и специалист в области информатики Никалус Вирт, «алгоритмы + структуры данных = программы». Возможно, в современном мире это уже не совсем так, однако кандидат просто обязан знать принципы работы с массивом или структурами данных.

Как реализовать абстрактную фабрику или шаблонный метод?

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

Расскажите про принципы транзакционности ACID и как они обеспечиваются в [любимой кандидатом] СУБД?

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

Каковы основные механизмы работы операционной системы?

Любой код выполняется в конкретном окружении операционной системы. Разработчик должен понимать, какие бывают мьютексы и пайпы, какой IPC лучше и в каких случаях, TCP socket или UDP, а также знать ответы на многие другие вопросы, касающиеся взаимодействия программы с системой.

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

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

Идеальная цифровая модель разработчика выглядит следующим образом.

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

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

Для первой пятёрки вопросов хотел бы выделить следующие:

  1. Какие продукты использовались для командной разработки и сборки кода?
  2. Максимальное количество написанных вами строк кода в проекте?
  3. Могли бы вы дать ссылку на репозиторий с примерами кода и предоставить контактные данные тех, кто может дать рекомендации?
  4. Известны ли вам какие-либо дополнительные технологии, которые не указаны в описании вакансии?
  5. Приходилось ли вам работать с юнит-тестами?

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

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

Список моих вопросов на собеседовании:

  1. Опишите различия в формате передачи данных между HTTP GET и HTTP POST.
  2. Как работают индексы в базе данных?
  3. Есть веб-приложение с авторизацией и профилем пользователя. Все данные пользователя хранятся в таблице users в одной строке. Пользователи авторизовываются в приложении и меняют данные своего профиля. В таблице users несколько миллионов записей, в пике пользовательской активности приложение падает. Как определить причину падения? Как оптимизировать данное приложение?
  4. Есть программа, написанная не вами, которая работает в продакшене. Программа представляет из себя сложную функцию большого размера (2–3 тысячи строк), где логика настолько запутана, что любые изменения могут привести к поломке или частичной поломке всего сервиса. Как бы вы организовали процесс трансформации такой программы к поддерживаемому виду? К какому виду вы планируете привести программу?
  5. У вас в подчинении 2 программиста. Два проекта — проект А разрабатывался вами лично и находится на поддержке, над проектом Б прямо сейчас работают ваши программисты. Есть несколько простых задач на поддержку по проекту А, одна архитектурная задача по проекту Б, запрос на создание инструмента для техподдержки по проекту Б и текущие задачи по проекту Б, которыми ранее занимались ваши программисты. Как распределите задачи в вашей команде? Каков порядок задач? Аргументируйте.

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

Обобщённо, исходя из тех задач, под которые приходилось набирать людей, список может быть таким:

  1. Какими технологиями/языками/фреймворками вы владеете? Как и зачем осваивали?
  2. Опишите проекты (завершённые разработки), в которых вы принимали участие. Для чего они нужны? Кто ставил задачу? Почему выбраны такие технологии/фреймворки? Кто сейчас использует эти разработки?
  3. Какие профессиональные статьи/книги/курсы вы изучили за последние полгода-год?
  4. Какого рода задачи вам интереснее/ближе? Возможные варианты: разработка пользовательского интерфейса, разработка и реализация алгоритмов, «системное» программирование (в т. ч. интеграция с «железом»). Или это задачи из определённой (какой именно) предметной области?
  5. Какой характер работы над задачей вам комфортнее/ближе? В диапазоне от кодирования строго по чёткому ТЗ/проекту до самостоятельного исследования, подготовки и обоснования решения.

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

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

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

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

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

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

Это очень важный разговор, поскольку каждый человек уникален, и невозможно по одному сценарию составить представление о каждом. И всё же в рамках поставленной задачи — когда у нас всего пять вопросов — можно исходить из следующего списка:

  1. Какие показатели вашей работы ключевые, на ваш взгляд?
  2. Когда вы не знаете, как решить ту или иную задачу, как вы поступаете?
  3. Расскажите о самой сложной и самой интересной задаче, которую вы реализовали.
  4. Если бы важный для вас человек посоветовал больше не работать программистом, то кем бы вы стали?
  5. Расскажите о том, что вы больше всего любите делать в свободное время, и убедите меня делать это вместе с вами.

Конечно, все эти вопросы условны, как и сама ситуация. Главное для нас — понять, чем «горит» человек и к чему стремится. Мы уже много лет разрабатываем IT-решения для разных сфер бизнеса, одновременно у нас в работе более 70 проектов — как краткосрочных, так и постоянных. Для нас важно оценить желания и возможности каждого специалиста, чтобы поручить ему именно те задачи, которые он будет выполнять эффективно и с удовольствием.

  1. Опишите самую сложную или самую интересную задачу на вашей памяти и расскажите, как удалось её решить? Вопрос позволит понять с каким уровнем задач сталкивался кандидат или что ему было бы интересно делать. Также в процессе рассказа можно понять, насколько глубоко в этот процесс погружался сам разработчик. Может, он сделал только 1 % этой интересной задачи, а всё остальное доделали коллеги.
  2. Опишите в целом процесс разработки, который вы использовали на предыдущих проектах: как всё бежало, как осуществлялась сборка и доставка кода? Хотели бы его как-то поменять? Вопрос позволит понять, в каком флоу до этого работал человек. К чему он привык, знает ли актуальные технологии и способы разработки/доставки приложений.
  3. Как устроено ревью кода у вас в команде, есть ли что-то, что вы хотели бы изменить? Нам важно знать, как человек был вовлечён в процесс.
  4. В каких командах вы привыкли работать: с полной взаимозаменяемостью или с разделением обязанностей? Нужна ли фокусировка на ограниченном наборе задач или есть желание фуллстека.
  5. Какое у вас хобби, чем занимаетесь в свободное время? Банальный вопрос, который позволит понять, как человек зайдёт в коллектив в плане общих интересов.

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

Ещё один важный вопрос должен уточнять, какая область наиболее интересна специалисту — backend, frontend или fullstack. Так вы сможете определить набор его навыков.

В целом список вопросов может выглядеть следующим образом:

  1. В какой области и в каких языках программирования у вас наиболее сильная техническая экспертиза?
  2. Если бы вы вам предложили делать проект полностью с нуля, то какие бы технологии выбрали и почему?
  3. Какая версия языка программирования, на котором вы специализируетесь, вам нравится больше всего и почему?
  4. Как вы считаете, есть ли будущее у языка программирования, на котором вы специализируетесь?
  5. Кем вы себя позиционируете: backend, frontend или fullstack?

Если бы мне надо оценить профессионализм соискателя, ограничив себя пятью вопросами, то я задал бы следующие:

  1. В чём заключаются базовые принципы ООП? Объяснить, как их понимает соискатель, привести примеры.
  2. Что такое SOLID? Объясните, что вы понимаете под каждым принципом, а также поделись плюсами и минусами.
  3. Работа с сетью. REST, socket, HTTP запросы, ответы.
  4. Расскажите о методах отладки программы и поиске багов. Расскажите о своём опыте. Как вести отладку? Какие есть инструменты?
  5. Был ли опыт работы с базами данных? Назовите принципы работы и принципы построения запросов в БД, CRUD.

Для меня ключевые пять вопросов при определении уровня профессионализма это:

  1. Изложите суть алгоритма quicksort, mergesort.
  2. Что такое О-нотация сложности алгоритма, как ею пользоваться.
  3. Расскажите о проекте, которым вы гордитесь, кодом, которым вы могли бы похвастаться.
  4. Вы предпочитаете работать в формате «долго, но красиво» или «быстрый костыль»? Ваше видение как возможно соблюсти баланс.
  5. Подобрать заранее несколько неудачных примеров, нарушающих «Принцип единой ответственности» и спросить, что соискатель думает о качестве кода.

Итак, можно ли оценить профессионализм программиста несколькими вопросами и если да, то какими?

Нужно понимать, что никакие пять (три, десять) универсальных вопросов не позволят оценить профессионализм программиста. Более того, основываясь только на ответах на такие вопросы, можно совершить большую ошибку и отклонить хорошую кандидатуру. Поэтому не стоит забывать, что на программиста стоит посмотреть ещё и в деле.

Так или иначе, эксперты предложили своё видение вопросов, которые можно задать для оценки профессионализма. Местами они довольно разные, но некоторые общие моменты можно выделить:

  • для того, чтобы нащупать почву для дальнейшего разговора, а также определить уровень вовлечённости программиста, спрашивают о том, как он попал в профессию;
  • любят спрашивать про такие фундаментальные вещи как основы ООП, принципы разработки типа SOLID и т. д. Также могут спросить про алгоритмы и структуры данных или работу с сетями и БД;
  • спрашивают про самую сложную/интересную задачу, чтобы понять, с каким уровнем задач сталкивался кандидат или что ему было бы интересно делать;
  • могут задавать разные вопросы, чтобы проверить коммуникативные навыки и убедиться, что кандидат вольётся в коллектив. Как правило, это вопросы про хобби/интересы;
  • ещё могут попросить описать процесс разработки на последнем проекте, чтобы понять, с чем вы уже имели дело;
  • также могут спросить, какие последние книги вы прочитали или как вы узнаёте что-то новое в сфере разработки, чтобы определить, есть ли у кандидата тяга к знаниям.

Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики. Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.

Следите за новыми постами
Следите за новыми постами по любимым темам
44К открытий44К показов