Я дал джунам тестовое уровня senior – и вот что получилось

В последнее время у меня ощущение, что на рынке разработки что-то «сломалось»

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

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

Но для начала нужно было определиться: кто вообще нужен?

Мне ни разу за 7,5 лет не приходилось писать сортировку в блокноте. Зато постоянно приходилось разбираться в чужом legacy-коде, вносить небольшие, но опасные изменения, чинить интеграции, вытаскивать вменяемую структуру из монолитов и по мере необходимости решать инфраструктурные задачи. Архитектурные проблемы в реальной работе почти никогда не выглядят как олимпиадная задача. Обычно это что-то вроде: “вот старый сервис, вот бизнес-требование, вот ограничения по времени, нужно сделать так, чтобы не развалилось”.

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

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

Почему именно рефакторинг, а не задача «с нуля»

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

Поэтому я сделал тестовое в формате рефакторинга. Исходной точкой был намеренно плохо спроектированный монолит интернет-магазина на Django. Я специально сделал его “неровным”: с плотной связностью компонентов, смешением бизнес-логики и HTTP-слоя, спорными зависимостями между модулями и местами, где легко наделать ошибок в согласованности данных.

Задача кандидата была не просто “переписать Django на FastAPI”, а декомпозировать этот монолит в вменяемый backend-проект с понятной структурой и современными практиками разработки.

Минимально я ожидал от решения следующие вещи:

  • перенос ключевой бизнес-логики из монолита в новый сервис;

  • нормальную структуру проекта, где HTTP-слой не смешан с доменной логикой;

  • работу с БД через явный слой доступа, а не хаотичные запросы из обработчиков;

  • валидацию входных данных;

  • понятную обработку ошибок;

  • запуск проекта одной командой;

  • конфигурацию через переменные окружения;

  • хотя бы базовую контейнеризацию;

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

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

Так же важным этапом было суметь объяснить написанное и обосновать выбор тех или иных решений, предложить как можно дальше развивать проект.

Меньше чем через неделю я получил первые ответы по тестовому

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

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

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

Как ни странно, я получил абсолютно обратный эффект: кандидаты в большинстве случаев адекватно объяснили, что и как они делали.

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

Что в итоге?

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

Убедился, что есть множество людей, которые умеют работать, но не могут найти работу, потому что не накрутили себе еще 5+ лет опыта.

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

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

Автор: AntonOgarkov

Источник

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