Как можно программировать с помощью ChatGРТ
ИИ вызывает всё больший интерес со стороны разработчиков. Особенно интересно предположение, что скоро ИИ сможет заменить разработчика.
Проверим это!
Весь диалог с ИИ происходит на сайте openai.
Процесс выглядит следующим образом:
- Даём описание нужного кода на русском языке, с описанием входных данных, и алгоритма решения
- Анализируем результат на предмет корректности кода
- Делаем корректировку алгоритма, если ИИ свернул не туда
Изначально задача, хотим запрограммировать алгоритм вычисления некого KPI, который вычисляется на основании динамики ошибок инспектора кода в нашем проекте. Файлы проекта проверяются после каждого комита разработчика. Изначально оценка 500. Если кол-во ошибок уменьшилось, увеличим оценку. Если кол-во увеличилось, оценка снижается. И сделаем градацию приоритета ошибок, за критические ошибки будет понижать оценку сильней.
Даём первоначальное описание алгоритма:
Исходный код метода на java, для расчета оценки на основании следующей информации. Есть список файлов, и для каждого файла количество критических и некритических ошибок с датой проверки. Нужно посчитать общее кол-во ошибок на первую дату. Нужно посчитать общее кол-во ошибок на вторую дату. Сравнить полученные числа, и если количество ошибок выросло, то вычесть из 500 по 5 баллов за каждую новую ошибку. Если кол-во ошибок уменьшилось, то 500 плюс 5 баллов за каждую исправленную ошибку.
Видим по реализации, что у всех файлов должна быть одинаковая дата проверки, и в случае их несовпадения, часть файлов выпадет из подсчета.
Решаем что алгоритм слишком простой, и усложняем его.
Исходный код метода на java, для расчета числа на основании следующей информации. Есть список файлов, и для каждого файла количество критических и некритических ошибок с датой проверки. Дата проверки может быть любой. При поиске количества ошибок в файле на дату, надо будет найти запись с максимальной датой меньше или равной заданной. Нужно посчитать общее кол-во ошибок на первую дату. Нужно посчитать общее кол-во ошибок на вторую дату. Сравнить полученные числа, и если количество ошибок выросло, то вычесть из 500 по 5 за каждую новую ошибку. Если кол-во ошибок уменьшилось, то 500 плюс 5 баллов за каждую исправленную ошибку.
Видим, что код метода стал более структурированным, появился метод подсчета ошибок на дату getTotalErrors, но мы всё ещё оперируем одним числом кол-во ошибок без градации по приоритету.
Ещё немного усложняем алгоритм
Исходный код метода на java, для расчета числа на основании следующей информации. Есть список файлов, и для каждого файла количество критических и некритических ошибок с датой проверки. Дата проверки может быть любой. При поиске количества ошибок в файле на дату, надо будет найти запись с максимальной датой меньше или равной заданной. Нужно посчитать кол-во ошибок на первую дату. Нужно посчитать кол-во ошибок на вторую дату. Сравнить полученные числа, и если количество ошибок выросло, то вычесть из 500 по 5 за каждую новую некритическую ошибку, и 100 за каждую критичную. Если кол-во ошибок уменьшилось, то 500 плюс 5 баллов за любую исправленную ошибку.
Реализация снова изменилась, почему то пропал метод getTotalErrors, да и в целом код не выглядит рабочим.
Что ж, попробуем по другому дать описание. Ну и снова немного усложним алгоритм.
Исходный код метода на java, для расчета числа на основании следующей информации. Есть список файлов, и для каждого файла количество критических и некритических ошибок с датой проверки. Дата проверки может быть любой. При поиске количества ошибок в файле на дату, надо будет найти запись с максимальной датой меньше или равной заданной. Нужно посчитать кол-во ошибок на первую дату. Нужно посчитать кол-во ошибок на вторую дату. Сравнить полученные числа. Начальная оценка 500. Если количество некритичных ошибок выросло, то вычесть из начальной оценки по 5 за каждую новую некритическую ошибку. Если кол-во ошибок некритичных уменьшилось, то 500 плюс 5 баллов за любую исправленную ошибку. Если количество критичных ошибок выросло или не изменилось, то нужно из оценки вычесть 100 за каждую критичную ошибку.
Причем результаты между запусками могут различаться:
А как же юнит тесты?
Проверим, умеет ли ИИ писать юнит тесты, потому что не все разработчики любят это делать.
Даём задачу:
«Также нужно сгенерить юнит тесты для всех методов выше.»
Из приведенного примера можно сделать вывод, что ИИ достиг большого успеха за последнее время. И даже не зная контекста, создает заготовку кода, которую можно использовать в своём продукте.
Явно видим что роль разработчика не становиться не нужной. С одной стороны ему не нужно писать код с нуля. С другой стороны, правильно разбить задачу на необходимые шаги алгоритма, тоже иногда непросто. А количество кода который нужно будет оперативно прочитать и понять вырастает в разы.
Продолжаем наблюдение!
ChatGPT, также известный как GPT-3, является искусственным интеллектом, способным генерировать текст на основе заданных параметров. Хотя он не предназначен для написания кода, вы можете использовать его для создания текстовых команд и инструкций для программирования. Например, вы можете использовать ChatGPT для создания списка шагов для выполнения определенной задачи в определенном языке программирования, или для получения советов по устранению ошибок в вашем коде.
Однако, чтобы действительно программировать с помощью ChatGPT, вам нужно иметь хорошее понимание языка программирования и алгоритмического мышления. ChatGPT не заменит вашу способность понимать и создавать код, но он может помочь вам в процессе написания кода, предоставляя вам советы и подсказки на основе вашего ввода. Вот что сам чат говорит по этому поводу.
Заменить разработчика ChatGPT пока не может. Он готов и может решать несложные задачи, без знания контекста и не опираясь на существующий кода. Поэтому его применение в реальных проектах довольно ограниченно. К тому же при не слишком длительном общении выясняется что он может заблуждаться, и давать синтаксически неверный код. С использованием несуществующих контрактов методов и классов.
Но даже в текущем виде, выглядит очень многообещающе.
Также есть альтернатива, в виде COPILOT, ИИ предназначенный для помощи разработчику, который анализирует контекст проекта, и даёт более осмысленные подсказки.
Но не смотря на всё это, при прямом сравнении, COPILOT меня впечатлил меньше.