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

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

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

Вы являетесь частью команды

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

Привлекайте интервьюеров следующими способами:

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

Помните о времени, используйте меньше слов и сразу переходите к делу.

У тебя нет времени быть умным

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

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

Время — ценный ресурс, особенно во время интервью; не тратьте его на исправление угловых корпусов.

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

«Мне не нужно думать о тестировании»

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

Создайте интерфейсы, а затем задействуйте их в конкретном классе. Это упрощает использование макетов, подделок или любых других тестовых двойников, которые могут быть уместны.

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

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

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

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

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

Стандартная библиотека — ваш друг

Упражнения составлены таким образом, чтобы вы нашли эффективное решение за отведенное время. Экономия времени благодаря знакомству со стандартной функцией или библиотекой также демонстрирует ваше знакомство с платформой или системой. Я видел, как инженеры тратили свое время на повторную реализацию функций, которые являются частью стандартной библиотеки или пакета. В качестве примера приведен файл JSON с ключами в змеином регистре. В Swift на iOS есть JSONDecoder(), в котором есть специальное поле для бесплатного указания преобразования ключей из змеиного в верблюжий. Некоторые кандидаты потратили время и усилия, пытаясь добиться точно такого же результата.

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

Заключительные мысли

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

Вы можете быть уверены, что сделали все возможное, следуя совету.