Главное в ходе расследования — не выйти на самого себя.
Вайбкодинг сейчас удобно пинать. AI пишет говнокод. AI не понимает архитектуру. AI плодит technical debt. AI делает красивую демку, которая разваливается при первом контакте с реальным продуктом. Всё так. Такое бывает.
Но есть один нюанс: мы уже проходили через это раньше. До Claude Code, Cursor, Copilot и всех этих AI-ассистентов мы что, жили в монастыре чистой архитектуры? Каждая спека была вылизана? Каждый hotfix проходил через архитектурное ревью?
Мы и раньше писали ад хок. Мы и раньше накидывали костыли, потому что “релиз горит”. Мы и раньше за неделю разработки могли накопить техдолга на месяц вперёд, а потом очень взрослым лицом объяснять, почему это было неизбежно.
У нас вообще был отдельный жанр: с умным лицом объяснить глупую ошибку так, чтобы она звучала как архитектурное событие. Не “я случайно написал https вместо http”, а “проблематика требовала переходного интеграционного паттерна”.
А дальше всё по классике: спека была сырая, сроки сжали, бизнес поменял требования, продакт сам не знает, чего хочет, а нормальный рефакторинг мы, конечно, сделаем потом.
Поэтому когда я слышу, что вайбкодинг создаёт плохой код, мне хочется спросить: по сравнению с чем? По сравнению с идеальной инженерией из книжек — да, выглядит опасно. Но по сравнению с обычной реальностью разработки во многих продуктах? Вайбкодинг не выглядит как новая болезнь. Он выглядит как та же болезнь на ускоренной перемотке.
AI не изобрёл плохую инженерию. Он просто сделал её быстрее, дешевле и заметнее.

git blame в legacy-проекте: коммиты от codex и claude-code, но самые подозрительные строки — авторства you, 2021 год.
Developer excuses deprecated since v5.6 — разговорник

CHANGELOG.md — developer excuses v5.6.0: старые отговорки deprecated, личная ответственность удалена как breaking change.
Смешно не потому, что AI ни в чём не виноват. Виноват, конечно. Он может генерировать мусор с энтузиазмом промышленного станка.
Смешно потому, что большую часть этих грехов мы прекрасно знали и до него.
Просто когда костыль писал человек, у костыля была биография, контекст и уважительная причина. А когда такой же костыль пишет модель, мы сразу называем это slop и делаем вид, что ответственности больше нет.
Можно даже собрать маленький разговорник:
| Разраб говорит | Что на самом деле | Когда это сделал AI |
|---|---|---|
| “Это временное решение” | Страшный хак, который написал я | AI slop |
| “Это страшный хак” | Страшный хак, который написал не я | Наконец-то доказательство, что AI опасен |
| “Мы разблокировали релиз” | Протащили костыль, потому что горело | AI бездумно накодил костылей |
| “Мы быстро итерировались” | Архитектуру поменяли на ходу и не везде | AI не понимает архитектуру |
| “Это прагматичный компромисс” | Технический долг, но сейчас удобно не думать | AI плодит technical debt |
| “Там есть несколько сложностей” | У меня глючный код | AI не справился с edge cases |
| “Код немного мутный” | В чужом коде нет комментариев | AI генерирует unreadable code |
| “Код говорит сам за себя” | В моём коде нет комментариев | AI не документирует решения |
| “Нужно будет потом переделать” | Работает, но я сам не до конца понимаю как | AI сделал неподдерживаемый код |
| “Там исторически так сложилось” | Никто уже не знает, почему это работает | AI ломает legacy-контекст |
| “Это выходит за рамки задачи” | Фича мне не нравится | AI не понимает product intent |
| “Нужно уточнить требования” | По текущей спеке можно построить что угодно | AI сделал не то, что я имел в виду |
| “Нужен архитектурный рефакторинг” | Сейчас в проекте уже четыре способа делать одно и то же | AI добавил пятый |
| “Продакшен покажет” | Тестов нет, но очень надо выкатить | AI нельзя доверять без тестов |
| “У нас не было времени” | Мы сознательно выбрали скорость вместо качества | AI снижает качество инженерии |
| “Потом закроем техдолг” | Никогда | AI создаёт неконтролируемый technical debt |
| “Надо посмотреть git blame” | Надо узнать, кто это сделал, и надеяться, что не я | AI slop, ответственности нет |
| “Git blame тут не поможет” | Скорее всего, поможет, но я уже знаю ответ | Модель сама всё испортила |
| “Там исторический контекст” | git blame показывает моё имя | AI не понимает legacy |
| “Это было временное решение” | git blame показывает, что временное решение живёт с 2021 года | AI создаёт неподдерживаемый код |
Раньше у нас хотя бы был git blame. Можно было посмотреть, кто занёс этот “временный” костыль три года назад, молча вздохнуть, увидеть своё имя и аккуратно закрыть вкладку. Ритуал завершён.
С AI всё стало удобнее: виноват вроде бы никто конкретно, виноват “инструмент”. Красивая схема. Хотя на самом деле git blame всё равно должен был бы показывать не модель, а человека — того, кто написал мутную задачу, принял diff, пропустил ревью или смержил в пятницу, потому что “в демо выглядело нормально”.
«Он сделал не то, что я имел в виду»
Одна из любимых претензий к AI-кодингу: “Он сделал не то, что я имел в виду”. Ну да. А люди раньше всегда делали ровно то, что вы имели в виду? См. таблицу выше.
Разработчик тоже не читает мысли. Он строит не то, что было у вас в голове, а то, что понял из задачи, старого кода, дедлайна, Slack-переписки, странного названия метода processNewDataV2Final и трёх противоречивых комментариев в PR.
С AI многие этот этап выкинули. Пишут: “зарефактори”, “почини баг”, “добавь платежи”, “улучши архитектуру”, “сделай production-ready” — и ждут, что модель сама восстановит продуктовый замысел из вайбов.
Но “улучши архитектуру” — это не задача. Это заклинание. Улучшить для чего? Для скорости? Безопасности? Тестируемости? Минимального diff? Обратной совместимости? Миграционной безопасности? Соответствия текущим паттернам? Вот это и есть задача. Без неё вы делегируете не инженерию — а угадывание.
Если показать рукой примерно в туман — не удивляйтесь, что AI уверенно строит там микросервис.

Человек показывает рукой в туман с просьбой make it better — AI-агент уже строит там микросервисы.
AI не читает мысли. И, честно говоря, это полезный удар по всей индустрии: оказывается, формулировать задачу всё-таки надо.
AI не ломает процесс. Он ставит его на турбо
AI-инструменты не попадают в стерильную лабораторию. Они попадают в реальную кодовую базу. А там часто уже праздник. Тесты есть, но скорее как декор. CI зелёный, потому что проверяет лёгкие пути. Три паттерна конкурируют за одну работу. Границы модулей — вежливая фикция.
И вот туда запускают AI-агента. Потом все удивляются: “Он сделал хаос”. Нет. Он не сделал хаос — он нашёл хаос и начал работать по его правилам.
Если в проекте уже есть три паттерна, модель добавит четвёртый. Если границы модулей условные, она будет их пересекать. Если требования мутные, она сгенерирует мутное решение. Если культура — “протащим и разберёмся”, агент протащит быстрее.
Модель — это не культура разработки. Это зеркало с GPU.

Робот смотрит в зеркало с прикрученной сверху GPU — в отражении уставший разработчик с кофе и тегами TODO и FIXME.
AI не ломает процесс. Он ставит существующий процесс на турбо. В зрелой системе это ускоряет полезную работу. В сломанной — ускоряет сломанность. Команда с ясными контрактами, тестами, которые что-то значат, и явным runtime-слоем для инструментов получает рычаг. Команда, которая и так шипит на надежде, получает надежду быстрее.
Хороший вайбкодинг выглядит подозрительно скучно
Плохой вайбкодинг выглядит как магия: “Я написал две строки, AI сделал фичу”.
Хороший вайбкодинг выглядит гораздо скучнее: “Вот контекст. Вот что меняем. Вот что не трогаем. Вот критичные сценарии. Вот файлы, куда нельзя лезть. Вот паттерны проекта. Вот тесты, которые должны пройти”.
Скучно? Да. Зато работает.
Модель может написать код, но человек проверяет смысл. Модель может предложить абстракцию, но человек решает, нужна ли она системе. Модель может накидать тесты, но человек смотрит, проверяют ли они поведение — или иллюзию поведения.
AI тут не магический архитектор. Стив Джобс когда-то называл компьютер “велосипедом для ума”, тогда AI — это электросамокат для ума. Быстрее, педали крутить не надо, шлем, как обычно, опционален.
Только заметьте: самокат — для ума. Для вашего ума.
Да, AI иногда несёт уверенную чушь с лицом senior staff principal distinguished engineer — но ведь и вы так умеете. Иногда. Дашь мутную задачу — получишь быстрое мутное решение. Дашь хорошую рамку — получишь ускорение.

AI как электросамокат для ума: быстрее, полезно, и в столб можно въехать сильнее.
Код дешевеет. Ясность дорожает.
Вот, кажется, главный сдвиг. AI сделал код дешёвым. Не хорошим. Не безопасным. Не поддерживаемым. Просто дешёвым в производстве.
Теперь можно очень быстро получить тысячу строк почти правильного кода. И вот это “почти” — самая опасная часть.
Есть хорошая мысль, что работа программиста ближе не к печатанию текста, а к работе часовщика: важна не масса деталей, а точность их сцепления. Если шестерёнка чуть не там — механизм врёт.
С AI-кодом примерно так же. Одна неточная догадка в требованиях. Один лишний слой абстракции. Один неправильно понятый edge case. Один тест, который проверяет не поведение, а иллюзию поведения — и система выглядит нормально, пока продакшен не объяснит обратное. Тот же режим отказа, что знают команды production ML: не всегда неверно, но с разбросом.
Именно поэтому проблема не в том, что AI иногда ошибается. Проблема в стандартном отклонении этих ошибок. Если точность гуляет слишком сильно, быстрая генерация превращается не в ускорение, а в рулетку. Applied AI — это не веб-сервис, и AI-кодинг тоже. Сложность переехала выше по трубе.
Но разработка не стала проще. Сложность просто переехала. Раньше было дорого писать код. Теперь дорого ясно думать: ясно сформулировать задачу, ясно обозначить границы, ясно сказать про риск, ясно провести ревью. Команды, которые относятся к RAG и retrieval как к “просто трубам”, узнают то же: дорогим было не печатание.
Так что история не в том, что “AI пишет плохой код”. Да, пишет. Но и мы писали.
Разница в том, что теперь плохой код появляется быстрее, дешевле и с более удобным подозреваемым.
И тут можно сколько угодно ворчать про slop, агентов, вайбкодинг и “раньше было инженернее”. Но ты правда удалишь Cursor, Claude Code, Copilot, Codex — и вернёшься к автокомплиту и упрямой гордости?

Мем: “Then maybe don’t talk about it, sir.”
Часто задаваемые вопросы
О чём статья «git blame codex»? Это мнение про AI-кодинг: большинство претензий к AI slop описывают грехи, которые инженерия и так совершала — AI просто сделал их быстрее, дешевле и сложнее для сокрытия за git blame.
AI-кодинг создаёт больше technical debt, чем люди? Не обязательно больше — но быстрее. Те же мутные спеки, отсутствие тестов и архитектурный дрейф теперь масштабируются со скоростью агентов.
Кто отвечает, если AI написал плохой код? Всё ещё человек, который принял diff. Git blame указывает на того, кто смержил изменение, написал промпт или пропустил ревью.
Почему говорят, что AI «сделал не то, что я имел в виду»? Потому что задача была недоопределена — тот же провал, что и с размытой задачей для человека.
Как выглядит хороший вайбкодинг? Намеренно скучно: явный контекст, ограниченные изменения, критичные сценарии, паттерны проекта и тесты на поведение.
AI — это электросамокат для ума? Метафора статьи: быстрее велосипеда, но всё ещё нужен водитель. AI ускоряет уже существующий процесс.
Командам стоит отказаться от AI-ассистентов? Скорее всего, нет — и не стоит делать вид, что самоката нет. Реальный вопрос: кто держит руль.