5 советов для прохождения технического собеседования

Перевод статьи Zhia Hwa Chong (разработчика в Twitter) “5 things you need to know in a programming interview”.

Техническое собеседование

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

Это далеко не полный список вопросов, все время всплывавших в моей голове:

  • «Нужно ли проговаривать свои действия, пока пишешь код?»
  • «Как часто нужно обращаться к интервьюеру?»
  • «О боже, я забыл приписать значение моей переменной! Все пропало?!»
  • «Что интервьюер думает по поводу моего ответа?»
  • «Это ОК, если я сделаю так?»

…и список можно продолжать бесконечно…

Это очень пугающий опыт. Это очень сложно. Ужасно тяжело действовать, когда каждое твое слово и все, что ты пишешь, внимательно отслеживается.

Вы проходите собеседование, чтобы получить свою работу мечты, работу, о которой вы мечтали с 12 лет. А сводится все к тому чтобы за 60 минут произвести впечатление на человека, которого вы в глаза не видели до этого.

Это действительно трудно.

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

Белая доска

1. Всегда все продумывайте наперед

Вам часто придется слышать от интервьюеров дополнительный вопрос: «ОК, я думаю, это хорошо. А как бы вы улучшили этот код?»

Это убийственный вопрос. Потому что задан он не для того, чтобы заполнить паузу. Интервьюер пытается узнать, что вы думаете:

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

Вы не получите оффер только потому, что успешно решили проблему. Например, глядя на этот отрывок кода, можете ли вы сказать, что он делает? Как бы вы его улучшили? Что в этом коде может привести к проблемам? Поделитесь своими мыслями в комментариях!

Отрывок кода
Код на Python, чтобы делать Х

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

Что это значит применительно к сессии программирования

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

2. Существует не единственный вариант ответа

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

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

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

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

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

  1. Поместить все узлы в массив и затем отсортировать их. Потом создать указатель и связать все элементы в массиве.
  2. Слить их, используя действия с указателями. Сравните, отслеживая меньший из них, а затем возвратите результаты в конец.

Какие другие подходы вам пришли на ум?

3. ООП еще живо

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

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

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

Легко написать код, понятный компьютеру. Писать код для людей тяжело.

4. Поработайте над своим резюме

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

Ваше резюме это ваша визитная карточка. Это первое впечатление о вас, которое получит компания.

Если вы только начинаете поиск работы, то первое, что нужно сделать, это подготовить отличное резюме. Это дело №1 и, возможно, самое легкое. Однако люди, занимающиеся поиском работы, часто не уделяют ему должного внимания.

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

5. Общайтесь с интервьюером

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

Я не отношусь к людям, которые могут говорить и думать одновременно. У некоторых есть дар думать вслух, но я этим даром не обладаю.

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

Техническое собеседование выявляет не только навыки программирования, но и soft skills. Отсутствие как одного так и другого вида навыков губительно. О том, как разработчику развить свои soft skills, я написал отдельную статью.

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

Что это значит применительно к сессии программирования

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

6. [Дополнительный] Используйте абстракцию

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

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

Что это значит применительно к сессии программирования

Давайте сравним эти два отрывка кода:

Traverse a matrix
Traverse a matrix

Мне кажется, что правая колонка выглядит намного чище и понятнее. Если потребуется, я могу потом потратить время на реализацию getNeighbors или isEmpty.

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


[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх