ChatGPT – хайп или реальная помощь разработчику?

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

Я решил проверить, действительно ли ChatGPT может помочь разработчику. Имею опыт программирования на разных языках, совсем недавно перешел на Go (пишу блокчейн-проект). Решил сузить задачу до такой: мог бы мне, разработчику с опытом, новичку в Go, хоть немного помочь ChatGPT.

Пример 1

Давайте начнем с простого. Хочу найти элемент в срезе (slice) — расширенном аналоге массива. Давайте зададим вопрос боту. MA в этом чате и далее — это я.

143b5c8f4db01622ffa8b68bfb9d673c.png

Что хорошо:

  • Код компилируется, есть пример применения бинарного поиска

  • Есть выводы сообщений «найден/не найден»

  • Есть базовые объяснения алгоритма, хотя упоминается функция Index, подразумевается Search.

Что плохо:

  • Код, конечно, не работает как надо, т.е. срез не отсортирован, а это основное требование к бинарному поиску. Но говорится, что массив д.б. отсортирован.

  • Выглядит сложно для новичка. Я бы предпочел цикл или пакет slices и IndexFunc, если не было явного требования о «быстром» поиске.

Пример 2

Но давайте явно укажем, что массив не сортированный.

0b993288c8a31b7ec8bf854032afa0ae.png

Что хорошо:

  • В принципе, хорошо почти все:) и код рабочий, и совет дан хороший.

Что плохо:

Пример 3

Давайте перейдем к более специфичному примеру. Попробуем напечатать значение, заданное в Wei, в ETH (1 ETH = 10^18 Wei):

da10460d6261a72e1382baf70e3f07da.png

Что круто:

  • Почти все! Ну действительно, приятно удивил результат. Он действительно переведет в ETH значение wei (да, конечно, Int может не хватить, но можно инициализировать wei через wei.SetString)

  • Правильная единица конверсии (10^18)

  • Откомментированный код

  • Бот, похоже, обучается на основе фидбэка от пользователей. Предыдущий результат, который я получил несколько часов назад, включал очевидно неверный код с делением big.Int на big.Int.

Пример 4

Давайте попробуем получить баланс в USDT заданного кошелька в сети Ethereum:

52cd832a464c088400c91382d627ec3a.png2940110b6a9b171af664ff91ea566db7.png

Что хорошо:

  • Шаблон программы действительно сгенерирован и в целом имеет правильную структуру (подключение к API, получение баланса, печать)

  • Подключены правильные библиотеки (go-ethereum)

  • Подставлены осмысленные имена переменных

  • В одном из запросов (не в этом) был правильно определен адрес USDT в нужной сети (Ethereum Mainnet)

  • Бот правильно понял, что число символов после запятой равно шести и правильно написал код печати

Что плохо:

  • Правильный баланс этот код не напечатает. Не вдаваясь в подробности, но он напечатает (после правок) баланс в ETH (не в USDT)

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

(Добавлено) Пример 5

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

c5a066c28d7c263ba430140da9a0ed15.png33998d861ca4021462663ba8a701150a.png

Как будто, все правильно (комментарии бота опустил). Но давайте теперь создадим саму таблицу с тестовыми данными:

4576e242ab501de158de2b6a2ba3b561.png

Я попробовал это запустить и… все заработало, таблица с данными создалась, код выполняется и выводит данные в консоль!

63e4df528f50f9f8a6d0b5e38be66542.png

(!) Единственное изменение, которое пришлось сделать — это установить правильную строку подключения к БД.

Что хорошо:

  • В этом примере все получилось как нужно. Однозначно буду использовать ChatGPT для простого прототипирования. Сильно быстрее было сделать два запроса к боту, чем набирать код вручную.

Итак, субъективные выводы:

  • ChatGPT — впечатляющая разработка. Код из всех примеров может работать с изменениями различной степени, либо вообще без изменений

  • ChatGPT уже можно использовать для вдохновения (например, понять, какие библиотеки можно взять для решения задачи, пример 4), для быстрого прототипирования (пример 5), или чтобы не тратить время на реализацию тривиальных операций (результат примера 3 я бы взял в продакшен)

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

  • Вижу классное нишевое использование подобных ботов, например, в плане поиска нужных библиотек и примеров из них, что потенциально может быть встроено сразу в IDE (вот тут кто-то уже запилил плагин для VSCode), или для сдачи лабораторных преподавателю, не особо разбирающемуся в теме:) (надеюсь, такие уже не встречаются)

© Habrahabr.ru