Я неделю жил с ИИ-рабом, и теперь боюсь за свой код
Когда кодогенерация превращается в тыкву
Весь этот щенячий восторг от ИИ-помощника испаряется уже на второй день. Думаю, многие видели эти восторженные твиты — «сделал стартап за выходные», «нейронка написала бекенд, пока я пил смузи». Выглядят как реклама курсов инфоцыган. Реальность жестче.
На второй день ты уже не просто просишь сгенерировать функцию — ты начинаешь грузить контекстом. Кидаешь три файла, объясняешь архитектуру, ждешь чуда. И получаешь простыню кода на 200 строк, которая вроде даже работает. Пять минут радости — а потом ты втыкаешь, что джун попросил добавить одну строку, а ChatGPT предложил переписать половину проекта. Серьёзно, он реально выкатил рефакторинг трёх модулей ради смены одного дефолтного параметра.
Классика жанра — ChatGPT-5 и игры. Даёшь промпт: «сделай арканоид на JS». Он бодро рапортует, генерит canvas, шарик, платформу. Жмёшь запустить — тёмный экран. Ни ошибки в консоли, ни ворнинга. Код просто исчез из реальности, как будто его и не было. Ты переспрашиваешь — он извиняется и выдаёт новую версию. Тоже мёртвую. На третий раз начинаешь гуглить сам, потому что быстрее.
Потыкал в него неделю плотно и понял: проблема вообще не в том, как он генерит. Она в том, что мы ожидаем от болванчика с автодополнением уровня синьора. А получаем старательного, но туповатого стажера. ChatGPT помнит не какое-то число сообщений, а всё, что влезло в его лимит токенов. У свежих моделей это от 32 до 200 тысяч токенов. И если вовремя не заметить палево — вы рефакторите работающий код в тыкву.
Но по-настоящему хреново становится, когда собственная голова отключается. Ловил себя на том, что вместо «как это должно работать» уже спрашиваешь «напиши мне это». Разница в три буквы, а результат — в три часа дебага.
Кормежка зверя: как я выстроил ритуал общения
Самое важное начнется после того, как вы перестанете кидать нейронке односложные промпты в духе «почини это» или «сделай красиво». Я заюзал подход, который между собой назвал «кормежкой контекстом». Каждое утро — никаких «привет, как дела». Сразу дамп структуры проекта, текущие ошибки из консоли и четкое описание того, что хочу получить к вечеру.
Система простая до безобразия. Сначала кидаешь текст ошибки — он выдает не только фикс, но и команды для установки недостающих библиотек. Вот реальный пример из моей недели:
ModuleNotFoundError: No module named 'sentence_transformers' ChatGPT: 1. pip install sentence-transformers 2. В вашем app.py замените импорт на: from sentence_transformers import SentenceTransformer 3. Если используете Docker — добавьте в requirements.txt
Дальше просишь заготовку кода под задачу. Нейронка выплевывает болванку — неидеальную, с косяками, но каркас уже есть. Ты её разбираешь, модифицируешь, допиливаешь под свои реалии. Это принципиально другой подход к обучению: не «напиши за меня», а «покажи скелет, мясо я сам наращу».
Лично проверенными мной: такой ритуал за неделю дал мне систему рекомендаций товаров и нейропоиск. По моим прикидкам, на это обычно уходит месяца полтора. Но без контроля можно легко влететь. Пропустишь один коммит — и в проде такое случится, что хоть сам бери и рисуй картинку с пылающей серверной. ChatGPT-то старается, но контекст больше 20-30 сообщений не держит. Забыл напомнить ему про архитектурное ограничение — и он радостно предлагает решение, которое ломает смежный модуль.
Ритуал выглядит так: утренний созвон с самим собой на 10 минут, формирую «корм», скармливаю. Дальше час-полтора работы с тем, что он выдал. Потом второй подход — уже с результатами и новыми ошибками. И так три-четыре цикла за день. Без этого ритма нейронка скатывается в режим балабола к третьему часу работы.
Тонкая грань между рабом и балаболом
Самое стремное в этой связке — момент, когда ты перестаешь проверять. Я поймал себя на этом на четвертый день. Сижу, закидываю ему стектрейс из консоли — он выплевывает решение. Раз. Второй. Третий. Работает же, сука.
И вот тут ловушка. ChatGPT реально шарит в дебаге. Серьезно, я сэкономил часа три только на том, что скармливал ему логи ошибок из Django — он по одному трейсу определял, что я забыл миграцию накатить или не тот неймспейс в урлах прописал. Даже команды для установки недостающих пип-пакетов предлагал. Это работает офигенно.
Но дьявол кроется в деталях. В одном из циклов я расслабился — принял его фикс не глядя. Там надо было просто добавить одну строку с условием. А он мне выдал «гениальное» решение с рефакторингом трех методов и переписыванием логики валидации. Я потратил сорок минут, прежде чем понял: нейронка предложила перекопать пол-архитектуры ради того, что решалось элементарным if not value: return.
Это и есть грань. Как только ты перестаешь быть ревьюером и становишься исполнителем — ты попал. Он не джун, он цифровой балабол с манией величия, если дать ему волю.
Мое мнение после недели: юзать его надо как личного помощника, который еще и кодит. Я параллельно заюзал его для планирования дня — просто скидывал список задач, а он выстраивал расписание. За неделю я с его помощью выправил режим сна Продуктивность поднялась не потому что кода больше стало, а потому что нейронка выступила внешним органайзером. Ты не держишь в голове рутину — она ее структурирует.
И вот что интересно: сам процесс учебы поехал в другую сторону. Ты больше не строчишь код с нуля — ты разбираешь то, что выдал твой электронный стажер. И это реально ломает привычную схему. Не «как мне это написать», а «почему он предложил именно так и где налажал». Разбираешь его заготовку, модифицируешь, допиливаешь. По факту учишься быстрее — потому что видишь и правильные паттерны, и откровенный бред вперемешку.
Главное — не забывать, кто кого кормит.
Тонкости понимания логики и синтаксиса программирования
Что осталось за кадром и стоит ли оно того
Признаюсь честно: обычно под конец таких разборов народ ждет циферок. Типа, «вот прям на 40% быстрее» или «продуктивность — в 2,5 раза». Спешу разочаровать — у меня таких цифр нет. За неделю плотной работы со схемой «утренний планировщик + вечерний код-ревьюер» я получил два рабочих микросервиса. Один парсит API криптобирж, второй аггрегирует логи из Kubernetes-кластера. Оба не стыдно показать техлиду на код-ревью. Но.
Но потратил я на них примерно столько же времени, сколько ушло бы на написание с нуля. Экономия на болванках съелась отловом галлюцинаций. ChatGPT-4 местами выдавал такой бред, что проще было переписать с нуля, чем разбираться в его логике. Особенно «весело» было, когда нейронка предложила переписать половину модуля авторизации ради фикса одной строчки с TLS-отпечатком. Классическое «давай снесём стену, чтобы повесить картину». Джун бы на такое не купился, а вот нейронка — легко.
И вот тут ключевой момент. Мое мнение: ChatGPT как раб-кодер работает только если вы сами понимаете код хотя бы на уровне мидла. Для джунов это опасная игрушка, которая генерирует правдоподобное дерьмо. Причём дерьмо, которое компилируется и даже проходит юнит-тесты. Палево вылезает только на интеграционных тестах или, хуже того, в проде.
Попробуй связку утренний планировщик плюс вечерний код-ревьюер. Тогда нейронка реально отрабатывает тот контекст, который ты ей скормил, а не занимается цифровым вредительством. Утром скармливаешь ей чёткий спек, вечером разбираешь её выхлоп с позиции «где налажал мой цифровой джун». Работает. Но без валидации — это русская рулетка.
Ну и вишенка на торте: автоматизация. Сидеть и глазами вычитывать каждый пук нейросетки — спасибо, не надо. В следующем посте покажу, как я подружил эту схему с GitHub Actions: линтеры, самописные проверки — всё по-взрослому. Чтобы отсекать откровенный бред до коммита, а не после падения прода. Спойлер: пришлось написать свой экшен, стандартные не вывозят специфику AI-генерированного кода.