Перестал бояться и полюбил

Перестал бояться и полюбил

На практике бегло посмотрим, что может, как работает и в чём недостатки применения ИИ в программировании. Чтоб не быть голословным, разберём на примере: касса.майор.онлайн - многопользовательская реализация Conway's Game of Life.

Достаточно написать запрос: "Напиши реализацию игры Life на php для web с применением MariaDB, где клетки на общем поле могут принадлежать разным игрокам" - ИИ выдаст нам вполне себе рабочий, вероятно за счёт наличия открытых примеров реализации, код, что на мой скромный взгляд выглядит вполне себе фантастически :) однако, уже тут надо для себя понимать, что интересует web реализация на php для конкретной БД (диалекты SQL различны, и это проявляется в реализации). Добавляем "Действие игры происходит автоматически с фиксированным периодом независимо от игроков. Игровое поле закольцованное." - и это нормально находит отражение в коде. В классической реализации поле является торообразным, и это ИИ реализует обычно без явных на то указаний, однако в некоторых итерациях не принимает во внимание, по тому следует прописать такое требование явно. Да и вообще, любое требование/ожидание следует прописывать (и не только для ИИ).

Если у вас не мега объёмный проект, то имеет смысл на каждую корректировку запускать полную генерацию, чтоб это исправление случайно не покорёжило текущую реализацию (т.е. перепроверять-то потом всё равно всё). Изначально пробовал GigaChat, который в принципе справлялся, но в итоге реализовал с помощью DeepSeek. В финале попробовал на бесплатном ChatGPT - с ходу не выдал ожидаемый результат, но из явного плюса, результирующие файлы предоставил архивом. Claude Code в бесплатной версии "не осилил" итоговые требования.

В качестве намёка на бизнес специфику, добавляем уточнение: "Рождённая клетка будет принадлежать тому игроку, у кого количество участвующих в рождении клеток было больше, а иначе она принадлежит "Бирже". "Биржа" - первый и единственный системный игрок, который становится владельцем рождённых клеток, если иначе не удаётся однозначно определить владельца по участвующим в создании клеткам."

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

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

Т.к. присутствует клиентская и серверная часть, то понадобилось явным образом указать, что используем только POST метод и json формат. Иначе (не вдаваясь в существенную разницу между POST и GET), наблюдалась рассинхронизация: отдаём одним образом и переменные кладём так, а принимаем другим, и переменных ожидаем иначе; а для авторизации ещё и Bearer Auth дополнительно готовы принять на всякий случай. С JavaScript тоже казус был - переменные теряли свои названия, но в этом помогло указание формировать JavaScriipt через компиляцию TypeScript`а.

Финалом можно упомянуть проблему магических значений - т.е. некоторые одинаковые по (на)значению константы разбросанные по разным языковым уровням: php, javascript, css - но это уже потом заметил и не стал пересобирать, т.к. оказалось относительно прозрачно (в этом маленьком примере).

В итоге

Вполне себе инструмент, если вы относительно в теме программирования и умеете ловить моль 8) все понадобившиеся пояснения к ИИ нельзя сказать чтоб избыточны для процесса разработки: без внятного ТЗ — результат ХЗ.

P. S.

При наличии достаточного числа откликов, могу выложить весь промпт как есть - всего 600 слов :)

2