Добавить в корзинуПозвонить
Найти в Дзене

ChatGPT написал за меня код. Что пошло не так?

Представьте, что вам срочно понадобился скрипт для выгрузки данных из таблицы, отправки уведомлений или даже небольшой веб-сайт-визитка. Годы за учебниками по программированию тратить не хочется, а фрилансеры берут дорого. И тут на сцене появляется ChatGPT. Вы формулируете задачу простыми словами, как коллеге за кофе, и через секунды получаете аккуратные строки кода, с комментариями и пояснениями. Это чувство — почти волшебство. Кажется, что будущее наступило, и теперь любой может стать творцом цифрового мира. Но в этой истории часто есть вторая часть, про которую не пишут в восторженных постах. Часть, где скрипт неожиданно падает в полночь, теряет важные данные или, что хуже, открывает лазейку для посторонних. Я поговорил с несколькими разработчиками, которые прошли этот путь, и готов рассказать, что же обычно идет не так после той самой первой, идеальной команды нейросети. Иллюзия понимания, или Почему код работает «в вакууме» Самая большая ловушка — это ощущение, что ИИ вас действ

Представьте, что вам срочно понадобился скрипт для выгрузки данных из таблицы, отправки уведомлений или даже небольшой веб-сайт-визитка. Годы за учебниками по программированию тратить не хочется, а фрилансеры берут дорого. И тут на сцене появляется ChatGPT. Вы формулируете задачу простыми словами, как коллеге за кофе, и через секунды получаете аккуратные строки кода, с комментариями и пояснениями. Это чувство — почти волшебство. Кажется, что будущее наступило, и теперь любой может стать творцом цифрового мира. Но в этой истории часто есть вторая часть, про которую не пишут в восторженных постах. Часть, где скрипт неожиданно падает в полночь, теряет важные данные или, что хуже, открывает лазейку для посторонних. Я поговорил с несколькими разработчиками, которые прошли этот путь, и готов рассказать, что же обычно идет не так после той самой первой, идеальной команды нейросети.

Иллюзия понимания, или Почему код работает «в вакууме»

Самая большая ловушка — это ощущение, что ИИ вас действительно понял. Он выдает не просто код, а структурированный, с осмысленными названиями переменных, иногда даже с обработкой ошибок. Для новичка это сродни получению готового рецепта от шеф-повара. Проблема в том, что нейросеть не понимает сути вашего проекта. Она не знает, что ваш «список пользователей» — это на самом деле данные клиентов из старой CRM, где в поле «имя» иногда попадают цифры, а даты рождения могут быть будущими. Она генерирует самый статистически вероятный ответ, собранный из миллионов публичных репозиториев. И этот ответ идеален для абстрактного «списка пользователей» из учебника.

Например, вы просите: «Напиши функцию, которая добавляет email в базу данных и проверяет, есть ли он уже там». ChatGPT выдаст вам корректную функцию. Скорее всего, она даже проверит формат email через регулярное выражение. Но учтет ли она, что ваша база данных может быть временно недоступна? Что произойдет, если два пользователя одновременно попробуют добавить один и тот же email? Код будет работать 99% времени, но тот самый 1% приведет к дублированию записи или тихому падению скрипта. Как метко заметил эксперт по безопасности Трой Хант, ИИ пишет «наивный код». Код для идеального мира, который ломается при столкновении с хаосом и неидеальностью реальных данных и человеческих действий.

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

Плен шаблонов: устаревшие практики и проблемы роста

ChatGPT блестяще справляется с типовыми задачами, которые тысячами решались на Stack Overflow. Запрос к API? Получите. Простая сортировка? Пожалуйста. Но его знания имеют четкую границу — дату окончания его обучения. И это не просто теоретическая проблема. На практике вы можете получить рабочий код на устаревшей версии библиотеки, которая содержит известные уязвимости, с которой уже не совместимы другие части вашего проекта. Вы узнаете об этом, когда при попытке запуска сыпятся ошибки зависимостей, или, что страшнее, когда вашу систему взломают через дыру, закрытую три версии назад.

Другая беда — полное отсутствие архитектурного мышления. Нейросеть выдает вам готовый кусок, как деталь конструктора. Но она не скажет, подходит ли эта деталь к вашему общему замыслу, не предложит разбить её на модули для легкости поддержки, не задумается о том, как это решение скажется на производительности через год, когда данных станет в сто раз больше. Она решает задачу в вакууме. В итоге начинающие разработчики, активно пользующиеся ИИ, рискуют создать «франкенштейн-код» — монструозное, связанное на скорую руку приложение, которое потом невозможно ни расширить, ни передать другому специалисту. Профессор Арвинд Сатиа из MIT как-то сказал, что нынешние ИИ-инструменты — это «продвинутые автодополнения», лишенные способности к инженерному проектированию. Они не ценят простоту, модульность и удобство сопровождения, потому что не осознают этих концепций.

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

Слепой помощник: как ИИ непреднамеренно открывает двери хакерам

Это, пожалуй, самый серьезный раздел нашего разговора. ChatGPT не отличает безопасные подходы от опасных — он отличает часто используемые от редко используемых. А в интернете, увы, огромное количество примеров уязвимого кода. В результате нейросеть может спокойно предложить вам скрипт, который подставляет пользовательский ввод прямо в SQL-запрос (классическая инъекция), функцию загрузки файла, которая позволяет перезаписать системные файлы, или код, хранящий пароли в открытом виде.

Цифры здесь говорят сами за себя. Исследование Университета штата Нью-Йорк в Стоуни-Брук показало, что в 40% случаев ChatGPT предлагал код с уязвимостями, когда его просили решить типовые задачи. Это не злой умысел, а зеркало, отражающее средний уровень безопасности кода в открытом доступе. Как отмечал Марк Цукерберг, безопасность не возникает сама по себе — её нужно закладывать в основу системы. ChatGPT же не проектирует системы; он собирает текст по кусочкам.

Даже прямой запрос «напиши безопасный код» не панацея. Модель может добавить базовые проверки, но пропустить сложные сценарии атак, такие, например, как подделка межсайтовых запросов (CSRF). Она не способна провести анализ угроз для вашего конкретного приложения. Разработчик, слепо доверяющий такому коду, похож на человека, который устанавливает на дверь навороченный цифровой замок, но оставляет открытым окно в соседней комнате. Он полагается на то, насколько безопасные практики были популярны в интернете несколько лет назад, — это крайне шаткий фундамент.

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