haiodo.blog

ИГОП и поехали, или как меньше чистить и больше проверять

Год спустя после ассенизатор-driven development: что изменилось, и почему теперь можно проверять 20 гипотез в день вместо двух.

Год спустя


Примерно год назад я написал про ассенизатор-driven development - про то, как мы перестали писать код и начали разгребать то, что нам нагенерил ИИ. Тогда это было прямо так. Чистить приходилось много-много.

Сейчас это тоже частично так. Но становится лучше. И появились скиллы для чистки - линтеры, гейты, правила, ревью-агенты. Только не это главное.

Главное в другом: модели двигаются вперёд, а качество кода при использовании механизмов контроля и управления становится доступным. Не гарантированным - доступным. Разница принципиальная.


Идейная-идея

Теперь уже почти можно сказать, что у нас есть инструмент для идейно-гипотезо-ориентированного программирования.

Раньше как было. Есть гипотеза: “а если хранить не так, а вот эдак - станет быстрее?” Чтобы её проверить, надо написать код. Проверить. Добиться, чтобы он мне нравился. Пару дней на одну-две гипотезы - и это в хорошем случае, когда не уехал в рефакторинг соседнего модуля.

Теперь я проверяю 20 гипотез в день. Не потому что стал умнее. Потому что стоимость проверки упала на порядок. А когда убедился, что оно мне нравится - вот тогда довожу код до нужного уровня. Руками, вдумчиво, как раньше.

Ключевое смещение: код перестал быть способом проверки идеи. Он снова стал результатом принятого решения.


Почему TDD вдруг заработал

В прошлом посте я честно писал напротив каждого совета: “Не спасает :-)”. TDD, линтеры, security-сканы - всё не спасало.

Кое-что поменялось. Не сами практики - поменялось то, кто их исполняет.

Раньше цепочка была такая: я пишу спеку → ИИ генерит → я проверяю. Три шага, и на третьем я тонул, потому что проверять чужой многословный код тяжелее, чем написать свой.

Теперь: я пишу спеку → агент генерит → агент прогоняет тесты, линтер, типы → агент чинит сам → я смотрю на результат, который уже прошёл через ворота.

Тесты, написанные ДО генерации, наконец работают - но не как страховка для меня, а как функция вознаграждения для агента. Ему есть куда упереться. Это не “ИИ стал лучше писать код”, это “у ИИ появился способ понять, что он написал плохо, без моего участия”.

PS: Спека, кстати, тоже мутировала. Раньше это был документ для человека. Теперь это исполняемый контракт: что на входе, что на выходе, какие инварианты, чего категорически нельзя. Пишется дольше обычного тикета. Окупается с первого прогона.


Spec-driven, а не vibe-driven

Разница между Spec-driven development и вайб-кодингом - примерно как между инженерией и надеждой.

Вайб-кодингSpec-driven
Что на входе“сделай мне красиво”контракт: вход, выход, инварианты
Кто проверяетникто, глазамитесты, типы, линтер, свойства
Когда узнаёшь о проблемев продедо первого коммита
Что делаешь при ошибкепромптишь зановоправишь спеку
Понимаешь ли кодне полностьюда, ты его спроектировал

Правая колонка - не новая методология. Это ровно то, чему учат лет тридцать. Просто раньше на это не хватало времени, потому что всё время съедало написание кода. Теперь время есть.

Ирония в том, что ИИ вернул ценность старым скучным вещам: типам, контрактам, тестам, чётким границам модулей. Всё, что раньше было “ну надо бы, но некогда”, стало тем, без чего агент работать не может.


Агентная разработка: что реально изменилось

Три вещи, которые сдвинули картину сильнее всего:

Обратная связь без человека. Агент, который может запустить тесты и прочитать ошибку, отличается от автодополнения примерно как компилятор от справочника. Он итерируется сам, пока не сойдётся - или пока не упрётся и не признается, что не может.

Параллельность. Пять гипотез можно проверять одновременно, в изолированных ветках. Раньше это упиралось в меня как в узкое место: одна голова - один контекст. Теперь узкое место - сформулировать пять внятных гипотез.

Стоимость выброса. Вот это, пожалуй, главное. Код, который писался два дня, выбросить психологически тяжело - жалко. Код, который сгенерился за десять минут, выбрасывается легко. А лёгкость выброса - это и есть свобода экспериментировать.

PS: Отдельно про изоляцию. Пускать несколько агентов в один рабочий каталог - это вернуться в то самое коричневое из прошлого поста. Отдельные worktree, отдельные ветки, никакого общего состояния. Скучно, но работает.


Что не изменилось

Честно, чтобы не выглядело рекламой светлого будущего:


Заключение

Год назад я писал, что профессия мутирует: мы не пишем код, мы его курируем. Мутация продолжается, но вектор сместился.

Мы двигаемся от “разгребать сгенерированное” к “формулировать и проверять”. От ассенизатора - к исследователю с очень быстрым лабораторным оборудованием. Оборудование иногда врёт, реактивы протухшие, а половина экспериментов не воспроизводится - но двадцать проверенных гипотез в день против двух это всё равно другая профессия.

Проще ли это? Судить вам. Так же ли болит голова? У меня точно :-)

Навык, который дорожает - не “быстро промптить” и даже не “быстро читать чужой код”. А сформулировать гипотезу так, чтобы её можно было проверить. Это, вообще-то, определение инженерного мышления. Просто теперь за него наконец платят.

Всем бобра.