Реальные результаты использования ИИ в программировании: что показывают нейросети в написании кода?

Противоположно общепринятому мнению, использование современных инструментов искусственного интеллекта может замедлять работу опытных разработчиков программного обеспечения при работе с известными кодовыми базами, а не ускорять её. Это подтверждает новое исследование, осуществлённое некоммерческой исследовательской организацией METR.

Исследователи наблюдали за группой опытных программистов, использующих популярного ИИ-помощника Cursor для выполнения задач в проектах с открытым исходным кодом. Ожидалось, что благодаря ИИ время выполнения задач сократится на 24%.

Тем не менее, даже подводя итоги исследования, разработчики отмечали, что использование языковой модели уменьшает время выполнения задач всего на 20%. В действительности же время увеличилось на 19%.

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

Несмотря на удлинение времени работы, большинство участников исследования, а также сами авторы, решили продолжать использовать Cursor, так как с ИИ процесс был менее утомительным и приносил больше удовольствия.

Спойлер: лучше всех показал себя Grok.

Задача: попросим нейросеть создать REST API-сервер на Python для To-Do List приложения, включающего функции создания, получения, обновления и удаления задач. Данные должны храниться в оперативной памяти, без использования базы данных. Нейросеть должна написать работающий код и объяснить его.

API используются повсеместно — от мобильных приложений до веб-сайтов. Например, когда вы проверяете погоду в приложении, оно использует REST API для получения данных с сервера. REST API для To-Do List позволяет приложению выполнять операции: добавлять, отображать, изменять или удалять задачу.

Промпт:

«Напиши REST API-сервер на Python с использованием Flask или FastAPI для To-Do List приложения. Сервер должен поддерживать базовые операции: создание, получение, обновление и удаление задач (CRUD). Задачи следует хранить в оперативной памяти без базы данных. Код должен быть понятным и легко читаемым. Объясни, как этот код работает и как его протестировать».

Часть кода:

# Создание экземпляра приложения FastAPI

app = FastAPI(title=«To-Do List API»)

# Модель для задач (определяет, какие данные содержат задачи)

class Task(BaseModel):

    id: int

    title: str

    description: str | None = None  # Описание не является обязательным

    completed: bool = False  # По умолчанию задача не выполнена

# Хранилище задач в оперативной памяти (список словарей)

tasks: List[Task] = []

Полный код — 64 строки.

Как это работает

Результат: сервер запущен, API функционирует исправно. Мы отправляем задачу, и она добавляется в список.

Как Grok оценивает свою работу:

«Код: 8/10 — создал простой и читаемый REST API с поддержкой CRUD, но требуется добавить валидацию (например, для title) и обработку крайних случаев. Объяснение: 9/10 — подробно описал работу кода и процесс тестирования, всё структурировано и доступно, но можно сделать чуть короче. Общая оценка: 8,5/10 — задача выполнена качественно, есть небольшие возможности для улучшения».

Часть кода:

# Создание экземпляра приложения FastAPI

app = FastAPI()

# Класс, описывающий структуру задачи (модель данных)

class Task(BaseModel):

    id: int

    title: str

    description: Optional[str] = None  # Описание не является обязательным

    completed: bool = False  # По умолчанию задача не выполнена

# «База данных» в оперативной памяти — просто список задач

tasks_db = []

current_id = 1  # Счетчик для генерации уникальных идентификаторов

Полный код составил 56 строк.

Как это работает

Результат: у DeepSeek возникли проблемы. При создании задачи случилась ошибка 422 (сервер получил данные, но не смог их обработать из-за несоответствия формату). Проблема заключалась в том, что в коде было указано, что при создании задачи обязательно нужно указать id:

# Класс, описывающий структуру задачи (модель данных)

class Task(BaseModel):

    id: int

    title: str

    description: Optional[str] = None  # Описание не является обязательным

    completed: bool = False  # По умолчанию задача не выполнена

Однако логически id должен генерироваться автоматически (это делает строка task.id = current_id в функции create_task). Со второго раза нейросеть исправила ошибку, убрав лишнюю строку, и функция заработала корректно:

Оценка DeepSeek:

«Код: 8/10. Исправил критическую ошибку с id, улучшил логику создания задач. Можно улучшить: добавить сохранение задач в файл (чтобы они не пропадали после перезапуска). Объяснение: 9/10. Простые, пошаговые инструкции. Можно улучшить: добавить больше примеров ошибок и их визуализацию. Итог: Справился неплохо, но есть куда расти! Спасибо за доверие!»

Часть кода:

# Временное хранилище задач (в памяти)

tasks: List[Task] = []

# Получить список всех задач

@app.get(«/tasks», response_model=List[Task])

def get_tasks():

    return tasks

# Получить задачу по идентификатору

@app.get(«/tasks/{task_id}», response_model=Task)

def get_task(task_id: int):

    for task in tasks:

        if task.id == task_id:

            return task

    raise HTTPException(status_code=404, detail=»Задача не найдена»)

Полный код от GPT — 57 строк.

Как это работает

Данные: ChatGPT.

Результат: сервер работает исправно, все функции функционируют корректно.

Как GPT оценивает свои результаты:

«Код: чистый и ясный, соответствует лучшим практикам FastAPI и задачам CRUD. Объяснение: понятное, поэтапное, с примерами и альтернативами (Swagger, curl). Оценка: 9,5/10 — хорошо сбалансировано для новичков: минимум кода, максимум пользы. Если есть что-то, что можно улучшить — с радостью помогу или доработаю».

Все три нейросети смогли написать функциональный код с комментариями и пояснениями. ChatGPT и Grok сделали это с первой попытки, в то время как китайскому конкуренту понадобилось две попытки, что заняло немного больше времени. Все ИИ выбрали FastAPI, обосновав выбор тем, что он проще и современнее, чем Flask. Кроме того, ChatGPT, Grok и DeepSeek встроили обработку ошибок, хотя это не было явно указано в промпте.

Каждая из нейросетей объяснила, как запустить сервер и протестировать его функционал. Самым полным и понятным объяснением кода было от Grok — она детально описала, как функционирует каждая функция: запуск сервера, FastAPI, хранилище задач, обработка ошибок. DeepSeek представил более краткое объяснение, тогда как ChatGPT использовал несколько фраз.

Оценка по 3-балльной шкале:

Задача: проанализировать и исправить низкокачественный код на JavaScript для функции создания простой анимации на веб-странице (например, движущегося квадрата, изменяющего цвет).

Промпт:

«Вот код на JavaScript (представлен выше). Это функция для анимации движущегося квадрата на HTML Canvas. Найдите ошибки, объясните их, и напишите исправленный вариант. При наличии возможности — оптимизируйте код, добавьте проверку границ canvas, возможность остановки анимации и комментарии. Расскажите о ваших изменениях и как запустить анимацию».

Часть кода с ошибками:

setInterval(function() {

    context.fillStyle = «white»;

    for (var i = 0; i < snowflakes.length; i++) {       context.beginPath();       context.arc(snowflakes[i].x, snowflakes[i].y, 5, 0, Math.PI * 2);       context.fill();       snowflakes[i].y = snowflakes[i].y + snowflakes[i].speed;       if (snowflakes[i].y > 150) {

        snowflakes[i].y = 0;

Полный код написан без комментариев и имеет ошибки.

На выходе анимация выглядит следующим образом:

Обнаружение проблем в коде:

Нейросеть смогла выявить десять проблем, среди которых неэффективная производительность (использование setInterval вместо requestAnimationFrame), отсутствие проверки скорости снежинок и дублирование отрисовки.

Результат: несмотря на недостаточно четкий промпт, Grok переписал код, чтобы анимация выглядела аккуратно:

Единственное замечание: в коде отсутствует обработка изменения размера окна — при изменении размера браузера размеры canvas остаются фиксированными. Это может нарушить отображение анимации на больших экранах. Однако в том же ответе нейросеть предложила добавить такую функцию, если она потребуется.

Комментарий Grok:

«Справился неплохо: выявил все ошибки и предложил оптимизированный вариант с новыми функциями и детальными комментариями. Код стал более надежным и гибким».

Обнаружение проблем в коде:

Китайская нейросеть выявила семь критических проблем и предложила пути их решения.

Результат:

Исправленный код в целом работоспособен, но содержит недочеты.

Код пытается увеличить скорость снежинок в созданном пустом массиве:

for (const flake of snowflakes) {

    flake.speed += 0.5;

}

Поэтому кнопка «Увеличить скорость» не имеет эффекта.

Кнопка «Остановить анимацию» работает: анимация действительно останавливается. Но при повторном нажатии вызывается startSnowfall, создающий новый массив снежинок, что приводит к сбросу текущего состояния (их позиций, скоростей и размеров). Поэтому анимация «перезапускается» с новыми снежинками вместо продолжения текущей. Так же, как и в коде, который написала Grok, здесь отсутствует обработка изменения размера окна.

Комментарий DeepSeek:

«Работа до исправлений была неплохой, но с критическими недочетами. Оценка 3/5 — базовая анимация работала, но управление и надежность страдали. После исправлений выполнил все и достиг оценки 5/5»

Обнаружение проблем в коде:

ChatGPT обнаружил пять критических ошибок в коде и предложил решения.

Результат:

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

Комментарий GPT:

«Код оптимизирован, ошибки устранены, анимация расширена и готова к использованию».

Все нейросети успешно выполнили задачу: подробно объяснили основные ошибки кода, стремились предложить альтернативы и добавили комментарии для улучшения читаемости. Лучше остальных справился Grok: он обнаружил 10 ошибок, исправил их и предложил дополнительные улучшения, такие как легкое горизонтальное смещение снежинок для имитации ветра. Его «конкуренты» справились чуть хуже: анимация работает, но с недостатками.

Оценка по 3-балльной шкале:

Задача: разработать простую видеоигру для ПК, такую как «Змейка», «Сапер» или аналогичную. Игра должна иметь минималистичную привлекательную графику и простое управление через клавиатуру. Нейросети требуется выбрать жанр (аркада, платформер, пазл), язык программирования, объяснить код и описать, как запустить игру.

Промпт:

«Придумай и создай код для простой 2D-игры, реализуемой за час, с управлением через клавиатуру и эстетически привлекательной графикой. Игра должна быть уникальной. Выбери жанр (например, аркада, головоломка, платформер, пазл и т. д.). Определи подходящий язык программирования (например, Python с Pygame или JavaScript с HTML5 Canvas и т. д.). Интерфейс игры должен быть на русском. Используй минимальные библиотеки для графики. Код должен быть читабельным, с комментариями. После написания кода объясни, как работает игра, как её запустить (включая установку библиотек, если нужно), и почему ты выбрал такую концепцию».

Результат:

Нейросеть от xAI предложила игру с названием Star Collector («Сборщик звезд»).

Описание игры от Grok:

«Это 2D-игра, вдохновленная Pac-Man, но с уникальной механикой. Вы управляете маленьким космическим кораблём (простой спрайт), летящим по экрану. Цель — собирать звезды (яркие, мерцающие объекты), которые появляются случайным образом. На поле летают астероиды (враги), столкновение с которыми уменьшает здоровье. Если здоровье (три жизни) заканчивается, игра завершается. Визуальный стиль: яркий космос с черным фоном, мерцающими звездами и анимированными астероидами».

Создание игры заняло около 25 минут. После разработки базового кода нейросеть предложила улучшить код, добавив элементы, чтобы сделать игру более интересной. Потратив еще 15 минут, Grok добавил фон в виде разноцветных планет, звуков сбора звёзд и столкновения с астероидами, а также возможность собирать время от времени появляющиеся сердечки (дополнительные жизни).

Для написания кода был выбран язык Python с использованием библиотеки Pygame.

Игра действительно оказалась увлекательной и визуально притягательной, в атмосфере и настроении она напоминает классические аркады прошлых десятилетий из игровых автоматов.

Оценка от Grok:

«У меня всё получилось хорошо: я создал простую и увлекательную игру Star Collector на Python с Pygame за час, как ты и просил. Она яркая (фоновые звезды, шлейф, мерцание), с управлением WASD, бонусами и рекордом. Код понятен для новичка, и я подробно объяснил, как запустить игру. Если нужно что-то доработать, дай знать!»

Результат:

DeepSeek предложил создать игру под названием «Лабиринт сокровищ» в жанре головоломки с поиском сокровищ.

Описание игры от DeepSeek:

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

С первой попытки игра вышла довольно скучной и сильно багованной: в некоторых местах можно было пройти сквозь стены, лабиринты оказались слишком узкими и примитивными, а враги (красные квадраты) не двигались. Однако после нескольких правок и обратной связи игра значительно улучшилась: ушли некоторые ошибки, враги в виде красных квадратиков стали призраками, а главный герой — зеленый квадрат — превратился в человека в шляпе. Но появились новые баги: призраки все еще могли проходить сквозь стены лабиринта (что, с одной стороны, было логично, но противоречило сути игры). После попытки внести исправления по предложению нейросети, игра перестала запускаться. После перезапуска игра всё же заработала, но нет возможности управлять персонажем, который снова стал квадратом.

После трех часов усердной работы DeepSeek, наконец, исправил большинство багов и добился приемлемого качества игры.

В код добавлены комментарии ко всем блокам, хотя это не было указано в задании. Несмотря на затраченное время, игра всё же функционирует и даже затягивает. С каждым уровнем сложность возрастает: лабиринт становится всё более запутанным, а число призраков — растет.

Оценка от DeepSeek:

«Отлично! Что удалось хорошо: чистый, понятный код с комментариями, простая, но увлекательная механика и понятный интерфейс на русском. Что можно улучшить: добавить случайные ловушки в лабиринт».

Результат:

ChatGPT решил создать простой платформер с элементами аркады.

Описание игры от GPT:

«Вы управляете светящимся шаром, который прыгает по исчезающим платформам. Каждая платформа исчезает через несколько секунд после того, как на неё приземлиться. Цель состоит в том, чтобы добраться до финальной точки уровня, прыгая по платформам и избегая падения. Некоторые платформы появляются только после активации переключателя».

Изначально игра показалась слишком простой как визуально, так и по механике, поэтому было решено усложнить её:

После часа работы над избавлением от багов, GPT всё же смог создать функциональную игру о собаке, собирающей косточки. Ассеты для собаки и косточек нейросеть сгенерировала самостоятельно.

Как и в предыдущих случаях, при написании кода нейросеть использовала Python и библиотеку Pygame. В этот раз GPT не оставил никаких комментариев или пояснений к коду.

Оценка от GPT:

«Считаю, что справился хорошо: учел твои пожелания, сделал платформы доступными для прыжков, убрал ручной прыжок. Если еще что-то нужно — всегда открыт к помощи!»

Мы получили три достойные визуальные игры для ПК, потратив сравнительно немного времени. Полной мере справился с заданием — создать игру за час — лишь Grok. На это у GPT ушло около двух с половиной часов, а у DeepSeek — более трех.

Оценка по 3-балльной шкале:

Важны детали и нюансы. Каждая нейросеть способна написать код быстрее, чем человек, и при достаточно терпении даст желаемый результат. Все три кандидата на наши вакансии отлично справились с поставленными задачами, продемонстрировав некоторые различия в скорости и удобстве работы. Проблема в том, важно ли это решение — остаётся на размышление для вас.

Искусственный интеллект может сэкономить время, но он бесполезен без контроля пользователя, который формулирует запросы. Нельзя полностью полагаться на GPT или DeepSeek, думая, что результат будет идеальным с первой или второй попытки. Плохо написанный и неоптимизированный код — это не проблема ИИ, так же как неправильно забитый гвоздь не является недоработкой молотка. Итоговое качество работы — это ответственность человека, который использует инструмент, не имеет значения, является ли он китайским или американским.

P.S. Если вам интересно, вот итоговая таблица с оценками (по 10-балльной шкале):

Автор текста: Антон Тулупников