Техсобесы — это просто, но есть нюанс…

Привет, Хабр. Меня зовут Дима и я разработчик, тимлид и по совместительству наставник на курсе «Мидл Python-разработчик» в Практикуме.

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

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

Г-г-главное н-н-не бояться

1076fd769bc904e5fabf1684ba09da31.png

Начать хотелось бы с того, что я считаю самой частой «ошибкой» начинающих искателей приключений работы, — это страх отказа. 

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

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

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

Прохождение собеседований — это такой же навык, как и разработка. Как и любой навык, он развивается и укрепляется благодаря практике. Ходите по интервью, прокачивайте свои умения. Также вы можете тренироваться в рамках mock-interview — для этого есть специальные сервисы. Например, pramp.com (на англ. языке).

Снова в школу

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

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

Будьте готовы ответить на следующие вопросы как себе, так и интервьюеру:

  • У вас есть необходимые навыки? Вы можете их продемонстрировать? Они отражены в вашем резюме?

  • У вас есть опыт в задачах, которыми вы потенциально будете заниматься? Может, у вас есть опыт в смежных отраслях? Или в той же отрасли, но на другой позиции? Это указано в вашем резюме?

  • Знаете ли вы о компании и чем она занимается? Что вы можете сказать о рынке и об отрасли?

Записывать ответы на эти вопросы не требуется, хоть и не возбраняется. Будет достаточно сформулировать их заранее, чтобы не растеряться в моменте. Предупреждён — значит вооружён. 

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

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

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

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

Собственно сабж

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

  • Разговоры о вашем опыте

  • Проверка технических знаний

  • Решение задач

  • Вопросы интервьюеру

Рассмотрим каждый из них подробнее.

Опыт, сын ошибок трудных

Разговоры об опыте могут иметь разный формат: может, вас попросят рассказать о себе, а может, о практике применения той или иной технологии. 

Тут вам и пригодится «домашняя работа»: вы уже знаете, какие навыки требуются в вакансии, какой опыт релевантен для компании и что от вас ожидают. 

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

f2643c7e574dc4396182357822cc3f26.png

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

Например в EdTech может быть интересен ваш опыт преподавательской деятельности. В компании, создающей аналитическую платформу, — опыт в маркетинге. Если нанимающий отдел придерживается высоких стандартов качества кода, то им будет интересен ваш опыт разработки unit/e2e-тестов на позиции QA.

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

Назвался груздём — полезай в кузов

Проверка технических знаний подразумевает набор правил, которым стоит следовать для повышения ваших шансов:

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

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

Владейте базой. Без этого никак. Как правило, в любой области знаний есть джентльменский набор, без которого дальнейший разговор в принципе не заладится. 

Пишу эту статью в контексте Python бэкенд-разработчиков, потому привожу возможные вопросы именно для Python:

  • Что такое декоратор? Как он устроен? Может ли он принимать на вход атрибуты?

  • Генератор и итератор: что это такое, в чём разница?

  • Любимый многими вопрос: что же такое GIL? Как он работает, зачем нужен, что с ним не так?

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

Подготовиться к вопросам просто и одновременно сложно. Просто, потому что достаточно проштудировать гугл по запросу »%my_field% interview questions». Сложно, потому что иногда спрашивают о деталях, которые познаются только на собственных набитых шишках или требуют не просто знания, а какого-то глубинного понимания дебрей вашей области. Опять же, ничего страшного, если вы чего-то не знаете, — успокойтесь и просто порассуждайте на тему.

Всё это касается не только выбранного языка разработки, но и всех навыков и технологий, указанных в вашем резюме.

Нельзя просто так взять и решить задачу

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

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

Схема действий, которую я и многие другие используют на алгоритмических сессиях:

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

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

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

  • Напишите код. Есть разные стили написания: не надо стараться писать идеально, но и нечитаемо тоже не стоит — придерживайтесь хотя бы минимальных стандартов качества. Код должен быть достаточно выразительным, чтобы незнакомый человек (в этом случае интервьюер) смог его прочесть. Хорошим тоном будет проговаривать вслух, что именно вы пишете и как это соотносится с алгоритмом.

  • Убедитесь, что код рабочий. Как только закончили писать, не спешите кричать «Готово!». Остановитесь, испытайте своё творение, проверьте в голове на паре примеров краевые случаи, выходы за пределы массивов и прочее.

9daa53ca07658f6e13851a6a8ceea677.png

Подготовка к решению задач. Ничего нового тут не скажу: LeetCode вам в помощь. В основном обратите внимание на easy и немного на medium для закрепления отдельных топиков. 

Пристального рассмотрения заслуживают следующие темы: типы данных, в первую очередь словари; немного графов; основы динамического программирования и обязательно работа со строками. Благо, на LeetCode есть замечательные подборки. 

Набор правил, которыми я пользуюсь для подготовки к алго-собесам:

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

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

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

Себя показать, на других посмотреть

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

Несколько советов:

  • Задавайте общие вопросы — не частные. Вместо «Используете ли вы тесты?» лучше спросить: «Как устроено тестирование на проекте?». Это позволит интервьюеру раскрыть больше деталей и нюансов. В целом процессы (ревью, тесты, agile, ci/cd и прочие) — это безграничная тема для общения.

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

  • Интересуйтесь продуктом. Подумайте, что бы вы хотели узнать о продукте как потребитель и о его внутренней кухне как специалист. Как устроен продукт? Какое место он занимает на рынке? В чём его отличие от конкурентов? Задать подобные вопросы — это редкий шанс. Главное, интересуйтесь, а не критикуйте — вы здесь не за этим :)

  • Узнайте, как устроена работа в компании. Вспомните свои боли на других проектах. Постарайтесь узнать, как всё устроено, но не сравнивайте. Мало кто любит выпады «А у нас было так-то…» — лучше спросить: «А почему у вас именно так, а не этак?»

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

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

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

TL; DR

Внимательно читайте вакансию и анализируйте результат собеседования. Говоря о себе, фокусируйтесь на релевантном для слушателя. Будьте готовы ответить за обозначенный опыт. Задачи совсем не про код. Задавайте вопросы, интересуйтесь. И помните — «г-г-главное  н-н-не бояться». Успехов!

7be2ba7e472f52965003c8749fce9c4d.png

© Habrahabr.ru