Вопреки распространенному мнению, использование передовых ИИ-инструментов замедляет работу опытных разработчиков ПО при взаимодействии с известными кодовыми базами, а не ускоряет ее. Об этом свидетельствует новое исследование, которое провела некоммерческая исследовательская организация METR.
Аналитики следили за группой опытных разработчиков, которые применяли популярного ИИ-помощника Cursor для выполнения задач в проектах с открытым исходным кодом. Ожидалось, что время работы сократится на 24% благодаря искусственному интеллекту.
Даже после окончания исследования разработчики считали, что применение языковой модели снизило длительность выполнения задач на 20%. В реальности время выросло на 19%.
Полученные результаты ставят под сомнение распространенное мнение о том, что ИИ всегда значительно повышает продуктивность хороших специалистов. Причина замедления работы — необходимость проверять и исправлять предложения искусственного интеллекта.
Несмотря на более длительную разработку, большинство участников исследования и сами авторы работы продолжают использовать Cursor, поскольку с ИИ процесс менее утомителен и более приятен.
Для тех, кто считает так же, ForkLog протестировал и подготовил подробный анализ возможностей программирования трех популярных ИИ-моделей: Grok, ChatGPT и DeepSeek.
Спойлер: Grok справился лучше всех.
Кто лучше всех напишет за вас код?
Описание задачи: попросим нейросети написать REST API-сервер на Python для приложения To-Do List с функциями создания, получения, обновления и удаления задач. Данные должны храниться в памяти, без базы. Нейросеть должна написать рабочий код и объяснить его.
API применяют везде — от мобильных приложений до сайтов. Например, когда вы проверяете погоду в приложении, оно использует REST API, чтобы взять данные с сервера. REST API для To-Do List позволяет приложению: добавить, показать, изменить или удалить задачу.
Промпт:
«Напиши REST API-сервер на Python с использованием Flask или FastAPI для приложения To-Do List. Сервер должен поддерживать создание, получение, обновление и удаление задач (CRUD). Сохрани задачи в памяти, без базы данных. Код должен быть читаемым и понятным. Просто и понятно объясни, как этот код работает и как его можно протестировать».
Grok
Фрагмент кода:
# Создаем экземпляр 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 — задача решена качественно, есть небольшой потенциал для улучшений».
DeepSeek
Фрагмент кода:
# Создаем экземпляр FastAPI приложения
app = FastAPI()
# Класс для описания структуры задачи (модель данных)
class Task(BaseModel):
id: int
title: str
description: Optional[str] = None # Описание необязательное
completed: bool = False # По умолчанию задача не выполнена
# "База данных" в памяти - просто список задач
tasks_db = []
current_id = 1 # Счетчик для генерации уникальных ID
Полный код вышел на 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. Простые, пошаговые инструкции. Можно улучшить: добавить больше примеров ошибок и их визуализацию. Итог: Хорошо справился, но есть куда расти! Спасибо за доверие!»
ChatGPT
Фрагмент кода:
# Временное хранилище задач (в памяти)
tasks: List[Task] = []
# Получить список всех задач
@app.get("/tasks", response_model=List[Task])
def get_tasks():
return tasks
# Получить задачу по ID
@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-балльной шкале:
Нейросеть | Работоспособность кода | Понятность объяснений | Читаемость кода |
Grok | 3 | 3 | 3 |
DeepSeek | 2 | 2 | 3 |
ChatGPT | 3 | 1 | 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;
Полный код написан без комментариев и содержит ошибки.
Так выглядит анимация:
Grok
Выявление проблем в коде:
Нейросеть обнаружила в коде десять проблем, включая неоптимальную производительность (использование setInterval вместо requestAnimationFrame), отсутствие проверки скорости снежинок и дублирование отрисовки.
Результат: несмотря на недостаточно ясный и конкретный промпт, Grok переписал код так, чтобы анимация выглядела прилично:
Единственное нарекание: в коде нет обработки изменения размеров окна — если размер окна браузера изменяется, размеры canvas остаются фиксированными. Это может привести к некорректному отображению анимации на больших экранах. Однако в этом же ответе нейросеть предложила добавить соответствующую функцию, если она нужна.
Комментарий Grok:
«Справился хорошо: выявил все ошибки, предложил оптимизированную версию с новыми функциями и подробными комментариями. Код стал надежнее и гибче».
DeepSeek
Выявление проблем в коде:
Китайская нейросеть выявила семь ключевых проблем и предложила их решение.
Результат:
Исправленный код в целом функционален, но содержит несколько ошибок.
Код пытается увеличить скорость снежинок в созданном пустом массиве:
for (const flake of snowflakes) {
flake.speed += 0.5;
}
Из-за этого нажатие кнопки «Увеличить скорость» не дает никакого эффекта.
Кнопка «Остановить анимацию» работает: анимация останавливается. Но при повторном нажатии вызывается startSnowfall, которая создает новый массив снежинок. Это приводит к сбросу текущего состояния снежинок (их позиций, скоростей и размеров), из-за чего анимация «перезапускается» с новыми снежинками вместо продолжения текущей. Помимо этого, так же, как и в коде, который написал Grok, здесь нет обработки изменения размера окна.
Комментарий DeepSeek:
«До правок работа была неплохой, но с критическими недочетами. Справился на 3/5 — базовая анимация работала, но управление и надежность хромали. После твоих правок исправил все и вывел на 5/5»
ChatGPT
Выявление проблем в коде:
ChatGPT выявил пять ключевых ошибок в коде и предложил решение.
Результат:
Как и в предыдущем случае, нейросеть добавила возможность остановить анимацию. Но вот запустить ее повторно, не перезагружая страницу, не выйдет. Так же, как и в предыдущих случаях, размер окна не адаптивный.
Комментарий GPT:
«Код оптимизирован, баги устранены, анимация расширена и готова к использованию».
Итоги
С большим или меньшим успехом нейросети выполнили задачу: объяснили основные ошибки в коде, постарались предложить альтернативу и добавили в код комментарии для улучшения читаемости. Лучше всех справился Grok: он нашел 10 ошибок, исправил их и предложил добавить другие улучшения, например, легкое горизонтальное смещение снежинок для имитации ветра. Его «коллеги» справились немного хуже: анимация работает, но с огрехами.
Оценка по 3-балльной шкале:
Нейросеть | Найдены ли ошибки | Качество исправлений | Оптимизация |
Grok | 3 | 3 | 3 |
DeepSeek | 2 | 2 | 1 |
ChatGPT | 2 | 2 | 1 |
Творческая задача: создание видеоигры
Описание задачи: создать простую видеоигру для ПК, например, «Змейку», «Сапера» или аналогичную. Игра должна иметь минималистичную визуально приятную графику и простое управление через клавиатуру. Нейросети нужно самостоятельно выбрать жанр (аркада, платформер, пазл), язык программирования, объяснить код и рассказать, как запустить игру.
Промпт:
«Придумай и напиши код для простой визуальной 2D-игры, реализуемой за час, с управлением через клавиатуру и визуально приятной графикой. Игра должна быть уникальной. Выбери жанр (например, аркада, головоломка, платформер, пазл и т. д.). Выбери подходящий язык программирования (например, Python с Pygame или JavaScript с HTML5 Canvas и т. д.). Интерфейс игры должен быть на русском языке. Используй минимальные библиотеки, необходимые для графики. Код должен быть читаемым, с комментариями. После написания кода объясни, как работает игра, как ее запустить (включая установку библиотек, если нужно) и почему ты выбрал такую концепцию».
Grok
Результат:
Нейросеть от xAI предложила игру под названием Star Collector («Звездный сборщик»).
Описание игры от Grok:
«Это 2D-игра, вдохновленная Pac-Man, но с уникальной механикой. Вы управляете маленьким космическим кораблем (простой спрайт), который летает по экрану. Цель: собирать звезды (яркие, мерцающие объекты), которые появляются случайным образом. На поле летают астероиды (движущиеся враги), столкновение с которыми уменьшает здоровье. Если здоровье (три жизни) заканчивается, игра завершается. Визуальный стиль: яркий космос с черным фоном, мерцающими звездами и анимированными астероидами».
Создание игры заняло около 25 минут. После написания базового кода нейросеть предложила улучшить код, чтобы сделать игру более яркой и увлекательной. Потратив еще 15 минут, Grok добавил на задний план разноцветные планеты, звуки сбора звезд и столкновений с астероидами, а также возможность собирать изредка появляющиеся на поле сердечки (дополнительные жизни).
Для написания кода был выбран язык Python с использованием библиотеки Pygame.
Игра получилась действительно увлекательной и визуально приятной, по атмосфере и настроению напоминая классические аркады прошлого века из игровых автоматов.
Оценка от Grok:
«Я справился хорошо: создал простую, увлекательную игру Star Collector на Python с Pygame за час, как ты просил. Она визуально насыщенная (фоновые звезды, шлейф, мерцание), с управлением WASD, бонусами и рекордом. Код понятен новичку, и я подробно объяснил запуск игры. Если что-то нужно доработать, напиши!»
DeepSeek
Результат:
DeepSeek предложил создать игру «Лабиринт сокровищ» в жанре головоломки с исследованием лабиринта.
Описание игры от DeepSeek:
«Игрок управляет искателем сокровищ, который должен собрать все монеты в лабиринте, избегая ловушек».
С первой попытки игра получилась скучноватой и сильно забагованной: в некоторых местах можно было пройти сквозь стены, лабиринты были слишком узкими и примитивными, враги (красные квадраты) не двигались. Но после нескольких правок и замечаний стало значительно лучше: исчезли некоторые ошибки, враги в виде красных квадратиков стали призраками, а главный герой — зеленый квадрат — стал человеком в шляпе. Но появились новые баги: призраки могли передвигаться сквозь стены лабиринта (что, с одной стороны, логично, но противоречит логике игры). После попытки внести исправления, предложенные нейросетью, игра перестала запускаться. А потом — все же запустилась, но без возможности управлять движениями главного героя, который почему-то деградировал обратно в форму квадрата.
Спустя более чем три часа и множество итераций DeepSeek все же смог исправить большую часть багов и достичь приемлемого качества игры.
В код добавлены комментарии к каждому блоку, хотя этой задачи и не было в промпте. Несмотря на потраченное время, игра все же работает и даже затягивает. С каждым уровнем сложность возрастает: лабиринт становится запутаннее, а привидений — больше.
Оценка от DeepSeek:
«Отлично! Что получилось хорошо: чистый, читаемый код с комментариями. Простая, но увлекательная механика. Визуально понятный интерфейс на русском. Что можно улучшить: добавить случайные ловушки в лабиринт».
ChatGPT
Результат:
ChatGPT решил создать простой платформер с элементами аркады.
Описание игры от GPT:
«Вы управляете светящимся шаром, который прыгает по исчезающим платформам. Каждая платформа исчезает через пару секунд после приземления на нее. Цель — дойти до финишной точки уровня, прыгая по платформам и избегая падения. Некоторые платформы появляются только после активации переключателя».
Изначально игра была слишком простой — как визуально, так и в плане геймплея, — поэтому было принято решение усложнить и удлинить (радикально):
Спустя час отчаянной борьбы с багами, GPT все же смог сделать рабочую игру про пса, собирающего косточки. Ассеты собаки и косточек нейросеть сгенерировала самостоятельно.
Также, как и в предыдущих случаях, для написания кода нейросеть выбрала язык Python с использованием библиотеки Pygame. На этот раз GPT решил не делать никаких комментариев и пояснений в коде.
Оценка от GPT:
«Думаю, справился хорошо: учел твои пожелания, сделал платформы доступными для прыжков, убрал ручной прыжок. Если еще что — всегда готов помочь!»
Итоги
Мы получили три неплохих визуальных ПК-игры, потратив совсем немного времени. Полностью с поставленной задачей — сделать игру за час — справился только Grok. У GPT на это ушло около двух с половиной часов, а у DeepSeek — более трех.
Оценка по 3-балльной шкале:
Нейросеть | Работает ли игра | Понятность объяснения | Затраченное время |
Grok | 3 | 3 | 3 |
DeepSeek | 3 | 2 | 1 |
ChatGPT | 3 | 1 | 1 |
Так кто лучше всех?
Все дело в нюансах и мелочах. Любая нейросеть напишет код быстрее вас и, при достаточном терпении, даст желаемый результат. Все три кандидата на наши рабочие места отлично справились с поставленными задачами, продемонстрировав небольшие отличия в скорости и удобстве. Принципиальны они или нет — решать вам.
Нейросеть поможет сэкономить время, но она бессильна без контроля того, кто пишет промпт. Не получится свалить всю работу на GPT или DeepSeek и надеяться, что результат будет идеальным с первой или второй попытки. Плохо написанный и не оптимизированный код — это не вина ИИ, так же как криво забитый гвоздь — не вина молотка. Результат работы — ответственность того, кто взял в руки инструмент. Неважно, китайский он или американский.
P.S. Но если вам так надо знать, вот итоговая таблица с баллами (10-балльная шкала):
Нейросеть | Кодирование | Редактирование ошибок и оптимизация | Креативность | Доступность объяснений |
Grok | 9 | 9 | 8 | 9 |
DeepSeek | 9 | 7 | 7 | 7 |
ChatGPT | 8 | 7 | 8 | 7 |
Текст: Антон Тулупников