AI-инструменты для написания кода: тест 5 сервисов на реальных задачах

Я тестировал Copilot, Cursor, Claude Code, Windsurf и Aider на трёх реальных задачах, и результаты оказались крайне различными

По своему опыту я скептически отношусь к подобным обзорам; большинство тестов происходит на простых задачах, таких как приложение со списком дел или сортировка массива, что не отражает реальную работу программиста

Я решил создать подходящий бенчмарк. Для этого выбрал три задачи из своей реальной практики: сложные, непосредственные и типичные для рабочего процесса

Вот результаты

Условия теста

Задачи:

Рефакторинг легаси-кода: Python-скрипт на 400 строк без тестов, без типов и с известным багом. Добавить аннотации типов, написать тесты и исправить баг, не сломав ничего остального

Разработка новой фичи с нуля: Построить конвейер данных в реальном времени с приёмом через WebSocket, трансформацией и записью в PostgreSQL. Должен поддерживать переподключение, backpressure и эволюцию схемы

У данного Node.js-сервиса была проблема: он иногда возвращал ошибки 502 под нагрузкой, и это происходило без каких-либо сообщений об ошибках. Проблему не удавалось решить уже две недели, и мне нужно было выяснить, в чём дело

Оценка по четырём критериям (1–10):

  • Точность: Выдал ли инструмент корректный, работающий код?
  • Понимание контекста: Понял ли он существующую кодовую базу?
  • Автономность: Насколько мне приходилось его направлять?
  • Скорость: Время от промпта до работающего решения.

Как выглядели интерфейсы в тесте

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

GitHub Copilot: редакционная имитация интерфейса AI-инструмента для написания кода
Имитация рабочего экрана GitHub Copilot в VS Code: автодополнение, чат и точечная правка бага в легаси-коде.
Cursor: редакционная имитация интерфейса AI-инструмента для написания кода
Имитация рабочего экрана Cursor Agent: кодовая база, выбранный файл, правка с учётом контекста и панель агента.
Claude Code: редакционная имитация интерфейса AI-инструмента для написания кода
Имитация терминального сценария Claude Code: чтение файлов, гипотеза по 502-ошибкам и план исправления.
Windsurf: редакционная имитация интерфейса AI-инструмента для написания кода
Имитация рабочего экрана Windsurf Cascade: пошаговые изменения, подтверждения и контроль рискованных правок.
Aider: редакционная имитация интерфейса AI-инструмента для написания кода
Имитация терминального сценария Aider: запрос, git diff, запуск тестов и предупреждение о границах контекста.

Задача 1: Рефакторинг легаси-кода

Мой тест включал скрипт, обрабатывающий CSV-файлы с данными от IoT-датчиков. Содержимое — 400 строк без комментариев, с наименованиями переменных вроде x, tmp и stuff. Этот код работает в продакшене уже два года, и никто не хочет его трогать

Известный баг: на файлах размером больше 10 МБ скрипт молча теряет последний пакет строк

GitHub Copilot — 6/10

Copilot быстро добавил аннотации типов и выявил несколько очевидных ошибок. Однако в процессе масштабного рефакторинга он столкнулся с трудностями — не смог уловить намерения, стоящие за оригинальными решениями. Хотя аннотации типов он добавил правильно, они получились поверхностными

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

Лучше всего подходит для: автодополнения и шаблонного кода. Не для архитектуры

Cursor — 7/10

Cursor продемонстрировал более глубокое понимание контекста всего файла. Его встроенные предложения для аннотаций типов оказались весьма удачными. Когда я выделил блок из 100 строк и попросил «отрефакторить это», он предложил чистое разделение с корректной обработкой ошибок

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

Лучше всего подходит для: рефакторинга с пониманием контекста

Claude Code — 5/10

Claude Code оказался слишком агрессивным. Когда я сказал «отрефакторь этот файл», он переписал всё с нуля — новая структура, новые паттерны, всё. Результат был чище, но поведение изменилось в тонких местах, которые сломали бы продакшен

Справедливости ради: когда я сказал «нет, просто добавь типы и исправь баги», он сделал именно это. Но мне пришлось поймать его первую попытку. Это не автономность

Лучше всего подходит для: проектов с нуля, где нужна свежая архитектура

Windsurf — 6/10

Крепкая база. Хорошее определение типов. Приличные предложения по рефакторингу. Но он запрашивал подтверждение на каждое отдельное изменение. После 47 подтверждений мне хотелось выбросить ноутбук в окно

В режиме cascade он стал более автономным, но и более склонным к ошибкам. Он заменил dict на defaultdict без предупреждения, что незаметно изменило поведение при ошибках

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

Aider — 4/10

Aider с трудом справился с файлом на 400 строк. Он постоянно терял контекст — вносил изменение, а затем предлагал другое, противоречащее первому. Предложенный рефакторинг был корректен сам по себе, но ломал импорты по всей кодовой базе

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

Лучше всего подходит для: небольших, чётко определённых задач с ясными границами

Победитель: Cursor (7/10)

Лучший баланс автономности и точности при рефакторинге легаси-кода

Задача 2: Разработка новой фичи с нуля

Построить сервис, который:

  • Подключается к WebSocket-потоку (тикер криптовалютной биржи)
  • Трансформирует сырые события в нормализованные записи
  • Пакетно записывает в PostgreSQL (1000 записей или 5 секунд)
  • Обрабатывает переподключение с экспоненциальной задержкой
  • Реализует backpressure — прекращает чтение, если очередь к БД превышает 10 000
  • Поддерживает эволюцию схемы — новые поля не должны ронять конвейер

Я дал каждому инструменту один и тот же абзац со спецификацией. Без стартового кода

GitHub Copilot — 4/10

Copilot — это движок автодополнения, а не архитектор. Он писал разумный код строка за строкой, но не имел никакого представления об общем дизайне. WebSocket-клиент был нормальным. PostgreSQL-писатель был нормальным. Но связь между ними — та часть, которая действительно важна, — оказалась беспорядком. Никакого backpressure. Никакого корректного завершения работы. Проблемы с потокобезопасностью повсюду

Мне пришлось самому проектировать архитектуру и использовать Copilot как более быстрый инструмент набора кода

Вердикт: Хороший напарник по программированию, плохой системный архитектор

Cursor — 8/10

Cursor произвёл на меня впечатление. Перед написанием кода он задал уточняющие вопросы:

— «Backpressure должен блокировать WebSocket-читатель или сбрасывать сообщения?» — «Вы хотите, чтобы эволюция схемы была строгой (отклонять неизвестные поля) или мягкой (хранить их в колонке JSONB)?»

Затем он сгенерировал полную, работающую реализацию. На основе AsyncIO. Правильное управление соединениями. Настоящий backpressure с asyncio.Queue(maxsize=10000). Эволюция схемы через колонку JSONB для переполнения. Всё примерно в 200 строках

Я запустил это против тестового WebSocket-сервера. Заработало с первого раза

Вердикт: Ближайшее к «AI-разработчику», что я видел

Claude Code — 6/10

Claude Code сгенерировал красивый код. Чистая архитектура. Аннотации типов везде. Комплексная обработка ошибок. Он даже добавил эндпоинт для проверки состояния (health check endpoint) и структурированное логирование, которые я не просил

Проблема: он использовал asyncio.gather() без правильного распространения ошибок. Когда WebSocket-соединение обрывалось, весь процесс молча зависал вместо того, чтобы упасть. Я поймал это во время тестирования, но это именно тот вид бага, который попадает в продакшен, если доверять результату, не читая его

Вердикт: Красивый код, незаметные баги. Всегда проверяйте перед деплоем

Windsurf — 7/10

Крепкая реализация. Хорошая структура. Он выбрал многопроцессный подход вместо async, с чем я не согласился, но это работало. Реализация backpressure была оригинальной — дросселирование на основе семафора вместо проверки размера очереди

Требование эволюции схемы он пропустил полностью. Мне пришлось явно его попросить

Вердикт: Надёжный, но не тщательный. Вам нужно быть менеджером проекта

Aider — 5/10

Aider выдал работающий код после трёх итераций. В первой попытке не было обработки ошибок. Вторая добавила обработку ошибок, но сломала пакетный писатель. Третья была функциональной, но имела незаметное состояние гонки (race condition) в логике backpressure

Вердикт: Ощущение, как от парного программирования с джуниором, который быстро читает документацию

Победитель: Cursor (8/10)

Его способность задавать уточняющие вопросы и проектировать систему от начала до конца не имеет аналогов

Задача 3: Загадочный баг

Node.js Express-сервис в Kubernetes. Под нагрузкой (>500 одновременных запросов) ~3% возвращают 502 Bad Gateway. Никаких стек-трейсов. Никаких логов ошибок. Health check работает нормально. Память и CPU выглядят нормально

Этот баг был открыт 2 недели. Его смотрели два старших инженера

GitHub Copilot — 3/10

Copilot — не отладчик. Он предложил проверить обработчики ошибок, добавить логирование и посмотреть конфигурацию reverse proxy — то же самое, что уже пробовали инженеры-люди

Вердикт: Бесполезен для отладки

Cursor — 6/10

Когда я дал Cursor доступ ко всей кодовой базе, он заметил кое-что: сервис использует пул соединений для downstream HTTP-вызовов, и у пула стоит таймаут по умолчанию 30 секунд. Но у сервиса есть middleware, которая устанавливает таймаут запроса в 29 секунд

Баг: при всплеске трафика соединения выстраиваются в очередь. Некоторые запросы достигают таймаута middleware раньше, чем пул соединений возвращает соединение. Middleware перехватывает таймаут и возвращает 502 — но ошибка происходит за пределами try-catch, который логирует ошибки. Никакого лога, никакого трейса, просто 502

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

Вердикт: Действительно полезен для отладки. Читает всю кодовую базу

Claude Code — 7/10

Claude Code нашёл тот же баг, что и Cursor, но быстрее. Он последовательно прочитал цепочку middleware, конфигурацию пула соединений и обработку ошибок и сказал:

«Между таймаутом middleware (29 с) и таймаутом пула (30 с) есть разрыв в 1 секунду. В этот промежуток запросы отменяются middleware, но обработчик ошибок не перехватывает ошибки отмены. Попробуйте добавить process.on('unhandledRejection', ...) и проверьте, не проглатываются ли ошибки отмены.»

Он был прав. Исправление заняло 3 строки в обработчике ошибок

Вердикт: Лучший отладчик из всех. Читает код как старший инженер

Windsurf — 5/10

Windsurf нашёл несоответствие таймаутов, но не связал его с отсутствием логирования ошибок. Он сказал «эти таймауты выглядят близко, может, в этом проблема?» — но не объяснил почему и как это проверить

Мне пришлось самому заниматься реальной отладкой

Вердикт: Намекает на ответ, но не доводит до конца

Aider — 4/10

Aider не справился с этой задачей. У него нет режима «прочитай всю кодовую базу и сформулируй гипотезу». Он работает с файлами, которые вы явно ему показываете. К тому моменту, как я показал ему все нужные файлы, я фактически сам уже всё отладил

Вердикт: Не предназначен для отладки

Победитель: Claude Code (7/10)

Быстрее всех пришёл к правильному диагнозу. Лучше всех рассуждает о взаимодействиях на уровне системы

Итоговые оценки

ИнструментЗадача 1 (Рефакторинг)Задача 2 (С нуля)Задача 3 (Отладка)Среднее
Cursor7867.0
Claude Code5676.0
Windsurf6756.0
Aider4544.3

Что выбрать под конкретную задачу

Если вы пишете код на жизнь — берите Cursor. Это единственный инструмент, который стабильно помогает во всех трёх типах задач. $20 в месяц дешевле, чем один час вашего времени

Если вы много занимаетесь отладкой — добавьте Claude Code в свой арсенал. Он рассуждает о коде иначе — больше как старший инженер, чем как движок автодополнения кода

GitHub Copilot нормален, если он у вас уже есть, но не стоит $10 в месяц, если его нет. Это навороченный автокомплит, а не помощник по программированию

Aider — лучший бесплатный вариант, если вы комфортно чувствуете себя в командной строке и не против направлять ИИ вручную

Windsurf — это Cursor, но более раздражающий в использовании. Пропустите его, если вам не нужна именно функция cascade

То, о чём никто не говорит

Все эти инструменты делают вас быстрее в написании кода. Ни один из них не делает вас быстрее в обдумывании того, что строить

Если вы не знаете, что делаете, ИИ поможет вам быстрее построить не то

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

ИИ — это усилитель, а не замена суждению

Ответы на эти вопросы могут быть для вас полезными

Какой инструмент лучше всего подходит для работы с легаси-кодом?

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

Стоит ли использовать Claude Code для написания нового кода с нуля?

С оговорками. Claude Code генерирует чистую архитектуру, но склонен к незаметным багам в асинхронном коде — например, к неправильному распространению ошибок в asyncio.gather(). Всегда проверяйте результат перед деплоем

Можно ли использовать Aider как основной инструмент?

Да, если задачи небольшие и чётко ограниченные. На файлах от 400 строк Aider теряет контекст и начинает противоречить сам себе. Для отладки сложных систем он не подходит

Чем Windsurf отличается от Cursor на практике?

По качеству кода они близки. Разница — в UX: Windsurf запрашивает подтверждение на каждое изменение, что замедляет работу. Режим cascade делает его автономнее, но увеличивает риск тихих ошибок вроде замены dict на defaultdict

Заменяют ли AI-инструменты понимание архитектуры?

Нет. Ни один из пяти инструментов не компенсирует отсутствие системного мышления у разработчика. Cursor задаёт уточняющие вопросы и строит правильную архитектуру — но только если вы сами понимаете, что именно строите

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x