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

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

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

В этой статье я расскажу о 4 темах, которые помогут вам усовершенствовать вашу работу:
1. Подготовка, планирование и понимание вашего проекта.
2. Реализация, выбор правильных библиотек и фреймворков. для вашего проекта.
3. Тестирование, чтобы убедиться, что все, что вы создаете, функционально и без ошибок.
4. Делать все возможное.
В основном я больше Node, Javascript / Typescript, Full- ориентирован на приложение стека, но я постараюсь быть как можно более общим, чтобы каждый извлек пользу из этой статьи.

Давайте начнем …

Подготовка

Во-первых, вам нужно несколько раз прочитать задание в формате PDF/doc, понять все функциональные требования. Убедитесь, что вы не пропустите ни одной части.

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

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

Понимание слабых и сильных сторон каждого решения даст вам много тем для обсуждения на собеседовании.

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

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

  • Должен ли он сохраняться в БД?
  • Если да, то может быть в памяти? какой тип БД мне следует использовать?
  • Если нет, могу ли я использовать жестко закодированные значения? Должен ли я сохранить его в файл?
  • Должен ли он быть обеспечен? Как сохранить учетные данные? Должен ли я использовать JWT?

Получение этих разъяснений от вашего интервьюера может сэкономить вам много времени.

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

Выполнение

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

Запишите все плюсы и минусы каждой библиотеки, которую вы выбираете. Будьте готовы к тому, что вас спросят: «Почему вы выбрали именно эту библиотеку, а не ту». покажите им, что вы думаете о каждом решении, которое принимаете, а не просто копируете и вставляете несколько случайных примеров GitHub.

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

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

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

Тестирование вашего кода

Тестирование вашего кода имеет важное значение. Начните с тестирования основного использования вашего приложения, а затем попробуйте такие случаи, как null, undefined, пустые объекты, ошибки, аутентификация и все, что, по вашему мнению, может сломать ваше приложение. Пусть ваши друзья протестируют его и получат от них некоторую информацию. Я уверен, что они обнаружат кое-что, чего вы не знали.
Как только вы это сделаете, вы должны начать писать свой кристально чистый файл Readme.
Удалите все кэши и модули, которые вы установили, и запустите свежая копия вашего приложения. убедитесь, что в файле Readme есть все, что необходимо для запуска вашего приложения, включая:
установку, использование, переменные среды, секреты как для вашего клиента, так и для сервера (если они у вас есть).
Я также настоятельно рекомендуем вам развернуть свое приложение на каком-нибудь бесплатном хостинге, таком как Netlify/GitHub pages/AWS/Firebase.
Я видел много проблем с реализациями некоторых кандидатов, отсутствующими переменными среды и использованием локально установленных баз данных, библиотек и инструментов.
Все это приведет к тому, что ваш рецензент не сможет протестировать ваш код. Его развертывание гарантирует, что ничего не пропало.

Пройти лишнюю милю

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

Вот ссылка на мой шаблон (React, Node.js).

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

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

  • Модульные/интеграционные тесты (также добавят качества и структуры вашему коду).
  • Проверка на стороне клиента.
  • Проверка на стороне обслуживания.
  • Правильная обработка ошибок (сервер + клиент) - вы должны реализовать ее на базовом уровне.
  • Библиотека компонентов (Material UI, ANT Design и т. д.)
  • Адаптивный дизайн продемонстрирует ваши навыки работы с интерфейсом.
  • Монорепозитории. Я бы рекомендовал использовать структуру монорепозиториев, так как будет проще создавать и запускать приложение из одной точки с меньшим количеством инструкций.
  • ORM
  • Переменные окружения — обязательно для серверов (при необходимости).
  • Typescript, в случае использования Javascript.

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

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

Удачи, спасибо за чтение.