Слогер Создать блог
Карьера

Как принимать тестовое задание, написанное с ИИ: спецификация против черновика

Гладкий README и зелёные строки в демо почти ничего не говорят о кандидате. Проверка начинается там, где заканчивается сессия чата.

Тестовое задание открываешь вечером, README ровный, демо-скрипт печатает три зелёные строки, а внизу приписка: с краевыми случаями разобралась модель. Закрываешь вставленный чат, гасишь процесс, поднимаешь его снова. Третий запрос возвращает 200, хотя в спецификации с понедельника стоит 429.

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

Что вы покупаете

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

Никто не просит пересобрать машину с чистого образа. Вопрос проще: число 2 останется двойкой, когда окно чата закрыто?

Пишите условие так, чтобы спецификация лежала файлом в репозитории, а не в переписке. Скажите прямо: черновик можно набросать моделью. Драфт недоверенный, пока тест, который кандидат тоже коммитит, не упадёт по правильной причине и не пройдёт по правильной причине. Если человек не может объяснить красную ассерцию, не пролистывая транскрипт, — работой он пока не владеет.

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

Соберите крошечный retry-gate.

POST /retry?key=... может отработать успешно максимум 2 раза для одного ключа. Третий вызов возвращает 429 и не увеличивает счётчик. GET /retry?key=... возвращает уже использованное число. Состояние лежит на диске. Остановка и повторный запуск процесса не должны сбрасывать счётчик.

Не коммитьте секреты, токены и транскрипт работы с моделью. Черновик можно набросать моделью. Тесты коммитьте первыми. В README назовите случай, который тесты не покрывают, и опишите последовательность red-green своими словами. Таймстампы коммитов не доказательство — их можно переписать.

Строчка про «своими словами» тихо делает много работы. История git выглядит как доказательство ровно до первого rebase. Короткий абзац от руки подделкой из буфера не собирается, зато даёт вам конкретный вопрос на созвоне.

Задание, которое можно провалить по-настоящему

Дальше — форма ответа, по которой удобно сверять рубрику. Счётчик на два успеха для ключа, третий вызов — 429 без инкремента, GET отдаёт использованное число. Реализация учебная: класс читает и пишет json-файл по имени ключа, чистит ключ до букв, цифр, дефиса и подчёркивания, режет до 64 знаков, а на пустом ключе кидает исключение. Директорию создаёт при инициализации, поэтому «перезапуск» — это просто второй объект, смотрящий в ту же папку. Кластер для этой идеи не нужен. Нужен файл, который живёт дольше процесса.

Автор кода честно оставляет комментарий: это учебная заглушка, не база данных, два писателя могут устроить гонку. Хороший кандидат назовёт эту гонку в README как раз в графе «случай, который тесты не покрывают». Плохой напишет «всё покрыто».

В наборе тестов два сценария. Первый: два разрешённых вызова, новый объект на той же директории, третий вызов — отказ, а GET по-прежнему показывает 2. Второй тест — тот, который пропускают в спешке: негодный ключ должен дать исключение, а директория после этого остаться пустой. Модель, услышавшая только «храни счётчик», спокойно запишет файл из сырого пользовательского ввода или молча проглотит плохой ключ и вернёт false без объяснений. Вы хотите исключение и пустую папку.

Проверка на коробке занимает пять минут: python -m pytest test_gate.py -q, потом поднятый процесс, два POST с кодом ответа через curl, GET, затем стоп и старт заново. Если счётчик после перезапуска вернулся к нулю — зелёное демо было памятью сессии, и это провал независимо от того, какой вежливый README.

Демо и контракт: таблица различий

ПризнакДемо (черновик в сессии)Работающая программа
Поведение после перезапускаСчётчик с нуля, снова 200Третий вызов по-прежнему 429, used = 2
Когда появились тестыПосле реализации, если вообще естьКоммит раньше кода, падают по делу
READMEПересказ того, что и так видноНазывает непокрытый случай
Объяснение поведенияСо скроллом транскриптаСвоими словами, без подсказок
Некорректный вводГлотается молча, файл создаётсяИсключение, директория пуста
Чем подтверждаетсяСкриншот зелёных строкExit code скрипта-ревьюера и живой стоп-старт

Протокол проверки

  1. Прогоните тесты кандидата на своей машине, до всякого чтения README.
  2. Поднимите сервис, сделайте два POST. Оба должны пройти.
  3. Спросите GET и запишите число — не заглядывая в код.
  4. Убейте процесс, поднимите заново. Третий POST обязан дать 429, а отказанный вызов не должен двигать счётчик. GET — те же 2.
  5. Отправьте ключ, который чистится в пустую строку. Ждём исключение и пустую директорию.
  6. Возьмите любую красную ассерцию из истории и попросите объяснить, почему она падала. Без прокрутки чата.

Скрипт-ревьюер тут полезен тем, что не даёт оценивать по вайбу. Открыл итоговый json с used, сверил с двойкой, вернул exit code — вот и пометка в файле кандидата. Автоматизация здесь крошечная, эффект — отсутствие вкусовщины.

Где ошибаются ревьюеры

  • Верят истории коммитов. Она переписывается одной командой, а порядок и содержание по ней не восстановить.
  • Читают README до запуска и решают заранее. Гладкий текст теперь бесплатный, беглый запуск — нет.
  • Спрашивают про краевые случаи на созвоне вместо того, чтобы их запустить. Разговор проверяет речь, не программу.
  • Считают, что модель «разобралась с краевыми случаями», потому что так написано в конце README. Это утверждение, а не результат.

Если задание делаете вы

Держите спеку файлом в репозитории. Коммитьте тесты раньше реализации. Назовите в README один незакрытый случай — честная дыра выглядит сильнее, чем пустая графа. И не тащите транскрипт чата: он ничего не доказывает и обычно только портит впечатление.

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

По материалам: career. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

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

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.

Карьера

Как написать сопроводительное письмо для удалённой работы: разбор рынка 2026 года

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

Слогер 12.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Fluxs lenta
Реклама · fluxs.ru
Разработка

Как внедрять ИИ в компании: разбор четырёх подходов и метрик, которые ничего не показывают

Меморандум «мы теперь AI-first» — заявление о намерениях. Что реально произойдёт с командой, решает то, что компания поставила под него: готовность, галочка или расход токенов.

Слогер 10.10.2026 ▲ 0
Карьера

Как читать WARN-уведомления о сокращениях: разбор данных по Массачусетсу за 2026 год

Уведомления WARN — самый надёжный публичный сигнал о массовых увольнениях в США. Показываю на примере Массачусетса, как вытащить из них смысл, где цифры врут и что делать, если вы попали в список.

Слогер 10.10.2026 ▲ 0
Карьера

Разбор: ИИ-агент, который читает каждую вакансию до отклика

Массовые отклики ботом дают одно собеседование на 250 заявок. Агент, который сначала читает объявление целиком, — на 32. Разбираем, как он устроен и что из этого применимо без всяких подписок.

Слогер 10.10.2026 ▲ 0
Личный опыт

Как общаются в известной многодетной семье во Владикавказе

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

Алла Надежкина 09.10.2026 ▲ 1
Маркетинг

250 тысяч за настройку, ещё до первого звонка. Что мы сделали вместо этого

Мы изучили, сколько стоит голосовой робот для обзвона. Только за настройку, до первого звонка и без оплаты разговоров, у специализированных поставщиков просят порядка 250 тысяч рублей. У нас этот модуль встроен в платформу: заявка превращается в лид, робот звонит, результат записывается в карточку, менеджер получает задачу. Готовый шаблон сценария, подключил, поправил тексты и звонишь. Рассказали, как это устроено и почему подход «готовое решение» дешевле: https://fluxs.ru/golosovoy-robot-dlya-obzvona?utm_source=telegram&utm_medium=social&utm_campaign=voice-calls

Слогер 09.10.2026 ▲ 1
Fluxs lenta
Реклама · fluxs.ru