А вас вайб-кодеры уже достали?

от автора

В общем, решил поделиться опытом найма программистов нового поколения. Это просто жесть. Иногда у меня ощущение, что я ищу не разработчиков, а операторов кнопки «сделай красиво через ИИ». Причём кнопку они нажимать уже научились, а вот читать то, что написано вокруг неё, пока нет.

Начнём с самого простого. Кандидаты часто вообще не читают вакансию. Просто шлют сопроводительное письмо в стиле «Я готов работать», «.» или «Я соответствую вакансии». Точка. Просто точка, Карл. Даже не три точки, чтобы была хоть какая-то интрига.

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

Например: «Классный у вас ИИ-агент. Я работал с LLM, посмотрел ваш продукт, идея огонь. Хочу поучаствовать, получить опыт и принести пользу — готов работать бесплатно за строчку в резюме». Всё. Такого кандидата уже хочется пригласить на интервью. Про «работать бесплатно за строчку в резюме» я, конечно, шучу. Но если человек хотя бы посмотрел продукт, это уже событие уровня «нашли воду на Марсе».

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

Ладно, это только начало.

Предположим, произошёл коннект. Человек примерно понял условия работы и начал отвечать на мои вопросы. Но тут начинается новая серия сериала. Почти все отвечают через ИИ. Ответы как под копирку. Прямо видно этот нейрослоп. Идеально гладкий текст, ноль личности, ноль конкретики, зато «я обладаю высокой мотивацией и готов эффективно интегрироваться в вашу команду». Спасибо, ChatGPT, я тебя тоже узнал.

Я пишу кандидату: «Слушайте, видно же, что вы ответ через ИИ дали». И сразу добавляю, что мне, в принципе, всё равно. Используйте ИИ, ради бога. Я сам им пользуюсь. Важно другое. Сможете ли вы дальше работать и давать результат?

Дальше подписываем NDA и IP agreement, выдаю доступ к закрытой репе и отправляю инструкцию, как запустить продукт в режиме разработчика.

И тут обычно есть три варианта. Кандидат растворяется. Кандидат засыпает меня вопросами про ошибки, зависимости, Docker, Node, почему оно не работает и где кнопка «сделать всё». Либо маленький процент героев рапортует: «Систему поднял. Написал ей Привет, она ответила через LLM».

Последний вариант уже воспринимается как маленький праздник. Можно открывать детское шампанское и ставить свечку святому npm install.

Потом я досылаю ещё одну инструкцию. Там написано, как настроить nginx, прописать сертификат и приватный ключ от сайта, чтобы программист мог запустить iOS или Android-приложение продукта и гонять трафик через TLS не на боевой сервер, а на свой локальный девелоперский полигон.

И вот тут обычно наступает великая тишина. Такая тишина, что слышно, как где-то вдалеке плачет одинокий nginx.

Либо молчание, либо каждый десятый пишет: «Ну вот, запустил в эмуляторе, работает». Уже хорошо. Уже не зря прожит день.

Но дальше начинается самое весёлое.

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

И вот свежеиспечённый кандидат впервые в жизни изучает, как сделать PR. Обычно создать ветку ещё как-то получается, но создать из неё pull request для многих уже оказывается серьёзным испытанием. Причём почти все сразу делают PR в main, хотя в конце инструкции написано переключиться на ветку release/0.3. Но, видимо, эта строка защищена магическим невидимым шрифтом. Её никто не замечает.

Приходится отдельно объяснять, как называть ветки, куда делать PR, что такое базовая ветка и почему main не предназначен для экспериментов.

Хотя я заранее отправляю описание процесса работы с ветками и кодом. Но тут снова главный сюжетный поворот. Никто ничего не читает.

Ладно. Допустим, человек худо-бедно сделал PR. Даже в правильную ветку, а не в main. Казалось бы, победа близко.

Но нет.

Открываю PR, а там затронуто 30 файлов проекта. Тридцать файлов. При тикете, где надо было поправить одну кнопку, один экран или одну проверку.

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

Пишу: «Уберите из PR лишние изменения. Оставьте только то, что относится к задаче».

И тут начинается новая серия. «А как?», «А что лишнее?», «А у меня так сгенерировалось», «А оно же работает».

Иногда PR содержит не исправление, а костыль, который просто маскирует проблему. Баг не решён, но теперь его не видно в одном конкретном сценарии. До следующего клика. Или до следующего пользователя. Или до следующего полнолуния.

И вот вопрос. Как с этим работать? Что это вообще за жесть? Как отсеивать таких кандидатов? Как сейчас найти нормального программиста, который читает вакансию, способен запустить проект, понимает, что такое ветки и PR, не меняет 30 файлов ради фикса одной кнопки, использует ИИ как инструмент, а не как автопилот без тормозов, и хотя бы иногда читает инструкции?

Потому что пока ощущение такое, что рынок наполнился вайб-кодерами. Они уверенно «ощущают» код, но не всегда понимают, что именно сейчас закоммитили.

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

А потом этот результат прилетает тебе в PR.

С любовью, болью и git reset —hard.

ссылка на оригинал статьи https://habr.com/ru/articles/1047830/