Сладкое начало
Друг когда-то посоветовал: «Попробуй, ты почувствуешь себя супергероем. Начнёшь использовать — и не сможешь остановиться. Задачи, которые требовали дней работы, будешь делать за часы». Нет, речь не идёт о наркотиках, хотя использование AI скорее всего можно назвать зависимостью. Всё началось с включения улучшенного автодополнения в VS Code (или оно было включено автоматически?) и скачивания других моделей генерации кода. В детстве родители говорили: «Будь осторожен с плохими дядями у ворот школы, которые предлагают конфеты — это не конфеты, а наркотики». В двадцать лет я шутил, мол, «они уже дают наркотики бесплатно?» Сейчас в тридцать я думаю, что, возможно, так оно и есть.
Когда начинаешь использовать AI coding agents, всё быстро выходит из-под контроля. Поначалу просишь AI написать функцию или тесты для кода. Если раньше следовал TDD-подходу, естественно просишь AI написать сначала тесты, а потом реализацию. Но потом перестаёшь писать код сам и просто просишь AI это сделать — и половина смысла TDD (не смещать тесты в сторону конкретной реализации) теряется. Но темп работы настолько впечатляет, что начинаешь перестать это замечать.
Однажды заметил, что agent подписывает коммиты с его участием. Срочно отключил эту настройку. Как-то неловко — хотелось выдать код за свой. Смешно.
Потеря контроля
Но это было только начало. Если что-то нравится и можно получить в два раза больше — получишь. Начал копировать целые описания тикетов из Jira и просить AI всё реализовать. Вау! Какая мощь! Работая в кодовой базе, которая была для меня новой, потерял понимание того, какие изменения действительно нужны для выполнения задачи. Думал: «Если AI, прочитавший весь код проекта, говорит, что это нужно, значит, нужно». Контроль — иллюзия. Другие разработчики, с которыми обсуждал этот момент, согласны: они не знают на 100%, что делает код, который пушат в production. Уверен, даже на 20% не знают. Ужасающе.
Но и здесь граница размывалась дальше. Когда попадалась небольшая задача, отправлял её AI, и через полчаса был готов PR. А что делал в эти полчаса? Переключался между контекстами. Вскоре понял, что можно запустить одновременно несколько agents на разных задачах в разных git worktrees. Максимум возможностей! Подключил agents к Jira через ACLI и просто давал команду: «Работай над этим тикетом в отдельном worktree». И он работал. Ощущение восторга.
Для больших задач? Конечно, не работал над ними сам. Просил AI разбить их на подзадачи, а затем работать над ними. AI выдавал убедительный PR с кучей изменений, которые я толком не понимал. Как просить code review у коллег? Что они скажут? Что скажу я, когда опытные разработчики (особенно те, кто хорошо знает кодовую базу) начнут спрашивать, почему я сделал так или иначе? Как признаться, что всё это AI, а я просто его пастух? Приходилось заставлять себя разбираться в коде. Не потому что хотелось понять архитектуру, а чтобы избежать позора перед собой и перед командой.
На пике имел столько AI agents, работающих одновременно, что переключение контекстов стало невыносимым. Задачи, которые можно было сделать за 20 минут, agent выполнял за 5, но потом на review уходило два дня. Потому что было столько других дел. Может, AI и хорошо переключаются, но я нет. Был совершенно измотан. Потому что если бы это было просто одобрение идеально написанных PR — хорошо. Но для каждого PR нужно посмотреть код, тесты, стиль, дать фидбек, переключиться на что-то другое, вернуться, запушить, посмотреть на комментарии, прошла ли CI, дождаться, пока линтер не нальёт замечаний. И уходит два дня на то, что можно было сделать за час в одном фокусе. В моём опыте, умноженная производительность AI — просто иллюзия. Умноженные разочарование и истощение — гарантированы.
Ни один PR, который дал AI, я не смог смёржить как есть. Конечно, сами коммиты и описания PR я тоже не писал (что это, 2024?), AI делал это, и убедился, что в описании 7 абзацев объяснения всего, что он сделал. Переставил читать эти описания — я ему сказал, что нужно, предполагаю, он это сделал. Описание — для других. Потому что описание должно быть, верно? AI так отлично умеет «звучать» профессионально, что расслабляешься и доверяешься. Не то чтобы я думал, что код хороший, но со временем убедился, устал, стал безразличен. Перестал сомневаться и начал принимать за хороший код, который никогда не принял бы, просто потому что не мог объяснить, почему он плохой. Потерял контроль. Большинство AI-разработчиков это отрицают, но глубоко знают, что это правда. Просто не хотят это признавать.
Месяцы шли, и однажды понял: я не написал ни одной строки кода сам уже несколько месяцев. Даже не коммитил сам. Бессчётное количество раз писал в чат с AI agent: «commit and push». Что. Это. Было. Если это не лень, я не знаю, что это. AI также не мог решить все задачи, которые давал. Даже половину. Раз за разом приходилось нянчиться с agent: «Теперь примени этот паттерн» или «В спецификации раздели setup тестов в before блок и добавь assertions в отдельный блок». Как будто ментору junior разработчика. Ничего против менторства — я это люблю, делаю годами и думаю, что это полезно обеим сторонам. Но я не буду нянчиться с машиной, извини.
Часто замечал, что качество кода, написанного AI, заметно упало. Не то чтобы оно было блестящим в начале, но ощущение было: «Парень, ты это уже делал, почему теперь не можешь?» Приходилось просить ещё раз объяснить, как это делается. Или ссылаться на файл с предпочтениями. «Окей, я тебя понял, извини за путаницу. Переделаю». И опять полный беспорядок, совсем не то, о чём просил. Напомнило мне стратегию, когда Google намеренно снизил качество результатов поиска, чтобы люди искали несколько раз и видели больше объявлений. И если это сработало для Google, почему не сработает для AI? Особенно если AI-компании в финансовых затруднениях — ты правда думаешь, что они это не сделают? Да ладно. Они это сделают и ещё много чего.
В другие дни видел, что agent зависнул на полчаса без ответа. Что с этим делать? Ты думаешь, я взял задачу и сделал её сам? Абсолютно нет. Взял кнут и авторитарно потребовал мой код! AI извинился и выдал за 20 секунд то, что не выдавал 30 минут. Посмотрел на счёт токенов — потратил $30 совершенно впустую. Если бы платил сам, был бы в ярости.
Возвращение контроля
Месяц назад при code review одного из моих PR коллега заметил: «Этот тест не тестирует сценарий, который ты меняешь в коде приложения». Пересмотрел — он был прав. Но… это звучало так убедительно… И почувствовал стыд. Для разработчика, который 10+ лет использует TDD, такая ошибка — унижение. Понял: я потерял контроль, и будет только хуже. Просто стараться больше, быть придирчивей к AI, требовать качество, за который платишь — бесполезно. Потому что AI в итоге убеждает тебя и снова делает тебя комплацентным.
Решил: остановлюсь. Даже если это стоит мне работы.
Когда берёшь draft PR, написанный AI, и начинаешь его доделывать сам, понимаешь, в какой степени не знал, что он делает. Начинаешь сомневаться: нужно ли это и то, и в итоге выбрасываешь всё и начинаешь заново. Почувствовал себя заржавелым, как будто не кодил сам вечность. К счастью, писал код в своём side project, поэтому усилия были заметны, но не критичны.
Вернулся к TDD, к своим PR с пятью изменённых файлов. К двухстрочным описаниям PR, прямо по делу. Вернулся к пониманию того, что делаю, к развёртываниям с уверенностью, к готовности к детальному code review, потому что знаю, что меняю, и могу обосновать каждую строку. Вернулся к удовольствию от code review с людьми (не с AI, ненавижу даже больше. И людей, которые пастят AI review выдавая за свои). Начал учиться на фидбеке. Стал спрашивать об архитектурных решениях, почему всё устроено так. Мог спросить AI, но предпочитаю спросить коллег.
Вернулся к радости программирования. И не оглядывался. Не буду делать вид, что количество строк или PR — валидная метрика, особенно когда AI может быть многословным, чтобы выиграть по каждому показателю. Но могу сказать, что пушу значительные изменения каждый день, мёржу PR, и в конце дня — работа выполняется. И поэтому не боюсь быть уволенным. Плюс, мозг остаётся функциональным.
Советы
Откажись от наркотиков. Это почти метафора, но не совсем. Первый шаг — осознать, насколько зависим от AI. От технологии, которой не контролируешь, и которая стоит работодателю (если не тебе) бешеных денег. Скажешь: «Но менеджер ждёт высокой производительности, как я теперь буду медленнее?» Не знаю про других, но со мной этого не произошло. Не думаю, что я работаю медленнее, чем два месяца назад. Если что, сейчас осознаннее, способнее реагировать на инциденты (потому что я написал код, который сломался), и чем больше лично работаю над кодовой базой, тем лучшим разработчиком становлюсь. Это то, что нужно менеджеру.
И сэкономишь немного денег работодателю, когда начнутся срезы AI-бюджета — они начнутся, если не началось уже.
Если ты разработчик как я, то опыт как разработчик — это то, что дало тебе эту работу. Если ты на рынке несколько лет, знаешь: ты настолько хорош, насколько сложные проблемы решал в карьере. Если отключишь мозг и будешь просто нянчиться с AI, не станешь лучше. Теряешь ценность, потому что то, что можешь доставить лично, твоя актуальная ценность как инженера (не пастуха AI), падает, когда мозг расслабляется и отдаёт контроль AI.
Проснись. Будь смелым. Вернись в контроль.