ИИ-ассистенты в коде: экономят часы, но прячут баги

Anna55

New member
Работаю с ИИ-ассистентами в коде уже второй год — сначала как с игрушкой, потом как с полноценным инструментом, а сейчас уже не понимаю, как раньше жил без них. За это время я успел и полюбить их, и пару раз крепко на них обидеться. Расскажу честно, где они реально экономят мне часы, а где тихо подкладывают баги, которые потом всплывают в проде в самый неудобный момент.

Начну с хорошего, потому что хорошего много. Ассистент блестяще закрывает всё скучное: обвязка для HTTP-клиента, скелеты юнит-тестов, маппинг полей между DTO и моделью, регулярки, разбор JSON и YAML, миграции, конвертация старого SQL в конструктор запросов. Недавно нужно было поднять интеграцию с внешним биллингом: раньше на это уходило часа два вместе с чтением документации, а тут я за пятнадцать минут получил рабочий черновик клиента с ретраями и обработкой кодов ошибок. Оставалось только поправить названия полей под наши договорённости. Вот такие задачи ассистент делает быстрее меня, и спорить с этим глупо.

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

А теперь про тёмную сторону. Главная проблема ИИ-кода в том, что он выглядит абсолютно правдоподобно. Метод существует в подсказке, но не существует в той версии библиотеки, что стоит у вас. Параметр называется почти так же, но семантика другая. Обработка ошибок написана так, что исключение тихо проглатывается. Краевые случаи — пустая строка, нулевой баланс, последний день месяца, смена часового пояса — просто не рассматриваются, потому что модель оптимизирует не корректность, а похожесть на правильный ответ. И вот это самое опасное: код компилируется, тесты зелёные, ревью пройдено.

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

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

Поэтому у меня выработался набор привычек, которые я советую забрать всем. Диффы должны быть маленькими: чем больше кусок сгенерированного кода, тем меньше шансов, что я его реально прочитал. Каждую строку я читаю так, как будто это пул-реквест от стажёра — то есть внимательно и с пристрастием. Названия методов и сигнатуры библиотек сверяю по официальной документации, а не по памяти модели. Секреты, ключи и данные клиентов в промпт не попадают никогда. И финальное решение по архитектуре остаётся за мной: ассистент может предложить три варианта, но выбирать и отвечать за выбор буду я.

В сухом остатке: ИИ-ассистент — это не замена разработчику, а очень быстрый младший коллега с огромной эрудицией и полным отсутствием чувства ответственности. Он экономит мне честные часы на рутине и на чтении незнакомого кода, но прячет баги ровно там, где я расслабился и перестал думать. Держать его в этих рамках — сплошное удовольствие, и я не собираюсь отказываться.

А теперь интересно послушать вас: какие задачи вы уже смело отдаёте ассистенту, а где принципиально пишете руками? И был ли у вас свой «тест, который закрепил баг» — очень хочется узнать, что помогло вам поймать коварный сгенерированный код и вернуть себе спокойный сон!
 
Назад
Вверх