Вайб-кодинг: что Copilot и Cursor ускоряют, а что ломают на самом деле

Vladimir.White

New member
Полгода назад я плотно подсел на вайб-кодинг, и до сих пор не могу решить, спас он меня или слегка испортил. Начиналось всё буднично: включил Copilot в редакторе, через месяц добавил подписку на Cursor, и ещё через неделю поймал себя на том, что пишу фичи, просто набирая комментарий и жмя Tab. Скорость выросла буквально в разы, но вместе с ней незаметно выросло и число моментов, когда я открывал собственный код как чужой и не понимал, что там происходит.

Первое, что ИИ реально ускоряет, — это скучное. Шаблонные эндпоинты, схемы валидации, миграции, DTO, обвязка тестов, парсинг дат, конфиги для деплоя, вот эти вот однотипные куски, на которые раньше уходил вечер. Copilot здесь работает как очень быстрый джуниор, который уже видел тысячу таких же контроллеров и уверенно дописывает по трём первым строкам. Отдельный кайф — нырнуть в незнакомый стек: надо было поправить сервис на Go, который я до этого видел только на картинках, и Copilot с Cursor вдвоём провели меня через это за пару часов вместо пары дней чтения документации.

Cursor в этом смысле зверь другого уровня, чем Copilot. Пока Copilot живёт внутри одной строки и одного файла, Cursor умеет править сразу десяток файлов по одному описанию задачи, держать контекст всего проекта и объяснять, почему тест упал. Именно в режиме агента я впервые почувствовал тот самый вайб: ставишь задачу текстом, идёшь за кофе, возвращаешься к диффу на триста строк. И вот тут начинается самое интересное, потому что ровно на этом этапе я перестал читать то, что мне сгенерировали.

А ломается в первую очередь архитектура. Модель отлично решает локальную задачу и почти никогда не думает о том, как её решение отзовётся через полгода: дублирующиеся слои, логика, размазанная по контроллерам, обходные пути вместо нормального рефакторинга, лишние зависимости, которые она притащила из обучающих данных и которые в проекте вообще не нужны. Второе — тонкие баги. Не те, что падают сразу, а те, что живут в гонках, в граничных условиях, в обработке ошибок и в кэше. Их видно только на нагрузке или на проде в три часа ночи, и никакой автокомплит вас о них не предупредит. Третье — безопасность: я не раз ловил сгенерированный код, где параметры склеивались прямо в SQL или в шелл, и выглядело это абсолютно невинно.

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

Есть ниши, где всё это превращается в чистую боль. Легаси без тестов, где модель уверенно переписывает кусок, не видя половины неявных связей. Оптимизация производительности и работа с конкурентностью. Домен, который живёт в головах у трёх человек и нигде не описан словами. Юридически чувствительная логика с налогами и выплатами. Всё, где цена ошибки выше стоимости ручного написания. Тут Cursor и Copilot всё ещё полезны как справочник и ускоритель набора, но отдавать им руль я бы не стал ни за какие деньги.

Что я вынес для себя после полугода экспериментов. Первое: vibe-режим отлично работает на новом коде в знакомом стеке и на всём, что можно быстро проверить тестом, и плохо работает на легаси, на оптимизации и на всём, что потом нельзя откатить. Второе: чем меньше задача, тем лучше результат, поэтому я режу работу на куски по двадцать-тридцать строк, а не прошу сразу фичу целиком. Третье: держу проект в git и коммичу до генерации, чтобы всегда был откат в одну команду. Четвёртое: тесты пишу сам или хотя бы внимательно правлю за моделью, иначе они превращаются в декорацию. Пятое: раз в неделю просто читаю то, что нагенерировалось, и безжалостно выкидываю лишнее. И главное правило, к которому я пришёл: если я не могу объяснить сгенерированную строку вслух, я её не мержу. Звучит как капитанство, но именно оно спасало меня чаще всего.

Так что мой вердикт после всего этого — ИИ не заменяет программиста, он сжимает скучную часть работы и одновременно повышает планку того, что называется «понимать свой код». Скорость теперь зависит не от того, как быстро я печатаю, а от того, насколько честно я читаю диффы. Кстати, а как у вас: какие задачи вы уже спокойно отдаёте Copilot и Cursor, а какие до сих пор пишете руками, потому что не доверяете? Очень интересно сравнить чужие границы, где вайб-кодинг превращается из суперсилы в тыкву.
 
Назад
Вверх