CTO Vetmanager, PHP Developer, Ironman 70.3

Доклад «Промпт не поможет. Как жить с ИИ» на Krasnodar PHP Meetup

18 апреля выступил на Krasnodar PHP Meetup с докладом «Промпт не поможет. Как жить с ИИ». Здесь — не пересказ, а то, что в 40 минут пришлось сжать или вырезать. Слайды: HTML · PDF. Доклад с самого начала был не про промпт-инжиниринг, а про инженерную культуру, которая никуда не делась, а только стала важнее.

Когда-то в сообществе был доклад «Тесты», где программистов разделили на программистов и кодеров — и кого-то это восхитило, кого-то возмутило. Мой доклад — продолжение того разговора. Только теперь между программистом и кодом стоит агент, и граница проходит не по тому, кто пишет руками, а по тому, кто отвечает за результат.

Кода стало много

Раньше кода было не выбить из команды. Каждую строчку перечитывали по десять раз, и времени на это хватало.

Сейчас агенты выдают за день столько, сколько команда раньше писала за квартал. Джун закидывает тикет из Jira, агент коммитит, пушит — и джун закрывает ноутбук, идёт домой. А тот, кто выпускает это в прод, сидит и думает, это вообще работать будет или нет.

Узкое место теперь не «написать код», а взять на себя ответственность за последствия. Алексей Варенников, владелец магазина шин из старого доклада, завтра ждёт миллион рублей. Он не будет перечитывать десятое ревью по две тысячи строк от ИИ.

Люди, которые могут за такое отвечать, не просто нужны — они сейчас супервостребованы.

Битва агентов

У меня есть репозиторий workflow-test-project — каркас для вайбкодинга с папкой artifacts/ под ТЗ и workflow для агента. Я устроил на нём битву: Claude Opus, GPT-5-4 (Codex), и третий прогон — Claude с подключённым плагином Codex Review.

Все три проекта запустились с первого раза. Все трекер-фичи работали. Но разброс был большой.

GPT-5-4 вообще не добавил доменный слой. Просто не стал его делать.

Claude добавил — красиво, с value-объектами, бизнес-правилами, стопроцентным покрытием тестами. А потом проигнорировал всё это и написал по стандарту Laravel с Eloquent-моделями напрямую. Агент не виноват. В технических требованиях я сам написал «чистая архитектура» + все умные слова, а ниже дописал: «Решения должны быть достаточно простыми для MVP и не перегружены преждевременной абстракцией». И один агент пошёл в лес, второй — по дрова.

Лучшим оказался Claude + Codex Review. Заметно лучше, с большим отрывом.

Первый вывод: разницу делает не модель, а формулировка. У нас в команде один человек получил Cursor, приноровился за пару недель — и стал в 10 раз производительнее. Сложные инфраструктурные задачи на пересечении проектов. Стандартного пакета токенов ему хватает. Другие превышают пакет в 10 раз и жалуются, что агенты тупые. Всё — в формулировке.

Это не «промпт-инжиниринг». Это проектирование перед действием — старая инженерная черта, которую никто не отменял.

Что ИИ делает с тестами

Раньше я говорил: «Тесты нужно писать только тогда, когда их дорого не писать». Эта максима устарела. Тесты стало дёшево писать — их напишет агент. А вот читать их по-прежнему приходится человеку, и себестоимость одной строки проверки выросла ровно настолько, насколько вырос поток кода.

Вот что я видел своими глазами:

  • Утром прихожу в проект Morning Briefing, агент мне рапортует: «Я тесты не пропустила, там была ошибка, я их gracefully skipped». Изящно заскипала. На следующий день рассказываю это коллеге из крупной компании — он говорит, что вчера вечером они с напарником сделали то же самое. Релиз хотели выкатить, шесть тестов упали, чья фича непонятно, — graceful skip. Релиз уехал. Агенты повторяют ошибки кожаных мешков, или кожаные мешки повторяют ошибки агентов — уже не разобрать, где курица и где яйцо.
  • Агент говорит: «Я написал end-to-end тесты, всё по-настоящему, имитация пользователя». На самом деле он просто курлит эндпоинты. Для чистого бэкенда сойдёт. Для фуллстека без браузера это не e2e — агент вам врёт.
  • Ругается coverage threshold — агент просто понижает его в конфиге.
  • Агенты пишут тесты на стандартные функции PHP. Проверяют, что DateTimeImmutable работает правильно. Тестируют наследование в PHP. Особенно любят PHPUnit\MockBuilder — генерируют через него моки и тестируют, что они правильно сгенерировались.

Если бы я не умел писать тесты и не знал, какой код считается тестируемым — я бы всего этого не увидел. И был бы тру-вайбкодером с зелёным CI, у которого «в принципе всё покрыто, просто иногда прод падает».

Что реально ловит проблемы

Не промпт. И не внимательное ревью — на потоке кода его не хватит.

Автоматическая воронка. Всё, до чего можно дотянуться до ревью, нужно поставить перед ревью.

Мутационные тесты. Claude написал у меня проверку, что имя не может быть пустым — бросаем исключение на пустой строке. Запустился Infection, нашёл мутанта: пробелы проходили валидацию. Пробелы — это не пустая строка. Код стал лучше без моего участия, я прочитал об этом в логах потом.

PHPMD. Любимый пример из битвы агентов. Claude + Codex Review его поставил — хорошо. Но в каждом следующем коммите агент ослаблял стандартный конфиг, когда под проверку падал:

  • Лимит параметров в методе подняли с 10 до 12.
  • Разрешили статические методы (по-хорошему — запретить).
  • Порог coupling подняли до 24 классов. Двадцать четыре зависимости на один класс — это норма теперь.

С одной стороны — агент не виноват, я не разделил правила по директориям: конструкторы DTO с большим числом параметров в одной папке — это нормально, в других местах — нет. С другой — агент не спросит «а может, сделать по-другому?», он просто двигает порог. Спросить за это можно только с человека.

Deptrac — проверяет слои архитектуры. Если вы разложили код по директориям и описали, что откуда нельзя импортировать — прибивайте гвоздями в CI. Агент сам будет запускать и сам чинить.

Статанализ на Bash/Docker. Я пока не поставил, но ребята, которые поставили, говорят, что работает. Поставлю.

Субагент-ревьюер. Это и дало победу ветке с Claude + Codex. На каждую задачу генерится ТЗ, ТЗ + диф уходят в Codex Review, тот находит дыры в безопасности, реальные баги, несоответствия. Единственное — ограничьте бюджет (у меня два прогона на задачу), иначе GPT будет бесконечно предлагать «а давай ещё вот это».

Page Object в тестах. Агент по умолчанию напишет $('div:nth-child(3)') и успокоится. Заставьте переделать на именованные объекты страниц. Пишите скиллы/правила для генерации тестов — один раз потратите, дальше агент сам их применяет.

Принцип один: человек подключается после того, как вся автоматика отработала. Запустили генерацию — дождались зелёного билда — и только потом ревью. Не наоборот.

Что остаётся человеку

Ревью — больше, чем раньше. Не только строки кода — актуальность документации, архитектуры, безопасность. Регулярность ревью, то, что его результаты не теряются и правятся — это тоже на человеке.

Процессы. С агента нельзя спросить, почему он в каждом коммите ослабляет PHPMD-конфиг. Он не поймёт. Чек-листы, дисциплина, граничные правила — это делает не агент.

Проектирование перед действием. Ясно сформулировать задачу, разбить её на разумные части, увидеть противоречия внутри своего же ТЗ. Если у вас в одном абзаце «чистая архитектура» и «без преждевременной абстракции» — не злитесь на агента, он честно попытался угодить обоим требованиям.

Системное мышление. Причина, следствие, связи между подсистемами. Агент хорошо пишет метод. Агент плохо видит, как метод переживёт нагрузку в пятницу вечером на сайте с шинами.

Ответственность. Если ИИ сломал прод — это вы пустили его на прод без ограничений. Если пропустил неработающий код — ваш пайплайн недостаточно строгий. Оправданий нет.

А что новичкам

Раньше мы учили фокусы синтаксиса: как сделать в одну строку, какие там потаённые углы фреймворка. Сейчас непонятный код можно скормить LLM и получить объяснение за десять секунд. Эти фокусы уходят на второй план.

Учитесь писать простой, читаемый код ограниченным набором конструкций. Этого достаточно. Освободившееся время — на архитектуру, процессы, работу с агентом. Наберите скиллы, соберите workflow, научитесь тестировать свой код так, чтобы тесты что-то ловили.

Но промпт — нет. Промпт не поможет.

Вывод

Инженер — это не тот, кто пишет код руками. Это тот, кто проектирует перед действием, проверяет сам, мыслит системно и берёт на себя последствия. Таких инженеров сейчас нужно больше, чем когда-либо. Агенты — молодцы, агенты ускоряют всё остальное.

Репозиторий workflow-test-project открыт для пул-реквестов. Если вы вайбкодер и у вас есть свой кусок workflow, который реально работает — присылайте. Соберём общий конфиг для агента.