16-17 июля в 95 км от Москвы пройдёт конференция для python-разработчиков PYCON RUSSIA. Традиционно мы делаем серию интервью с докладчиками и организаторами.
В первом посте мы спросили тимлидов четырёх разных компаний, на что они обращают внимание во время собеседований, какие ошибки допускают кандидаты, как понять, что человек подходит в команду, и чего никогда нельзя делать во время интервью. На вопросы ответили: CTO в компании «Точка» Данила Штань, руководитель разработки в ЦИАН Михаил Юматов, руководитель группы Python-проектов в Rambler&Co Олег Чуркин и руководитель PyCharm Community в JetBrains Андрей Власовских.
— Как вы поймёте, что джуниор может быстро учиться и развиваться?
ДШ: Никак, просто даю шанс и смотрю, что происходит.
МЮ: У джуниора уже должны быть какие-то плоды его стремления учиться и развиваться — pet project'ы, багаж изучаемых технологий и т.п. Вот о них и поговорим.
ОЧ: Чтобы понять, насколько кандидат мотивирован на саморазвитие, я обычно задаю вопросы про самые сложные задачи, с которыми человек уже сумел столкнуться и слушаю, как он их в итоге решал. Чем интереснее рассказ, тем быстрее будет обучение.
АВ: Я обращаю внимание на сочетание самостоятельности, увлечения программированием и готовности к командной работе. Если кандидат ещё учится, то можно взять его на летнюю стажировку или семестровую практику, чтобы больше узнать о человеке и его перспективах.
— Какие у вас критерии отличия миддла от сеньора? Как вы проводите эту градацию уровней опытности разраба?
ДШ: Никаких, это всё бред для потокового найма, а я не люблю потоковый найм.
МЮ: Сеньор очень хорошо знает применяемые технологии (их сильные и слабые стороны, реализацию), отслеживает жизнь компонент на бою и проактивно выходит с предложениями по оптимизации и/или решению проблем с ними. Способен разработать архитектуру приложения и найти быстрые нестандартные решения в критической ситуации, самостоятельно вести проекты. Начиная с этого уровня, problem solving, умение работать с заказчиком, умение самостоятельно принимать решения и быстро переключать контекст между задачами — это обязательные требования. Автономен в решении поставленных задач, понимает, какая цель достигается в рамках решения задачи и способен найти оптимальный путь решения задачи. Всегда принимает на себя ответственность за качество выполнения задачи и названные сроки.
ОЧ: Сеньор должен хорошо разбираться в архитектуре веб-приложений и обладать достаточными личностными качествами для руководства командой. С сеньорами техническое интервью обычно переходит в дизайн-интервью, на котором и выясняется уровень.
АВ: Сеньора отличает большой опыт принятия взвешенных архитектурных решений, умение руководить джуниорами и способствовать их росту.
— На что вы смотрите при выполнении тестового задания?
ДШ: Никогда не даю тестовые задания, максимум алгоритм написать, просто чтобы понять какие-то базовые вещи про подготовку человека.
МЮ: Тестового задания у нас нет, но на собеседовании обычно что-нибудь с кандидатом проектируем. Смотрю на то, как человек рассуждает, насколько глубоко продумывает решение, как относится к остальным невидимым участникам процесса.
ОЧ: В первую очередь на его корректность. Если дефектов в коде нет, то большое внимание уделяю правильному выбору алгоритмов, умелому использованию инструментов, читаемости и красоте кода.
АВ: Помимо корректности и выбора подходящих алгоритмов, смотрю на соответствие кода лучшим практикам software engineering: разумная структура проекта, тесты, документация и т.д.
— Ваша любимая логическая задачка, которую вы задаете на собеседовании?
ДШ: Отсутствует, логические задачки на собеседованиях — это изобретение не очень компетентных HR. Нормальным людям и без этого есть, о чём поговорить с кандидатом.
МЮ: Нет такой :)
ОЧ: Есть неотсортированный список натуральных чисел от 1 до N, числа не повторяются. Из списка извлекли одно число. Необходимо определить какое за O(N) по времени и O(1) по памяти.
АВ: Любимой логической задачи нет, есть несколько алгоритмических. Конкретных называть не буду, но хорошая алгоритмическая задача позволяет придумать несколько ответов: от простых и неоптимальных до специфических, дающих выигрыш при определённых условиях.
— Наличие каких знаний/опыта необходимо и достаточно, чтобы попасть в вашу команду? И на какие «огрехи» и несовершенства вы спокойно закрываете глаза?
ДШ: Профильных знаний и профильного опыта. Желательно, в формате «сам себе режиссер».
МЮ: Про достаточные условия не скажу, а необходимые — пожалуйста. Нужно неуёмное желание уменьшать количество «магии» вокруг. Как результат — понимание используемых технологий, их устройства и работы. В том числе и Python’а.
Готовы закрывать глаза на знание используемых нами специфичных технологий. По ряду soft skills — тоже. Научим.
ОЧ: Хорошие знания Python (структуры данных, декораторы, интеграторы, генераторы, классы и наследование), понимание сложности алгоритмов, базовые знания РСУБД и *nix. Проактивность и желание развиваться.
Никогда не просил кандидатов развернуть бинарное дерево.
АВ: Мы разрабатываем инструменты разработки, поэтому интерес и знания в области языков программирования, компиляторов, статического анализа являются большим плюсом. В нашей работе требуется знание сразу нескольких языков. Если кандидат не знает одного из них, но отлично разбирается в другом, я думаю, он сможет разобраться и в не знакомом ему языке.
— Как вы определяете, что человек не впишется в вашу команду? Есть ли какие-то маркеры (кроме профессионального несоответствия требуемому уровню в вакансии)?
ДШ: Смотрю на soft skills, манеру общения, скорость реакции на вопросы. Не могу сказать, что есть какие-то формальные маркеры. Причем профессиональные скиллы часто отходят на второй план, если человек хороший.
МЮ: Если человек умеет слушать других, учитывает чужое мнение, ответственен, дисциплинирован — скорее всего, мы сработаемся.
И мы за честность. Никаких интриг, слухов, манипуляций, сплетен. Если на собеседовании видим хоть какие-то признаки, сразу нет. Извините, это не про нас.
ОЧ: Самым важным личностным качеством, на мой взгляд, является адекватное восприятие обратной связи. Если на собеседовании становится понятно, что кандидат слишком эмоционально реагирует на критику своей работы, то вряд ли он впишется в команду.
АВ: Может, это прозвучит очевидно, но человек вряд ли впишется в команду при слабых soft skills.
— Самые частые ошибки кандидатов на собеседовании? Как поведенческие, так и технические.
ДШ: Хвастаться. Заводить разговор о том, в чём плохо разбираешься. Считать собеседника идиотом.
МЮ: Опоздание на собеседование. Не люблю, когда опаздывают, это первый признак будущих проблем с дисциплиной.
Иногда кандидаты начинают рассказывать что-то, о чём их не спрашивал. Это далеко не всегда к месту — создается ощущение, что кандидат старается сбить с толку.
ОЧ: Самые частые ошибочные поведенческие паттерны: «интервьюировать интервьюера», замыкаться в себе после первого неправильного ответа, иногда кандидаты начинают уверенно говорить о теме, в которой не разбираются, и после первых неудобных вопросов становится стыдно :)
Со стороны технического интервью: почти никто не знает про frozenset и только небольшой процент кандидатов смог написать параметризированный декоратор.
АВ: Порой кандидаты переоценивают уровень своих знаний: начинают уверенно рассказывать о чём-то, но когда дело доходит до конкретики, могут «поплыть». Некоторые ничего не знают о компании или о продукте, который будут разрабатывать, хотя информация публично доступна и напрямую касается их ближайшего будущего.
— Какой совет вы бы дали соискателю на собеседовании?
ДШ: Не пытайтесь «продать» себя. Показывайте свой уровень честно, демонстрируйте широкий кругозор и желание (и умение) учиться и разбираться в незнакомых проблемах.
Это важнее, чем список «технологий» или «участия в проектах» в резюме.
МЮ: Всегда отвечай честно. Если чего-то не знаешь, стоит прямо об этом сказать. Не набивай себе цену — это видно.
ОЧ: Не теряться, размышлять вслух, потренироваться писать код на бумаге.
АВ: Для многих собеседование — это небольшой стресс: легко запутаться, забыть что-то. Старайтесь рассуждать вслух. Если вы не понимаете условия или ограничения задания, проговорите это вслух, задайте вопросы.
Еще можно почитать советы Остина Белкейка из Майкрософт о том, как легко пройти собеседование
16-17 июля со всеми ребятами можно будет познакомиться на конференции PyConRu. Андрей Власовских объяснит, что может Python на микроконтроллерах, Михаил Юматов расскажет, какие есть инструменты для слежения за производительностью веб-приложений, Олег Чуркин расскажет, какие требования к процессу разработки и инфраструктуре проекта необходимо выполнить, чтобы относительно быстро, эффективно и вполне безболезненно попробовать микро(сервисы). Данила Штань будет ведущим и модератором. Итоговая сетка со всеми докладами готова.
Спасибо нашим спонсорам, которые делают конференцию возможной: золотому спонсору — компании Adcombo, серебряным спонсорам — Rambler&Co и ДомКлик, бронзовому спонсору — MediaScope. Спасибо за поддержку партнеру энергии и хорошего настроения компании ЦИАН и Python Software Foundation.