В современном мире разработки программного обеспечения искусственный интеллект все активнее проникает во все сферы жизни программиста. От автозаполнения кода до генерации целых фрагментов – AI-кодовые ассистенты обещают не только экономить время, но и избавлять разработчиков от рутинных и однообразных задач. Однако, насколько эти обещания реальны, особенно в сложных и специфичных случаях? Мы решили проверить эффективность нескольких популярных AI-помощников на примере реальной задачи — миграции системы управления состоянием с одной архитектурной модели на другую в рамках крупного веб-приложения. В этом материале приведен подробный разбор всех этапов эксперимента, основных проблем, с которыми столкнулся наш CTO, а также объективная оценка результатов каждого инструмента. Нашему главному техническому директору, Александру Кметецу, предстояло перенести существующий хранилище состояний, реализованный с помощью NgRx, на новую структуру с использованием ванильных сервисов и сигналов.
Само задание — типичное для реальных проектов: не добавлять новую логику, а лишь переписать код, что должно по идее отлично подходить для искусственного интеллекта, так как это повторяющаяся и одноманитная работа. Первая попытка была сделана с использованием Microsoft Copilot. Несмотря на популярность и широкое распространение этой среды, результат сразу разочаровал. Помощник просмотрел исходный код, нашел несколько файлов, но вместо помоги начать рефакторинг он просто удалил большую часть содержимого, предоставив минимальную полезную информацию. Такая реакция была очевидно не тем, что ожидалось, и попытка была быстро прервана.
Другим претендентом стал Cursor.ai. Первая попытка была хаотичной и сопровождалась бесконечными циклами ошибок и исправлений, словно программа застряла в бесконечной петле багфиксов. Очевидно, что искусственный интеллект не смог понять контекста задачи и предложил решение, которое скорее повредило проекту, чем помогло. Вторая попытка была более сфокусированной — ограничена только одним store, включающим редукторы, эффекты, экшены и селекторы.
Однако даже в таком узком круге действие AI вышло из-под контроля: асистент начал переписывать CSS-код, совершенно не относящийся к основному заданию, что вызвало непонимание и разочарование. Попытки с веб-ориентированными AI-инструментами, среди которых было GPT-4o и его упрощенная версия GPT-4o-mini-high, показали сходные результаты. GPT-4o отправил ZIP-архив с практически пустыми сервисами, внутри которых были лишь комментарии о необходимости дальнейшей доработки, без реального кода. Его упрощенный вариант вместо полезного результата выдал целый блог-пост с советами, как выполнить миграцию самостоятельно, что фактически свело на нет всю пользу AI-помощника. Gemini 2.
5 Pro немного выделился на фоне остальных. Инструмент предоставил минимально полезные фрагменты кода, хотя большая часть из них все еще была представленна заглушками с ироничными комментариями наподобие «заполни логику, ленивый человек». Такой подход демонстрировал, что помощник понимает структуру задачи, но не имеет достаточной емкости или контекста для конечной генерации востребованного кода. К настоящему прорыву подошел только Claude 3.7.
Этот AI смог почти идеально перенести два небольших хранилища (UI и выбор состояния), без критических ошибок и с минимальными последующими доработками. Однако с увеличением объема задачи традиционные проблемы искусственного интеллекта не заставили себя ждать. При попытке мигрировать третий store, отвечающий за фильтрацию страниц, AI начал регулярно «зависать» из-за превышения лимита длины вывода. При повторных попытках сбоев становилось только больше: сгенерированный код был либо начат заново, либо представлял собой неаккуратное «склеивание» средних по качеству кусков. Решением стало разбиение больших сервисов на мелкие части, которые подавались ассистенту по очереди.
Эта хитрость позволила получить более приемлемый результат, хотя и с постоянными падениями и требованием ручного контроля. Самая тяжёлая часть — миграция основного data store — превратилась в настоящий кошмар. AI неоднократно выдавал коды с неопределёнными переменными, неиспользуемыми функциями и недостающей логикой. Месяцы тестирования и несколько часов постоянного нажатия «Continue» не привели к обещанному автоматическому решению. В итоге удалось получить лишь приблизительно работающий код, потеряв при этом часть функционала.
На все этапы ушел целый день, а итоговый полезный объем кода едва дотянул до 200 строк. Это все же стало лучшим из проделанных вариантов. По мотивам неудачных попыток через несколько недель CTO решил попробовать подход с новыми возможностями Claude Code — привлекательной и обновленной версией ассистента. Здесь, несмотря на дополнительные усилия и увеличенные временные затраты — 80 строк кода, которые генерировались около 45 минут — результат оставался неудовлетворительным. dashboard продолжал работать с ошибками, и вся работа по-прежнему требовала вмешательства и контроля со стороны специалиста.
Подводя итог, опыт показал, что современные AI-помощники, несмотря на значительные достижения и потенциал, пока не готовы заменить программиста в задачах комплексной миграции и рефакторинга больших кодовых баз. Они могут выступать в роли вспомогательного инструмента для генерации шаблонов и базовых структур, но требуют тщательного контроля, исправлений и глубоких знаний со стороны человека. Внимательное планирование, подготовка к разбиению задач на мелкие части и критический анализ сгенерированного кода остаются обязательными элементами успешного внедрения искусственного интеллекта в рабочие процессы. Время экономится не всегда, а попытки переложить полностью ответственность на AI могут привести к потере целевое время и увеличению затрат. В конечном счёте, AI-инструменты приспособлены лучше всего для решения относительно простых и повторяющихся задач, накрывшихся разовую нагрузку.
Сложные, многокомпонентные модули с переплетениями логики все еще требуют опыта и вмешательства профессионала. Тем не менее, перспективы развития технологий вселяют надежду на более качественную и эффективную поддержку в будущем, и мы продолжим следить за новинками в этой области, чтобы своевременно информировать и готовить разработчиков к совместной работе с искусственным интеллектом.