Карьера

Как пройти тест на кодирование на дому

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

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

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

1. Внимательно прочтите инструкции.

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

Прочитав инструкции, подумайте о деталях реализации и составьте план: что реализовать в первую очередь, какие сценарии тестировать, каких крайних случаев ожидать и т. Д.

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

2. Используйте Git

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

По моему опыту, 10–15 коммитов должно быть достаточно. Однако, если вы потратите больше времени на полировку своей реализации и зафиксируете код 50 раз, это не станет проблемой.

3. Сначала реализуйте базовый сценарий.

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

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

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

4. Используйте тесты

Добавьте тесты, чтобы убедиться, что ваш код работает должным образом, обрабатывает неожиданный ввод и крайние случаи. Используйте стандартные библиотеки и фреймворки для тестирования, такие как RSpec для Ruby или Jest для Javascript.

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

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

5. Используйте TDD

Лучший способ создать хорошо протестированный код - использовать разработку через тестирование. Даже если вы не освоили эту практику, все равно попробуйте ее использовать.

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

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

6. Напишите читаемый и поддерживаемый код.

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

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

Еще один критерий удобочитаемости - спросить себя - сможете ли вы понять этот код и исправить в нем ошибку в 2 часа ночи.

7. Выполните моделирование предметной области (если применимо)

Если вы используете объектно-ориентированный язык программирования для реализации теста, вам следует моделировать основные сущности как классы. Например, если вы реализуете этот тест кодирования - https://codereview.stackexchange.com/questions/96181/robot-toy-simulator, то вы можете захотеть ввести как минимум классы Robot и Table.

8. Правильно используйте шаблоны дизайна.

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

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

9. Используйте эффективные алгоритмы и структуры данных.

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

Показатели реализации могут быть одним из критериев оценки. Интервьюеры могут захотеть узнать, сможете ли вы написать эффективный код. В идеале вы должны понимать нотацию O (n) и уметь оценивать сложность алгоритма. Например, если он растет линейно, логарифмически или экспоненциально с увеличением размера набора данных.

10. Не используйте числа с плавающей запятой для денег

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

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

11. Используйте стандарты и передовые методы сообщества.

Применяйте текущие передовые практики и стандарты, широко используемые сообществом разработчиков, использующих язык программирования и / или структуру, в которой вы реализуете тест кодирования. Лучше всего запускать вашу реализацию с помощью инструмента анализа кода (ESLint, rubocop и т. д.), чтобы проверить качество его кода и исправить ошибки и предупреждения.

12. Избегайте комментариев в исходном коде.

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

13. Используйте основные инструменты, библиотеки и методы.

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

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

14. Пишите расширяемый код, но не переусердствуйте

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

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

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

15. Реорганизуйте код перед отправкой

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

Взгляните на свой код по-новому. Если что-то не так - исправьте.

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

16. Убедитесь, что ваш код работает на разных компьютерах

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

Если у вас есть другой компьютер, на котором вы можете попробовать запустить свой код, вы можете его использовать. В качестве альтернативы вы можете запускать тесты для своей реализации на сервере CI. Раньше я публиковал свой код на GitHub и подключал репозиторий к Travis CI, который бесплатен для проектов с открытым исходным кодом. Если тесты проходили на разных версиях языка программирования (я использовал Ruby), это было признаком того, что я могу безопасно отправить его интервьюерам. Вероятно, вы сможете сделать то же самое для многих других языков программирования.

17. Напишите файл Readme

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

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

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

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

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