Как взломать собеседование
Вряд ли о собеседованиях возможно сказать что-то принципиально новое. Но, по-моему, читать и писать о них всё равно полезно: их проводят очень по-разному, поэтому чем больше понимаешь, как смотрят на них разные люди, тем лучше можешь проявить себя с обеих сторон (и как кандидат, и как собеседующий).
Кирилл Розов @kirich1409, известный многим Android-разработчикам, на нашей конференции Mobius выступал с докладом «Как пройти архитектурную секцию собеседования». А заодно на той же конференции ответил Анне Жарковой @anioutka на более общие вопросы о собеседованиях в целом, не обязательно связанные с мобильной разработкой.
По ссылкам вы уже можете увидеть обе видеозаписи, а для Хабра мне захотелось ещё и выписать текстом отдельные тезисы из его ответов. Не потому что подписываюсь под каждым словом (с чем-то можно поспорить), а как раз потому что считаю полезным видеть разные точки зрения. Смело дополняйте в комментариях своими мнениями — так точек зрения станет ещё больше, неплохой способ провести вечер пятницы.
NDA
Бывает, кандидат говорит, что вся прежняя работа под NDA, поэтому он не может ни код показать, ни проект описать. С кодом нормальная ситуация, думаю, что большая часть индустрии у нас такая. И если требуется увидеть код человека, скорее всего, нужно дать тестовое задание.
А вот про описание проекта нужно понимать, что NDA обычно не распространяется на технологический стек. Если вы работали в аутсорс-компании над проектом крупной компании, вам может быть запрещено называть заказчика или раскрывать детали имплементации, но можно рассказать, что вы работали с web-сокетами или делали сложный UI на Jetpack Compose. То есть описать, какого рода вы задачи решали, а не что конкретно делалось в рамках этих задач.
И если вы разрабатывали внутренний мессенджер, то обычно можно в целом сказать «разработка закрытого корпоративного мессенджера для 10 000 пользователей», не конкретизируя дальше.
Расслабиться
Нужно понимать, что любое собеседование — это стресс для кандидата. Можно испугаться того, что попал в какую-то большую компанию, столкнулся с тем, что не знал раньше. Все мы люди. И поэтому одна из задач интервьюера — дать человеку расслабиться. Не только кандидат должен хорошо пройти собеседование, но и человек, который его собеседует, тоже должен сделать это грамотно.
Кандидат может не пройти собеседование, но не должен уходить с такими мыслями: «Блин, меня намеренно завалили, черт пойми что было, я вообще больше туда не сунусь ни ногой». Если попался плохой собеседующий, есть повод подумать в следующий раз, идти ли в эту компанию снова, и вообще как у них обстоят дела с культурой. Так что это негативно влияет на репутацию компании — она в таком не заинтересована.
В худших случаях на месте собеседуемого можно даже быть очень наглым и сказать: «Собеседующий был не очень, возможно ли мне повторить эту секцию, но с другим человеком? Потому что вышел неприятный казус». Такое, к сожалению, бывает.
Я, например, всегда советую собеседующим: если вы в плохом настроении (например, поругались с женой) и есть возможность отказаться от проведения собеседования, лучше отказаться. Потому что все мы люди, все носим негатив с собой и начинаем переносить его на других.
Беспристрастность
Ещё один важный аспект для собеседующих: не собеседуйте людей, которых вы уже знаете. Просто потому что с ними уже складываются какие-то отношения. Хорошие, плохие — не важно. Интервьюеру очень важно быть объективным и не привязываться ни к чему.
Приведу пример стремления к объективности: я стараюсь не отсматривать резюме кандидатов и их результаты на предыдущих этапах. Если кандидаты дошли до меня — значит, они нормальные. Почему так? Потому что увидев в резюме, что человек ранее поработал в Google, Spotify, Lyft или Яндекс, можно начать завышать ожидания от человека или думать «он уже знает, о чем я его спрошу».
Либо, наоборот, может быть ситуация, когда не видишь ничего солидного: «Блин, у него три года опыта — какой он Senior? Как этого сеньора могли на предыдущем этапе оценить? Как он за три года до сеньора дотянулся?».
Интервьюеру очень важно иметь этот скилл — не привязываться к результату и оценивать человека в изоляции за час-два собеседования. Чем меньше факторов на вас влияет, тем более объективным вы можете быть и дать честную, независимую оценку.
Грейды
Весёлая эпопея нашей индустрии в том, что уровни вроде «джуниор» или «миддл» очень субъективны и зафиксированы только в рамках одной компании. То, что в одной компании вы считаетесь senior, ещё ничего не значит. Если вы сумеете найти похожую компанию, там тоже будете сеньором, но в других у вас окажется другой уровень.
А ещё эти грейды меняются со временем. В мобильной разработке, которой я занимаюсь, каждые два-три года поднимается уровень базовых знаний, которые требуют от джунов. Лет 10 назад я заходил в индустрию с определённым объёмом знаний, а по текущей планке я с таким объёмом и близко не попал бы. По той планке, которая сейчас стоит для джунов, тогда можно было спокойно идти на мидла или даже сеньора. Потому что стек знаний был меньше.
Я знаю много компаний, которые говорят «мы нанимаем только сеньоров», и скептически к такому отношусь. В случаях, когда я собирал команду для проекта, порой брал кандидатов, которые по уровню знаний не вполне соответствовали ожиданиям, но активно хотели что-то изучать и шевелили головой: я видел смысл в них вкладываться.
Если мне нужен сеньор, но выбор из «живого мидла» и «ленивого сеньора», я лучше возьму мидла. У него будет высокая мотивация, а сеньор все знает, но ему особо ничего не нужно: «У меня тут пять офферов, че мне ваш этот оффер?» Он не будет ценить возможность.
Всегда нужно помнить, что собеседование — это не только процесс оценки технических знаний, но и проверка вашей совместимости. Сработаетесь вы или нет? Есть ли компании смысл в вас вкладываться? Найм любого сотрудника, независимо от уровня — это инвестиция. Испытательный срок зачастую проходит для компании с небольшим выхлопом, если не в минус. Особенно, если компания крупная. Поэтому очень важно не только какой вы специалист, но и какой вы человек — и тут сеньор легко может проигрывать мидлу.
«Философы»
Есть люди, которые на вопрос «как что-то сделать» философски отвечают «есть куча способов», но не описывают по-настоящему детально ни один. Вообще философия — это хорошо, а способов действительно много. Но в IT нужны практики, которые могут взять и решить проблему. Хорошо, что он знает о существовании разных способов, но нужно уметь еще понять и применить их. Потому что можно прочитать много книг, но ничего не понять в них.
Свой GitHub-аккаунт
Мы особо не смотрим на наличие у кандидата GitHub. Да, на собеседование может прийти человек, который сделал популярный опенсорс-проект, которым ты сам пользуешься или хорошо его знаешь. Но это само всё подтверждает, там уже и не нужно смотреть на GitHub.
А предоставленный GitHub с какими-то своими разработками еще нужно подтвердить: как проверить, что человек действительно сам написал весь этот код, а не просто натренировался на чужом? Сам факт публикации репозитория ещё ни о чём не говорит. Требуется все равно как следует поговорить с человеком по этому коду. А если в любом случае подробно обсуждать код, тогда не так важно, на гитхабе он или нет.
Алгоритмы
Многие ругаются на «в компаниях вроде Google требуют алгоритмы».
По-моему, каждая компания может себе позволить проводить интервью так, как она это хочет и с тем, что она считает важным требованием для кандидатов. Понятно, что какой-нибудь Google или Amazon старается проверить всё, и они могут себе это позволить — у них много кандидатов, они стараются выбрать лучших. Да, к сожалению, порой это выкидывает людей, которые действительно классно знают технологии. Но таков процесс. Компания его приняла, какие-то у них причины были — может, это исторически сложилось. Я отношусь к этому нормально, если для них это имеет хоть какой-то прикладной смысл и хоть какую-то важность для оценки кандидата.
Но вот конкретно в мобильной разработке, которой я занимаюсь, как много людей применяет это на практике, кому по-настоящему требуется разбираться в алгоритмах и структурах данных? Только тем, кто глубоко занимается оптимизациями, а таких немного. Если берёшь человека ваять обычные клиент-серверные приложения, вряд ли ему это часто пригодится. А собеседование в моем понимании должно оценивать прежде всего именно те навыки, которые важны, и в которых человек проведет большую часть своего времени. Остальное может быть лишь какими-то дополнительными факторами.
Архитектурная часть собеседования
Идея доклада «Как пройти архитектурную секцию собеседования» возникла так. Я провёл немало собеседований в довольно практико-ориентированном формате, не требуя каких-то сверхъестественных вещей вроде идеального знания алгоритмов, структур данных или какого-то сферического коня в вакууме. И получилось так, что зачастую кандидаты не могут нормально пройти архитектурную секцию.
Не потому, что они ничего не знают. Что-то могут что-то нарисовать и рассказать. Но мы довольно легко можем закодить какой-нибудь Android-фрагмент, взять Compose в качестве UI, ViewModel, сделать слои и все прочее. А вот грамотно и красиво это отобразить не все могут: когда нужно показать не то, что ты умеешь закодить, а то, что ты умеешь отобразить и понимаешь связи. И возник такой крик души: «Всё, мне надоело на это смотреть, пора выйти и рассказать, как надо сделать».
Минутка рекламы напоследок
Если в этом посте вас заинтересовало, как пройти архитектурную секцию собеседования по мобильной разработке — вероятно, вам будет интересна и наша весенняя конференция Mobius, которая пройдёт в мае.
А если мобильная разработка для вас нерелевантна, так что вы дочитали из-за собеседований в целом — посмотрите на весь наш весенний сезон, в него входят и бесплатный онлайн-фестиваль TechTrain, и конференции по Java/JS/C++/тестированию.