Close icon

Пишем приложение с ChatGPT

Постановка задачи

Мне хотелось сделать что-то приближенное к реальности, а не очередной hello world. Поэтому я решил что моё приложение будет обладать следующим функционалом:

  • Возможность авторизации
  • Добавление нового изображения с подписью
  • Отображение галереи изображений в виде таблице
  • Возможность открыть выбранное изображение на весь экран
  • Возможность открыть случайно выбранное изображение
  • Взаимодействие с файловой системой
  • Взаимодействие с базой данных
  • Взаимодействие с реально существующим АПИ внешнего сервиса
  • Покрыть приложение тестами

На мой взгляд это приложение уже ближе похоже на средний уровень реальной разработки, чем то что делают за 5 минут во многих видео и статьях

Условия

Я не пишу ни одной строчки кода. Всё делает ChatGPT. Выбор технологий тоже выбирает он. Я отвечаю только за архитектуру приложения и за организацию кода.

Сервер

В качестве технологии для сервера ChatGPT предложил мне выбрать библиотеку Flask на Python. Ок. Тем интереснее - мне не нравится Python и я на нём последний раз писал 6 лет назад. То есть в коде уровень моего понимания не будет высоким. Раз говорят что ChatGPT заменит программистов, то это приближенно к реальности.

Да. ChatGPT сгенерировал мне простенький сервер на Flask. По сути сделал просто запуск приложения и обработку корневого роута для отдачи HTML файла. Кроме этого управление модулями в Python отличается от того как это делается в Node.js. Поэтому я попросил ChatGPT сгенерировать и организовать мне локальное хранение модулей. Он сделал это через файл зависимостей

Главная страница

ChatGPT начал делать приложение как MPA (многостраничное приложение). Эта архитектура устарела, но да ладно. Для тестирования возможностей бота подойдёт. Значит для каждой страницы у нас будет свой html файл со стилями и скриптами.

На главной странице я хотел разместить обычную форму входа: заголовок, затем поле ввода логина, поле ввода пароля и кнопка авторизации. Разместить я хотел это всё в центре экрана. Вот тут начались проблемы. Оказалось бот не так хорош в вёрстку. Отцентрировать блок и разместить заголовок выше формы получилось только минут через 40 текстовых запросов. Сам бы я это сделал за минуту. ChatGPT постоянно меняет вёрстку и стили. При некоторых изменениях он забывает добавлять нужные стили. Естественно если, как нам утверждают, ChatGPT напишет код за любого программиста, то человек который не разбирается в стилях и вёрстке минут через 5 уже бросит это дело.

Подключаем внешний АПИ

Далее я захотел чтобы авторизация была возможна только после того как пользователь дополнительно введёт код, который приходит ему в СМС. В России есть сервис sms.ru, который предоставляет бесплатно 5 смс в день. На удивление ChatGPT быстро сгенерировал код взаимодействия с этим АПИ на Python по запросу на корректный url. Это действительно круто, потому что за пределами России вряд ли кто знает об этом сервисе. Документация у них и примеры только на PHP. В общем тут бот молодец. Удивил. Далее саму генерацию кода - набор случайных чисел определённой длины - ChatGPT тоже сделал без проблем

Работа с внутренним АПИ приложения

Я решил: раз бот лучше пишет код на Python, чем делает вёрстку, то начну с проработки сервера. И тут меня ждал подвох.

По умолчанию ChatGPT пишет всё в один файл. Причём достаточно случайным образом он периодически забывает те или иные уже написанные фрагменты кода. Постоянно приходится перепроверять, а не удалил ли что-нибудь нужное ChatGPT. Кроме этого бот использует совершенно разные подходы для организации АПИ. Сначала он использовал мне простое определение роутов в приложении и их обработку на Flask. Затем он выдал мне код с использование библиотеки для организации всего этого дела. И так в перемешку у меня код и был, пока я сам не распределил роуты по файлам и не выбрал один подход их генерации и не указывал прямо на него при общении с ChatGPT

Работа с БД и файлами

Бот ожидаемо порекомендовал мне PostgreSQL. Ок. Тут проблем не было. Подключение к БД бот сделал мне хорошо. Далее использовал ORM для взаимодействия с ней. После чего на выходе я получил на каждый роут сгенерированный код для сохранения и получения данных с БД. С сохранением в файловую систему изображений тоже проблем не было. Тут бот справился на хорошо.

Но стоит отметить что ChatGPT видимо принципиально не обрабатывает исключения. Поэтому просить обернуть его в try except приходилось самому. Поэтому я оценил эту его работу на хорошо, а не на отлично

Генерация остальных страниц

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

Приятным бонусом стало то что я попросил использовать стиль приложения ВК и бот сгенерировал мне стили с этого сайта для моих визуальных элементов.

Написание стилей

Стили бот пишет на чистом css без проблем. Единственное что он всё пишет в один файл с вёрсткой и вперемешку выбирает разные подходы: то он стиль пишет прямо inline в элементе, то он оформляет стиль в виде тегов style, то он вообще предлагает выделить стили в отдельный файл. При этом работая с одним и тем же элементов, он абсолютно случайно предлагает вам способ оформления стилей. Обязанности архитектуры пришлось взять на себя и явно указывать боту как именно я хочу чтобы были организованны стили.

Ещё одной проблемой бота является то что он использует устаревшие способы написания стилей. Например, он старается везде использовать inline-block и float, редко flex и ни разу не использовал grid.

Написание скриптов

С написание скриптов всё началось с тех же архитектурных проблем что и со стилями. Бот то добавляет скрипты в конец body, то в тег script, то выносит в отдельный файл. Архитектуру берём на себя, боту говорим как именно нужно организовать скрипт. Сам код бот пишет и хорошо и плохо одновременно. С одной стороны код получается рабочим и функционал реализован. Тут претензий нет. Но как специалист в JavaScript, я понимаю что использование переменных var и обработчиков промисов - это сильно устаревший стиль. Про const, let, async, await бот не знает. Если прямо об этом ему не говорить. А как человек не разбирающийся в программировании скажет ему об этом? Ведь как нам говорят ChatGPT заменит программистов, соответственно запросы к нему должны писать люди далёкие от разработки.

Стоит так же заметить что ChatGPT и здесь не уважает обработку ошибок. Видимо настолько уверен в своём коде что не допускает и мысли что что-то пойдёт не так. Все try - catch - finally пришлось объяснять боту самому.

Ещё одним неприятным сюрпризом стало то что бот активно использует идентификаторы и классы. Причём он их меняет совершенно не зависимо от того что указано в вёрстке. Поэтому иногда код пишется, но не работает потому что в вёрстке указан класс button-save, а в скрипте button-auth. Приходится перепроверять

Написание тестов

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

Преимущества ChatGPT для написания кода

Поскольку я стараюсь быть максимально объективным, я выделю преимущества ChatGPT:

  • Пишет работающий код на Python и JavaScript.
  • Умеет работать с внешними сервисами и АПИ
  • Умеет работать с базой данных и файловой системо

Недостатки ChatGPT для написания кода

Вот список недостатков, которые я выделил при работе с ChatGPT:

  • Плохо работает с вёрсткой
  • Не способен покрывать приложение автотестами
  • Полный ноль в архитектуре кода
  • Переписывает или забывает фрагменты кода без предупреждения
  • Постоянно меняет выбранные решения для выполнения одной и той же задачи
  • Не добавляет обработку исключений в код
  • Устаревший код

Не выделил в недостаток, но всё же стоит сказать об этом. У меня постоянно отваливалось соединение с ботом. Каждые две три минуты приходилось перелогиниваться. Может у меня были проблемы с сетью, но такое происходило только на сайте ChatGPT

Послевкусие и выводы

По моему мнению ChatGPT не годится для серьёзной разработки. То что кричат на каждом углу о том что он заменит разработчиков - это, я считаю, пиар. Если вы следите за айти, то вспомните что тоже самое кричали сначала про WordPress, затем про NoCode, потом про Flutter. Где все эти решения? Вот туда и отправится ChatGPT вместе с написанием кода.

Я не представляю как может человек не знающий про код прорабатывать архитектуру кода и понимать где и как нужно обрабатывать исключения. Это как минимум. К тому же этот человек точно будет пропускать моменты когда ChatGPT удаляет часть сгенерированного ранее кода. На больших проектах это будет ад.

Тем более есть уже решения, позволяющие писать код ещё проще без знания программирования. Это тот же WordPress, Tilda и другие NoCode решения. Однако что-то мы не пишем VK, ГосУслуги, огромные сервера обработки платёжных операция на этих инструментах. И если эти инструменты действительно позволяют ничего знать о коде, то ChatGPT обязывает хотя бы знать куда и как копировать фрагменты сгенерированного кода.

А теперь представьте что вы миллионер и вкладываете миллионы в ваше приложение. Доверили бы вы секретарше написание текстовых промптов для генерации кода? А что - скажут вам - ведь ChatGPT может писать код за программиста! Сомневаюсь что что-то стоящее вы сможете получить, а уж про вопрос поддержки такого приложения и говорить не буду.

Я считаю что ChatGPT не может заменить программиста. И написав свой проект я в этом удостоверился.

© Евгений Заикин

VK logoTelegram logo

evgenii.zaikin2607@yandex.ru