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

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

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

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

Внешний вид Git репозитория

Как говорится - "Встречают по одежке, а провожают по уму". Над этой одежкой мы и поработаем в первую очередь.

git
git

README.md

Первое, что мы видим, попадая на страницу репозитория - структуру файлов и Readme File, если он есть. И что же можно с ним такого сделать ?

  1. Если там есть какой-то базовый темплейт, например от бутстрапа проект с помощью различных CLI, замените его на самописный и укажите там требования к системе, которые нужны, чтобы развернуть ваше тестовое задание, например версию python/node и как нужно правильно разворачивать ваш проект.

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

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

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

Оформление commit messages в Git

Commit messages вошедшие в историю :)

Pust' u vas ne bolit zhivot
Pust' u vas ne bolit zhivot
Poprawki
Poprawki

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

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

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

Самый простой способ сделать свои commit messages красивыми и содержательными - использовать Conventional Commits - тык. Они помогут вам кратко и лаконично описывать свои изменения и тем самым сделать историю более информативной.

Удаление лишних файлов из репозитория

Очень часто встречается история, что кандидат забывает удалить папку dist/build или какие-то тестовые файлы, системные файлы(например .ds_store на mac).

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

Использование Git flow или любой другой модели ветвления

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

Deploy тестового задания

Если есть возможность задеплоить ваше тестовое задание, то обязательно стоит это сделать:

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

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

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

Код

Тут все зависит от конкретного языка программирования, но существуют базовые правила, которые должны соблюдаться всегда:

  • Соблюдение определенных style guides и паттернов принятых в технологии, например google style guide, код должен быть отформатирован и выглядеть опрятно.

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

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

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

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

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

Соответствие вашего тестового задания техническому заданию

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

Обязательно проверяйте, что вы ничего не забыли. Если есть какие-то вещи, которые вы осознанно не сделали/сделали иначе, обязательно опишите это в readme/комментариях, чтобы проверяющий понимал, что вы не просто забили. Также хорошей практикой является хотя бы описать ход решения задач, которые вы не сделали.

Итого

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


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

Комментарии (13)


  1. VladimirFarshatov
    25.11.2023 15:15
    +3

    Когда коту нечего делать, он лижет яйца.


    1. Skykharkov
      25.11.2023 15:15
      +3

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


      1. Dragonek Автор
        25.11.2023 15:15
        -5

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

        Как бы это не казалось абсурдно, но большинство из того, что я здесь описал, многие разработчики не делают, доходит до абсурда, что люди скидывают тестовое архивом или в их коммитах сообщения по типу 1, 2, 3 и тд ну и мое любимое из 5 требований по тз выполнено 1. Собственно поэтому мне и захотелось это подсветить.


        1. Hungryee
          25.11.2023 15:15
          +1

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


  1. saboteur_kiev
    25.11.2023 15:15
    +1

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


    1. Dragonek Автор
      25.11.2023 15:15
      -1

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

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


      1. saboteur_kiev
        25.11.2023 15:15

        Какое же это тогда тестовое, если оно уже заранее сделано (и докажи что тобой)


        1. Dragonek Автор
          25.11.2023 15:15
          -2

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

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


          1. saboteur_kiev
            25.11.2023 15:15

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


  1. yuleeja
    25.11.2023 15:15
    -2

    ????????????


  1. profFortran
    25.11.2023 15:15
    +13

    Лучший способ сделать тестовое - не делать тестовое, поскольку гарантий оно не даёт и за него не платят. Бесплатная бесполезная работа, в общем. Мартышкин труд, как говорится. Жаль, что очень многие молодые-активные-креативные "Рога и Ко" это до сих пор практикуют, как и стопицот собеседований со всеми, кроме, наверно, уборщицы, и алгоритмические задачи.

    Хотя, перефразируя известное изречение, "жрать захочешь - не так раскорячишься".


  1. panzerfaust
    25.11.2023 15:15
    +4

    Это связано с тем, что чаще всего предлагаемые задачи рутинные и отстраненные от реальности

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


    1. Dragonek Автор
      25.11.2023 15:15
      -3

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