Когда машины пишут лучше нас — звучит как сюжет научной фантастики, но уже сегодня нейросети стали реальностью миллионов кодеров по всему миру. Сегодня мы не просто учим алгоритмы понимать код, а доверяем им писать его за нас.

Всё чаще ИИ даёт советы, которые оказываются лучше, чем изначальная задумка. Claude, ChatGPT, Qwen — эти модели уже не просто угадывают следующее слово, а демонстрируют понимание логики, стиля и даже контекста проекта. Они объясняют свои решения, исправляют баги, пишут тесты и даже помогают новичкам (и не только) разобраться в чужом коде.

Но кто из них действительно выигрывает в скорости, точности и глубине понимания? Кто понимает код от и до, а кто путается уже в середине? И главное — можно ли доверять коду, написанному нейросетью? 

Пора разобраться. Сравниваем трёх гигантов современного AI-программирования: Claude от Anthropic, ChatGPT от OpenAI и Qwen от Alibaba Cloud — в реальных сценариях, которые знакомы каждому разработчику.  

Приятного прочтения!  

Каким будет наше приложение? 

Мы создадим простой консольный калькулятор на C++ — минималистичный, но с полным набором базовых операций: сложение, вычитание, умножение и деление. Приложение будет поддерживать ввод с клавиатуры, обработку ошибок (например, деление на ноль) и цикл выполнения, чтобы пользователь мог выполнять несколько операций подряд без перезапуска.

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

Приложение не будет перегружено сложными фичами — нам важно проверить, как ИИ справляется с базовыми задачами, которые знакомы каждому программисту. Ведь именно от качества выполнения простых вещей часто зависит надёжность всей системы. 

Наш промпт будет таким: 

>>> Напиши простое консольное приложение на C++ — калькулятор, который выполняет четыре базовые арифметические операции: сложение, вычитание, умножение и деление. Используй С++ без сторонних библиотек.

Если вы тоже хотите попробовать какую-то модель из моего обзора, то переходите по этой ссылке и пользуйтесь не только ими, но и многими другими нейросетями без использования VPN

Claude Sonnet 4 

Самый длинный код написала нейросеть Claude Sonnet 4 — вышло 122 строки кода.

Калькулятор получился довольно удобный, не нужно запускать заново для нового вычисления (да-да, такое здесь будет), поддерживает все операции, которые описаны в промпте. Есть обработчик ошибок при делении на ноль или неверном вводе. 

Разбор кода 

Claude подключил две библиотеки: iostream и limits.

  • <iostream> — стандартная библиотека для ввода/вывода (cin, cout);

  • <limits> — нужна для доступа к numeric_limits, чтобы очистить буфер ввода. 

void clearInputBuffer() { 
    cin.clear(); 
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
} 

Если пользователь ввёл что-то не то (например, буквы вместо числа), cin «ломается» — устанавливается флаг ошибки.

double getNumber(const string& prompt) { 
    double number; 
    while (true) { 
        cout << prompt; 
        if (cin >> number) { 
            break; 
        } 
        else { 
            cout << "Ошибка: введите корректное число!" << endl; 
            clearInputBuffer(); 
        } 
    } 
    return number; 
} 

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

char getOperation() { 
    char operation; 
    while (true) { 
        cout << "Введите операцию (+, -, *, /): "; 
        cin >> operation; 
 
        if (operation == '+' || operation == '-' || 
            operation == '*' || operation == '/') { 
            break; 
        } 
        else { 
            cout << "Ошибка: введите корректную операцию (+, -, *, /)!" << endl; 
            clearInputBuffer(); 
        } 
    }  
    return operation; 
} 

Здесь вводится одна из четырёх операций, проверяется, что символ допустимый, и возвращается правильный символ операции.

double calculate(double num1, double num2, char operation) { 
    switch (operation) {  
    case '+': 
        return num1 + num2; 
    case '-': 
        return num1 - num2; 
    case '*': 
        return num1 * num2; 
    case '/': 
        if (num2 != 0) { 
            return num1 / num2; 
        }
        else { 
            cout << "Ошибка: деление на ноль!" << endl; 
            return 0;  
        }  
    default: 
        cout << "Ошибка: неизвестная операция!" << endl; 
        return 0; 
    } 
}

Функция 1) выполняет арифметическую операцию в зависимости от символа, 2) проверяет, не делится ли на ноль, 3) при неизвестной операции выводит ошибку и 4) возвращает результат. 

int main() { 
    cout << "=== Простой калькулятор ===" << endl; 
    cout << "Поддерживаемые операции: +, -, *, /" << endl; 
    cout << "Для выхода введите 'q' в любой момент" << endl << endl; 

Вначале нас информируют о всех функциях калькулятора, НО… калькулятор предлагает ввести q для выхода из него, а данной команды нет в коде — она обрабатывается как ошибка.

 char continueChoice;

  do {

      // Ввод первого числа

      double num1 = getNumber("Введите первое число: ");

      // Ввод операции

      char operation = getOperation();

      // Ввод второго числа

      double num2 = getNumber("Введите второе число: ");

      // Выполнение вычисления

      if (operation == '/' && num2 == 0) {

          cout << "Результат: Невозможно выполнить деление на ноль!" << endl;

      }

      else {

          double result = calculate(num1, num2, operation);

          cout << "Результат: " << num1 << " " << operation << " "

              << num2 << " = " << result << endl;

      }

Здесь происходит ввод двух чисел и ещё одна проверка деления на ноль до вызова функции calculate(). Она лишняя, так как calculate() уже этим занимается. 

while (true) {

        cout << "Хотите выполнить еще одно вычисление? (y/n): ";

        cin >> continueChoice;

        if (continueChoice == 'y'  continueChoice == 'Y' 

            continueChoice == 'n' || continueChoice == 'N') {

            break;

        }

        else {

            cout << "Введите 'y' для продолжения или 'n' для выхода." << endl;

            clearInputBuffer();

        }

    }

    cout << endl;

} while (continueChoice == 'y' || continueChoice == 'Y');

cout << "Спасибо за использование калькулятора!" << endl;

return 0;

Калькулятор спрашивает, хочет ли пользователь продолжить пользоваться калькулятором, принимает Y/N и либо продолжает цикл, либо завершает программу.

ChatGPT 5: мощь экосистемы OpenAI и её подводные камни

После самого длинного кода идёт самый короткий, написанный ChatGPT 5.

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

Здесь можно сразу ввести нужное выражение, без отдельного выбора первого/второго числа и математического знака. Насколько оно удобно — решает каждый сам для себя, но мне больше нравится вариант ввода, который предоставили Claude Sonnet 4 и Qwen3 Coder.

Разбор кода

Начинается всё с приветствия и небольшой инструкции к приложению:

int main() {

    std::cout << "Простой калькулятор (+, -, *, /)\n";

    std::cout << "Введите выражение в формате: a op b\n";

    std::cout << "Пример: 12.5 * 3\n";

Объявляет переменные, пытается считать с консоли верный ввод, иначе выдаёт ошибку.

double a, b;

char op;

if (!(std::cin >> a >> op >> b)) {

    std::cerr << "Ошибка ввода.\n";

    return 1;

}

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

double result;

switch (op) {

case '+':

    result = a + b;

    break;

case '-':

    result = a - b;

    break;

case '*':

    result = a * b;

    break;

При делении появляется проверка второй переменной — не является ли она нулём.

case '/':

    if (b == 0.0) {

        std::cerr << "Ошибка: деление на ноль.\n";

        return 1;

    }

    result = a / b;

    break;

Если никакая операция не подошла, то выводит ошибку.

default:

    std::cerr << "Неизвестная операция: " << op << "\n";

    return 1;

}

Вывод результата.

std::cout << "Результат: " << result << "\n";

    return 0;

}

Qwen3 Coder: азиатский подход к масштабу и локализации

И последняя нейросеть на рассмотрении у нас — Qwen3 Coder.

Имеет 62 строки кода. Так же как и калькулятор от ChatGPT 5, приходится запускать заново для новой операции.

Разбор кода

Qwen начинает писать код с объявления переменных: два дробных числа для операций, одно для результата и символ самой операции.

int main() {

    double num1, num2, result;

    char operation;

Выводится текст и запрашивается первое число через оператор cin.

cout << "Простой калькулятор\n";

cout << "Введите первое число: ";

cin >> num1;

cin.fail() — проверяет, был ли ввод корректным (например, если пользователь вместо числа ввёл букву).

Если ввод некорректен, выводится ошибка и программа завершается с кодом 1 (стандартный код ошибки).

// Проверка на корректность ввода числа

if (cin.fail()) {

    cout << "Ошибка: Введено некорректное значение.\n";

    return 1;

}

Дальше идёт то же самое, но с вводом операции и вторым числом. 

При вводе операции, если пользователь введёт несколько символов для операции (например, ++), будет обработан только первый символ (+), остальные останутся в буфере. Однако это некритично, так как следующий ввод (num2) пропустит лишние пробелы/символы.

cout << "Введите операцию (+, -, *, /): ";

cin >> operation;

cout << "Введите второе число: ";

cin >> num2;

// Проверка на корректность ввода числа

if (cin.fail()) {

    cout << "Ошибка: Введено некорректное значение.\n";

    return 1;

}

И последний штрих — switch. Здесь происходят все вычисления, а также запрещается делить на ноль.

switch (operation) {

    case '+':

        result = num1 + num2;

        cout << "Результат: " << num1 << " + " << num2 << " = " << result << endl;

        break;

    case '-':

        result = num1 - num2;

        cout << "Результат: " << num1 << " - " << num2 << " = " << result << endl;

        break;

    case '*':

        result = num1 * num2;

        cout << "Результат: " << num1 << " * " << num2 << " = " << result << endl;

        break;

    case '/':

        if (num2 != 0) {

            result = num1 / num2;

            cout << "Результат: " << num1 << " / " << num2 << " = " << result << endl;

        }

        else {

            cout << "Ошибка: Деление на ноль невозможно.\n";

        }

        break;

    default:

        cout << "Ошибка: Неверная операция. Пожалуйста, используйте +, -, * или /.\n";

        break;

    }

Стиль, структура, безопасность: как нейросети пишут код по-разному

Когда мы просим разные ИИ-модели написать один и тот же код, мы получаем не просто разные реализации — мы видим разные идеи программирования, заложенные в их обучении. Давайте глубже погрузимся в то, как Claude, ChatGPT и Qwen подходят к созданию кода, анализируя не только функциональность, но и качество написания.

Стиль программирования и структурные различия

Claude Sonnet 4 демонстрирует академический подход к коду с четким соблюдением принципов чистого кода и разделением ответственностей. Модель создает функции вроде getNumber и clearInputBuffer, но добавляет избыточные проверки вроде двойной обработки деления на ноль. 

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

Claude Sonnet 4 создает полноценное приложение с архитектурой:

  • четкое разделение на функции;

  • обработка состояния приложения;

  • поддержка пользовательского сеанса;

  • цикл событий с возможностью выхода. 

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

Вот как Sonnet 4 описал сгенерированный код:


ChatGPT 5 выбирает «трушный» C++-стиль, с использованием std::-префиксов и строгим следованием стандартам языка. 

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

ChatGPT предлагает алгоритмическую реализацию:

  • весь код в одной функции;

  • нет поддержки сеанса;

  • линейная обработка.

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

Особенностей своей программы ChatGPT не выдал :(
Особенностей своей программы ChatGPT не выдал :(

Qwen3 Coder использует «практичный» стиль программирования, объединяя всю логику в одной функции main() без излишней модульности, и обработка ввода и логика приложения переплетены в одном блоке.

Такой подход эффективен для быстрого прототипирования и простых утилит, но не подходит для сложных проектов, требующих поддержки и расширения.

Qwen занимает промежуточную позицию:

  • простая структура без дополнительных функций;

  • базовая обработка ошибок;

  • отсутствие поддержки сеанса.

Такой код напоминает тестовый проект, который написан для проверки работоспособности своей идеи. 

Сравнительный анализ

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

  • Для образовательных целей — Claude вне конкуренции: его код можно давать новичкам как пример правильной структуры и обработки ошибок. Но естественно, могут быть ошибки, как в нашем примере — избыточность проверок. 

  • Для быстрого прототипирования — Qwen идеален. Его код функционален, так как использует привычный интерфейс ввода (число, операция, число).

  • Для встраивания в другие проекты — ChatGPT выигрывает, благодаря своей лаконичности и чистому C++-стилю, без глобальных using

  • Для production-ready-решений — Claude снова в лидерах, благодаря многоуровневой обработке ошибок и поддержке пользовательского сеанса. 

Важно понимать: ни одна модель не «лучше» другой в абсолютном смысле: Claude перестраховывается, ChatGPT слишком минималистичен, Qwen слишком прост. Но именно эти различия делают их полезными в разных сценариях.

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

Таблица для тех, кто не любит читать 

Выводы

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

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

Если Вы считаете по-другому, или знаете более действенный способ генерации кода, то пишите в комментарии! 

Спасибо за прочтение! 

Комментарии (13)


  1. FadeToBlack
    14.08.2025 19:03

    Очень интересно, конечно же, но на мой взгляд, слишком простая задача. Анализировать такое простое задание серьезно - это, на мой взгляд, излишне. Вы про стиль кодирования нейросетей написали больше, чем они написали кода. На днях я занимался примерно тем же самым, только в качестве задания было написать игру "тетрис". И вот тут уже было интересно посмотреть - кто из сетей вообще справился с задачей, а кому пришлось исправлять свои ошибки (которые пришлось искать мне). В целом, это намного веселее, когда сеть может понять и исправить свои ошибки, а так же улучшить код по желанию "заказчика". Для этого я попросил создать простую 3д игру про животных в виде html-страницы. Нейросеть в качестве "животного" выдала мне кубик-тело с головой-шаром, и все это в темноте!

    Животное на Three.js - темно!
    Животное на Three.js - темно!

    Не долго думая, я попросил - добавь свет и ноги

    Стало светлее, а животное стало похоже на табуретку
    Стало светлее, а животное стало похоже на табуретку

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

    Нос, глаза и уши почти даже на своих местах
    Нос, глаза и уши почти даже на своих местах

    Здесь я уже снял бы шляпу... Да что там, снимаю сначала шляпу, а потом начинаю драть волосы на голове. Глаза, уши, нос... О чем еще можно мечтать? Кончено об управлении WSAD. Воевал я долго, стороны света были перепутаны, но в целом - оно меня понимает, оно меня слушается, и самое главное - мне не надо писать на богомерзком JavaScript, чтобы добиться результата. Даже если он не идеален, я смогу что-то подправить за несколько минут, пока еще помню, как это делается...


    1. Robyn_rock
      14.08.2025 19:03

      Вряд ли сам писал. Стиль изложения похож на Клода. И анализ Клод делал. А чтоб не тупил с анализом простую задачу разбирает.


  1. Drucocu
    14.08.2025 19:03

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

    Откройте на github репозиторий на 10000 строк, возьмите issue и попросите решить. Ну или хотя бы добавить какую-нибудь бесполезную опцию. Это будет наглядное сравнение.


    1. Hopenolis
      14.08.2025 19:03

      Gemini в aistudio с этим легко справляется. Загружаешь файлы, говоришь запили новую фичу или исправь старую и 90% рабочего кода получаешь сразу. Потом прогоняешь тесты выявляешь недоработки, получаешь обновление.

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


      1. Drucocu
        14.08.2025 19:03

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

        Нужно сравнение: со ссылочкой на репозиторий, на коммиты с решением от разных нейронок, запустилась ли первого раза или с 10-го, тогда это будет сравнение. А ваша субъективная оценка никому не интересна.


  1. Kollubov
    14.08.2025 19:03

    И эта проверка ни о чем. Она скорее говорит о слишком вольной постановке примитивной задачи, чем о каких-то способностях/возможностях того или иного движка. Тут не копнут даже самый минимум.


  1. Refridgerator
    14.08.2025 19:03

    О том, что нейросети могут решать задачи уровня лабораторных работ студентов 1-го курса непрофильных специальностей - мы давно уже поняли. Но а нормальные-то примеры когда будут? Ну хотя бы полноценный персер математических выражений с функциями, приоритетами операций и скобочками. Я конечно же знаю ответ "покупайте полноценную pro-подписку и будет вам счастье" - но сорян, он звучит как развод лохов по типичному инфоциганскому сценарию.


  1. Arxitektor
    14.08.2025 19:03

    Простой код / скрипты нейронки пишут очень даже не плохо. Мне тут нужно было написать скрипты для vmware хардеринг. Я сам не разу не писал на powershell да знаю можно было еще и Ansible использовать. Но остановился на powershell ибо в руководстве примеры были на нем. Использовал и Gemini и Claude. Да Claude пишет более объёмный код с большим количеством комментариев и проверок. Да я тоже буквально был в ступоре от того как оно тебя понимает... Раньше для кодирования не пользовался поэтому был в небольшом ступоре).

    А так да это очень и очень исполнительный джун. Как та секретарша из анекдота что может и 2000 символов печатать но иногда фигня получается. Бесплатные лимиты у Claude не высокие. Но тут можно и подписку на perplexity купить благо не очень дорого.


  1. Onyix67
    14.08.2025 19:03

    А вы попробуйте дать им проект хотя бы на 1000 строк (особенно если не Пайтон) и дать какую нибудь относительно сложную задачу. И сразу станет понятно, что GPT то ещё у*бище, которое вроде как сделает, то что ты просил, но с каким то костылями + добавит новых ошибок, которых в принципе не могло быть. А если его попросить исправить эти ошибки, то он может нагенерировать такую дичь, что по сути заруинит код, который работал нормально, и придется самому разбираться либо исправлять/переделывать с другой нейронкой. Уже было такое пару раз. Больше к GPT не притрагиваюсь.

    Вот сколько пробую различные ИИ, лучше Клода с проектами не справляется ни одна из них. (Ещё Gemini очень неплохо исправляет/дополняет код. Но писать на нем относительно большой проект не особо приятно)


  1. gbeam
    14.08.2025 19:03

    @Напиши простое консольное приложение на C++ — калькулятор, который выполняет четыре базовые арифметические операции:

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

    К сожалению, если отойти чуть в сторону от нахоженной дороги, т.е. попросить написать код, примеров которого в Сети нет или очень мало, то результат получается "немного предсказуем". То что я получал, пытаясь что-то нагенерить для моих задач (вычислительная геофизика, где большая часть кода, написанного внутри крупных компаний, закрыта), явно не лезло ни в какие ворота.

    Пока, сколько я не пробовал, я во всей этой ИИ кодогенерации вижу просто продвинутый поисковик для ленивых. Раньше мы просто искали код в сети (для более или менее распространенных задач всегда что-то находилось) и заимствовали его, внося необходимые изменения, а теперь этот процесс автоматизировали. Но если вам вдруг нужно что-то чуть более редкое, чем очередной Тетрис, то надо быть готовым к разочарованиям.


    1. defin85
      14.08.2025 19:03

      Было бы интересно посмотреть, с какими трудностями столкнулись и какого результата удалось добиться


  1. grucshetsky_aleksei
    14.08.2025 19:03

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

    Касаемо chatgpt, он стал явно тупее. Устал с ним бороться, старые модели будто в душу глядели, а этот будто со своим ненужным мнением на все лезет.

    В Grok пока не нашел преимуществ перкд конкурентами. Но мне понравилось, как он сам в деталях мне рассказал, как сэкономить на покупке подписки через Индию, в итоге он обходится мне в 8$ в месяц. Но самый дешёвый пока что Gemini - 5$ в год через студенческую почту(5$ - студенческая почтас на которую можно кучу сервисов бесплатно привязать)


    1. defin85
      14.08.2025 19:03

      А что за студенческая почта? И какие лимиты на Gemini по ней?