Тестовое задание, пожалуй, является самым неприятным этапом собеседования. Это связано с тем, что чаще всего предлагаемые задачи рутинные и отстраненные от реальности. Кроме того, компании часто предоставляют тестовые задания множеству кандидатов, а когда один из них принимает оффер, другие делают тестовые задания в стол, из-за чего еще больше не хочется их делать, тем не менее иногда их приходится делать.
Просматривая свои старые тестовые задания и тестовые задания кандидатов, которых я собеседовал, я увидел много однотипных ошибок и решил написать статью, о том, какие чаще всего встречаются ошибки и как их можно избежать.
Почему это важно? Сейчас на рынке начинающих разработчиков довольно большая конкуренция, и поэтому с каждым годом становится все сложнее выделяться. Эти простые правила помогут вам сделать свое тестовое задание чуточку лучше и, возможно, получить оффер мечты.
Статья в первую очередь рассчитана на начинающих разработчиков, однако может быть и опытные разработчики, смогут найти в ней что-то интересное.
Внешний вид Git репозитория
Как говорится - "Встречают по одежке, а провожают по уму". Над этой одежкой мы и поработаем в первую очередь.
README.md
Первое, что мы видим, попадая на страницу репозитория - структуру файлов и Readme File, если он есть. И что же можно с ним такого сделать ?
Если там есть какой-то базовый темплейт, например от бутстрапа проект с помощью различных CLI, замените его на самописный и укажите там требования к системе, которые нужны, чтобы развернуть ваше тестовое задание, например версию python/node и как нужно правильно разворачивать ваш проект.
Хорошим тоном будет простенький итог вашей работы. Это поможет проверяющему убедиться, что вы выполнили все требования, а также может помочь в будущем при демонстрации проекта кому-либо еще. Например вы будете показывать этот проект, вместо другого тестового, которое предлагает сделать вам другая компания.
Кратко опишите, что не было сделано и почему, чтобы проверяющий не лазил и не искал несуществующего кода.
Красиво оформите заголовки/ссылки и тд в соответствии с правилами markdown, если вы не дружите с markdown разметкой, можно использовать редакторы с WYSIWYG controls, чтобы упростить себе жизнь.
Оформление commit messages в Git
Commit messages вошедшие в историю :)
Я считаю это просто легендарно. Однако когда вы делаете тестовое задание, это - первое о чем стоит позаботиться, потому что проверяющий может зайти в историю коммитов, посмотреть как вы ведете работу, как вы именуете коммиты, что вы в них добавляете и сформировать из этого какое-то общее представление о вас, в качестве командного игрока(мы же все делаем проекты с помощью систем контроля версий).
Тут всегда есть резонный вопрос: зачем мне чистая история коммитов, если я один в проекте и все знаю ?
Ответ прост: структурный подход это хорошо. Даже в небольших проектах сохранение четкой истории коммитов может оказаться полезным. Проекты имеют свойство масштабироваться и мы не всегда помним, когда и что делали, а также к проекту может присоединиться еще кто-то и ему будет проще работать с проектом, в котором у commit messages есть какая-то семантика.
Самый простой способ сделать свои commit messages красивыми и содержательными - использовать Conventional Commits - тык. Они помогут вам кратко и лаконично описывать свои изменения и тем самым сделать историю более информативной.
Удаление лишних файлов из репозитория
Очень часто встречается история, что кандидат забывает удалить папку dist/build или какие-то тестовые файлы, системные файлы(например .ds_store
на mac).
В репозитории не должно быть никаких лишних файлов. Всегда создавайте файл .gitignore и добавляйте в него все файлы, которые не нужны в репозитории.
Использование Git flow или любой другой модели ветвления
В работе часто применяются различные модели ветвления. ИМХО для тестового это в большинстве случаев будет оверхед, но если вы хотите выделиться или просто хотите сделать все по красоте, то это отличный способ, почитать можно вот тут - тык, тык1.
Deploy тестового задания
Если есть возможность задеплоить ваше тестовое задание, то обязательно стоит это сделать:
Экономия времени проверяющего(тем самым вы повысите его лояльность, код можно посмотреть и в репозитории, а клонировать репозиторий и разворачивать его у себя никто не хочет, особенно, когда тестовых много).
В дальнейшем вы сможете демонстрировать готовый продукт, например на другом собеседовании.
Можно выделиться на фоне других кандидатов, которые не задеплоили свое тестовое(хоть и не большой, но плюсик в карму).
Код
Тут все зависит от конкретного языка программирования, но существуют базовые правила, которые должны соблюдаться всегда:
Соблюдение определенных style guides и паттернов принятых в технологии, например google style guide, код должен быть отформатирован и выглядеть опрятно.
Код должен быть читаемым, не должно быть моментов, когда нужно долго думать, чтобы понять, что вы сделали.
Семантический нейминг файлов/переменных, важно чтобы можно было сразу понять, где и что у вас лежит и зачем необходимо.
Рассмотрение корнер кейсов
Очень часто в тестовых не описано все, что должен сделать кандидат, и в каком-то смысле кандидат должен доработать его сам. По моему опыту люди очень часто делают то, что не очень важно в рамках тестового, например делают какие-то косметические улучшения UI, но при этом, не делают такие вещи как, отлов ошибок через try/catch, не пишут различные валидации, хотя это относится к главному функционалу тестового.
Совет заключается в том, чтобы оценить, какова главная цель тестового задания и что примерно ожидается от вас со стороны проверяющего. Максимальное внимание, стоит уделить корнер-кейсам ключевого функционала. Например, если это верстка интернет магазина, предусмотреть пустой экран состояния для кейса, когда с бекенда пришла ошибка вместо списка товаров.
Соответствие вашего тестового задания техническому заданию
Перед отправкой тестового на проверку, стоит с чистой головой пройтись по пунктам и проверить, что все сделано. Часто во время разработки замыливается глаз и мы не видим, что чего-то не хватает или что-то не работает, и в связи с этим упускаем из внимания какие-то мелочи.
Обязательно проверяйте, что вы ничего не забыли. Если есть какие-то вещи, которые вы осознанно не сделали/сделали иначе, обязательно опишите это в readme/комментариях, чтобы проверяющий понимал, что вы не просто забили. Также хорошей практикой является хотя бы описать ход решения задач, которые вы не сделали.
Итого
Я постарался коротко сформулировать все основные моменты, которые очень часто встречались в моей практике в тестовых заданиях кандидатов и из-за которых они оценивались хуже, чем могли бы быть оценены. Надеюсь я смог сделать твое тестовое чуточку лучше:)
Если статья показалась вам интересной, то у меня есть Телеграм Канал, где я пишу про новые технологии во фронте, делюсь хорошими книжками и интересными статьями других авторов.
Комментарии (13)
saboteur_kiev
25.11.2023 15:15+1гит флоу на тестовом.... мда.
Просто сделал тестовое, в конце гит ребейз squeeze и все, это еще если были коммиты.
Тестовое задание, где нужно разводить гит флоу уже не слишком похоже на тестовое.Dragonek Автор
25.11.2023 15:15-1Я и написал в статье, что это оверхед, но с другой стороны, можно сделать одно тестовые просто изумительно и показывать его во всех остальных случаях, когда от тебя требуют сделать тестовое.
Как бы грустно это не было, но бывают тестовые, где нужно сделать дизайн + бекенд + фронтенд, и это на джуна разраба и люди их делают. Я против такого, но это не отменяет факт того, что это присутствует.saboteur_kiev
25.11.2023 15:15Какое же это тогда тестовое, если оно уже заранее сделано (и докажи что тобой)
Dragonek Автор
25.11.2023 15:15-2Мне кажется, что смысл тестового в первую очередь произвести первичную оценку навыков кандидата и на мой взгляд необязательно смотреть именно на ваше тестовое задание, если у человека уже есть похожее тестовое, почему бы не посмотреть его(а многие тестовые сейчас однотипные), зачем заставлять человека сто раз реализовывать круд или верстать в сотый раз интернет магазин.
А про доказать, что ты сделал тестовое сам - это довольно трудно, даже если тебе дали новое тестовое, зашел на гитхаб поискал тестовые от этой компании у других людей взял себе. Единственный способ доказать, что тестовое твое это пройтись по всему проекту и обьяснить что как взаимосвязано, но никто не будет это делать в условиях того, что на собес в среднем отводится час-полтора и даже в этом случае, ты можешь разобрать его и доказать, что оно твое.saboteur_kiev
25.11.2023 15:15Потому что тестовое задание для кандидата - это одно задание для одного кандидата. То, что кандидат не мог устроиться сто раз и для него это уже сотое тестовое - это больше его проблемы.
В конторе тестовое задание может быть привязано к местной специфике, и в любой конторе есть ротация, то есть собеседования регулярны и для рациональности - стандартизированы. Оптимальнее сравнить выполнение того же тестового задания между несколькими кандидатами, а не рассматривать уникальности каждого.
profFortran
25.11.2023 15:15+13Лучший способ сделать тестовое - не делать тестовое, поскольку гарантий оно не даёт и за него не платят. Бесплатная бесполезная работа, в общем. Мартышкин труд, как говорится. Жаль, что очень многие молодые-активные-креативные "Рога и Ко" это до сих пор практикуют, как и стопицот собеседований со всеми, кроме, наверно, уборщицы, и алгоритмические задачи.
Хотя, перефразируя известное изречение, "жрать захочешь - не так раскорячишься".
panzerfaust
25.11.2023 15:15+4Это связано с тем, что чаще всего предлагаемые задачи рутинные и отстраненные от реальности
Ирония в том, что их очень даже хотят сделать похожими на реальность. Но еще хотят вычистить из задания все, что потенциально попадает под NDA-булшит. А это убивает в задаче всякий бизнесовый смысл. Получаем классическое "сделай то, не знаю зачем". В итоге даже в типичной задаче с литкода больше смысла, чем в типичном тестовом задании от компаний из РФ.
Dragonek Автор
25.11.2023 15:15-3Полностью согласен, но тем не менее, есть хорошие тестовые, которые решаются за несколько часов, проверяют большинство аспектов, которые хочет увидеть проверяющий + имеют какую-то бизнесовый смысл, просто очень часто компаниям не выгодно разрабатывать такие тестовые, ведь их долго разрабатывать(много работы разрабов и тд) + они после первого решения кандидата появляются на github и становятся уже не так эффективны.
VladimirFarshatov
Когда коту нечего делать, он лижет яйца.
Skykharkov
Да все норм. Учитывая что и половины не покрыто этой, как бы так помягче, "статьей".
Просто если написать только "Нужно делать так как нужно, а как не нужно, делать не нужно!", то тогда это на статью не потянет.
Dragonek Автор
Кажется я и не писал, что я пытаюсь покрыть этой статьей все кейсы. Охватить все кейсы априоре невозможно, я написал в статье, что это чисто мой опыт, мои наблюдения, собственно поэтому у статьи и есть категория мнение.
Как бы это не казалось абсурдно, но большинство из того, что я здесь описал, многие разработчики не делают, доходит до абсурда, что люди скидывают тестовое архивом или в их коммитах сообщения по типу 1, 2, 3 и тд ну и мое любимое из 5 требований по тз выполнено 1. Собственно поэтому мне и захотелось это подсветить.
Hungryee
Если для работодателя в условиях тестового задания является проблемой то, что кандидат скинул проект архивом, а не ссылкой на репозиторий - то это исключительно проблемы этого самого работодателя (с головой в первую очередь), и я бы три раза подумал, прежде чем подаваться к нему