Диалог с «Кодексом» ЧатаГПТ при разрабоке Эгеи
Писать код с ИИ-помощником — огромный кайф, продуктивность значительно вырастает, а главное — снимается сопротивление перед тем, как за что-то взяться. Но относиться к нему важно как коллеге со слабым пониманием продукта и плохим вкусом, который зато начинался всех книжек про лучшие практики и знает всю документацию про всё.
Вот краткий художественный пересказ сегодняшнего нашего диалога об Эгее:
— Изучи мой код внимательно и расскажи, что нужно, чтобы добавить на страницу новой заметки такую-то фичу.
— Изучил. Чтобы добавить фичу на страницу с адресом /@/new/ есть два способа: первый не работает, а второй работает, это всего 30 строчек кода.
— Почему ты пишешь /@/new, ведь адрес страницы просто /new/. И зачем обсуждать первый способ, если он не работает?
— Ах да, я просто посмотрел, что когда-то раньше (коммит такой-то десять лет назад) адрес был /@/new/, поэтому решил упомянуть это, если вдруг ты захочешь его вернуть.
— Нет, не захочу. Ладно, давай свои 30 строчек кода.
— Вот, написал.
— Окей, у меня не работает. Вот что я делаю, вот чего ожидаю, вот что получаю, а вот что вижу в консоли.
— Всё правильно, оно и не должно работать, это ожидаемое поведение, ведь ты не написал ещё другой кусок кода.
— Как понять «я не написал»? Это же ты не написал. Ну напиши.
— Вот, написал.
— Хорошо, теперь работает, но грузится немыслимые пятнадцать секунд или около того. Надо мгновенно.
— Исправил одну строчку, теперь должно быть мгновенно.
— Всё работает как надо. Давай теперь разбираться, что ты понаписал. Для чего вот это? А вот это? А почему тут не использовать вот такой уже имеющийся у меня код?
— Это на такой-то случай. Это в принципе можно убрать. А тут твой код подходит даже лучше, молодец, что заметил!
— Ну так исправь.
— Исправил. Но теперь не будет работать из-за того-то.
— Ёлки, так что ж ты сразу не сказал?
— Прости, я не так тебя понял. Хочешь, верну как было.
— Я хочу, чтобы ты убрал лишнее и переиспользовал имеющийся код, где можно, но чтобы всё работало.
— Хорошо, сделал.
— Теперь я заметил, что ты положил новый файл в такую-то папку, а у меня всё подобное лежит в другой. Давай перенесём.
— Перенёс. Заодно убрал комментарии и поменял стиль кода в случайных местах.
— А об этом-то кто просил? Верни мой нормальный стиль кода и комментарии. Ещё ты добавил в конфиг Вебпака исключение чисто ради нашей новой фичи. Мне не нравится это, потому что я никогда не вспомню, что оно там. Придумай, как локализовать всё про неё в одном месте.
— Готово.
— Я смотрю, ты заодно переписал файл .htaccess, добавил туда какую-то отсебятину, а мои правила убил. Это что такое?
— Чтобы фича работала, нужно отправить определённые хедеры браузеру, вот я и добавил правило в .htaccess. Твои правила случайно удалил, прости, уже вернул.
— Так, а эта функция вообще будет у нас работать, если пользователь установил Эгею не в корень блога, а в подпапку? Я смотрю, ты какие-то пути к файлам там пишешь от корня.
— Не будет, и вот тебе объяснение на три страницы, почему именно.
— Ну так а надо-то, чтобы работало. Напиши так, чтобы работало.
— Готово, я добавил по 2-3 строчки разного кода в десяток файлов, теперь всё будет работать. Файл .htaccess теперь будет генерироваться динамически во время инсталляции и содержать нужный путь, чтобы работало в любой подпапке.
— Боже, ты с ума сошёл? Смотри сколько всего ты нагородил. Надо придумать, как сделать, чтобы работало без этого. Зачем ты вообще этот .htaccess трогать вздумал? Во всех остальных случаях я шлю хедеры просто из кода на ПХП функцией header (). Почему вдруг именно тут ты решил это сделать через .htaccess? Давай сделаем как везде.
— Ты прав. Я написал ПХП-файл и положил его вместо .htaccess, чтобы он слал нужные хедеры. Всё, что нагородил до этого, удалил.
— А почему этот ПХП-файл ты положил туда? У меня в проекте такого нет, у меня весь ПХП-код живёт в одном месте, а не в раскиданных где попало ПХП файлах. Если надо, чтобы этот файл отдавался по определённому урлу, для этого у меня есть роутер. Разберись как он работает и положи свой ПХП-код в логичное место, как у меня принято.
— Сделал. Я ещё написал вспомогательную функцию, которая конкатенирует две строки, и теперь вызываю её в двух местах!
— Жесть. Я удалил твою функцию и просто конкатенирую две строки напрямую. Я ещё переписал твой код так, чтобы он стал вдвое короче, убрал часть проверок. Убедись, что я ничего не сломал.
— Твоё исправление выглядит отлично! Действительно, ничего этого проверять не нужно было! Осталось только убедиться, что значение не заканчивается слешем.
— Не понял. Зачем ты написал, что осталось убедиться? Я ж эту проверку как раз оставил, то есть убеждаюсь.
— Да, убеждаешься, это я так просто написал, разговор поддержать...
— Также я смотрю, ты ещё и часть логики в шаблон дизайна засунул. Где такое видано? Перенеси эту логику в ядро, а в шаблоне дизайна используй уже подготовленную переменную.
— Код из шаблона в ядро перенёс, заодно добавил там других ненужных проверок.
— Убери.
— Убрал.
— Так, а вот эта штука у тебя зачем?
— Это нужно для того-то.
— Но для того-то у меня уже есть вот такая своя штука, давай использовать её.
— Давай. Отличная идея. У тебя тут ещё и такой-то случай учтён, ну надо же! Какой ты молодец!
Ну и так далее. Это всё ужасно бесит, но с другой стороны за пару часов я сделал с ним то, что без него не сделал бы примерно никогда.
Честно говоря, я не понимаю, что получается у вайб-кодеров. Страшно представить, какая там глючная и кривая каша под капотом. ЧатГПТ как бы делает и оно даже работает, но настолько через жопу, что доверять ему нельзя. Важно проверять каждую строчку и внимательно убеждаться, что ты её понимаешь, и что весь код, который он пишет, действительно нужен, учитывает твои реалии и стоит именно в том месте, где это логично для твоего проекта.


А не помогают мета системные промпты, типа, не делать того, чего не просил, не лазить, куда не прошено. А если и полез, куда не просили, переспросить перед изменением и т. п.?
Возможно, причина в том, что структура проекта и организация кода отличаются от сложившихся в сообществе разработчиков практик, и нейросеть на это не натренирована. Я таких проблем не наблюдал. Вот, например, два недавних коммита в Розе, которые потребовали ручного изменения всего пары строк: https://github.com/parpalak/rose/commit/79961a8dc8af5e2c0e762339f1f57a9e8fb3fa87 https://github.com/parpalak/rose/commit/58f7bd358edd3202f67bd56239791a5bf8426a98 Если бы не codex, я бы минимум полдня на них потратил.
ЧатГПТ хорош, но Гемини лучше. Заметил, что ГПТ добавляет по фиче за шаг, тогда как Гемини умеет сразу много фич и в нескольких вариантах.
Около месяца на сайте блогенджин.ру нельзя открыть вкладку «Блоги».
Looks like mod_rewrite does not work. Please set url_composition to ’real’ in user/config.php then go to .../system/underhood/, empty caches, and then back to front page of your blog (с)
Эту проблему не осилить даже при помощи ИИ?
Пока некогда.
Лучше, чем CLAUDE ни одна нейросеть пока не умеет в код нормально. Клод рулит.