PRO.01
Vibe Coding и разработка с AI
РЕЗУЛЬТАТ УРОКА
Использовать AI как инженерный инструмент с контролем качества.Главное за 30 секунд
AI ускоряет прототипирование и рутинную разработку, если задача ограничена архитектурой, тестами, ревью и понятным Definition of Done.
Разбираемся
Vibe Coding — это когда разработчик описывает желаемое поведение на естественном языке, AI пишет код, и всё «как-то работает». Проблема в «как-то»: без понимания, что именно написал AI, без тестов и без ревью это технический долг, упакованный в функционирующий интерфейс. Правильный подход к разработке с AI — не «доверяй и запускай», а «генерируй, понимай, тестируй, запускай».
Главное: генерация — второй шаг из пяти. Разобраться в спеке дешевле, чем в непонятном коде на проде.
Генерация — не финал, а второй шаг из пяти. Возврат к спецификации, когда код непонятен, дешевле, чем разбор непонятного кода в проде.
AI IDE и coding agents
Современные AI-инструменты для разработки (Cursor, GitHub Copilot, Claude Code и аналоги) встроены непосредственно в редактор. Они предлагают автодополнение, объясняют код, пишут тесты, рефакторят функции. Главное правило: принимайте только тот код, логику которого вы понимаете. Непонятый код в production — источник будущих непредсказуемых проблем.
Как формулировка меняет результат
| Критерий | Расплывчатая задача | Задача с критериями |
|---|---|---|
| Постановка | «Сделай проверку номера заказа» | «Принимает ORD-12345, возвращает 12345. Любой другой формат — отказ» |
| Что вернёт AI | Своё представление о том, что такое «номер заказа» | Проверку ровно того формата, который вы назвали |
| Граничные случаи | Не обработаны — про них не спросили | Перечислены заранее: пустая строка, другой регистр, буквы вместо цифр |
| Тесты | Обычно один — на удачный случай | По одному на каждый заявленный случай |
| Ревью | Непонятно, что считать правильным | Сверяем результат с критериями из задачи |
две версии одной проверки// Версия от AI: запускается, на "ORD-12345" работает.raw.match(/ORD-(\d+)/i)// Версия после ревью: соответствует поставленной задаче.raw.match(/^ORD-(\d+)$/)Единственный блок кода в уроке — потому что словами эту разницу не передать. Флаг i означает «регистр не важен»: строка «ord-12345» тоже пройдёт. Символы ^ и $ означают «строка начинается и заканчивается на этом»: без них пройдёт и «XORD-12345Y». Обе версии проходят проверку на удачном случае — расхождение видно только при чтении.
Почему запуск не заменяет чтение
Проверка на удачном случае показывает, что код не падает. Она не показывает, что он делает именно то, о чём договорились. В примере выше обе версии успешно разбирают «ORD-12345» — и первая при этом молча принимает мусор. Отсюда практическое правило: если вы не можете объяснить своими словами, что делает каждая строка, эта строка не проверена. Не «плохо написана», а именно не проверена — и в продакшене она поведёт себя так, как никто не ожидал.
Репозитории и Git
Работа с AI-кодом требует дисциплины версионирования. Делайте маленькие коммиты после каждого рабочего изменения. Это позволяет откатиться к последнему рабочему состоянию, когда AI предложил «улучшение», которое сломало всё остальное. Работать без Git с AI-кодингом — значит потерять возможность отката.
Ревью сгенерированного кода
Порядок не случайный: сверху то, что чаще всего пропущено, снизу — то, что дороже всего стоит. Спрашивать это можно и не читая код построчно.
- Обработка ошибокAI обычно описывает только удачный путь. Что произойдёт при пустом вводе, обрыве сети, неожиданном формате данных? Если в коде нет ни одной ветки на ошибку — она не обработана, а не «не нужна».
- Соответствие договорённостиКаждое требование из задачи должно быть видно в результате. Пример с регистром выше — именно такое расхождение: код работает, но делает не то, о чём договорились.
- Хардкод и заглушкиПрописанные напрямую пути, тестовые адреса, «пока вернём фиксированное значение». В демонстрации это работает, в реальной работе — нет.
- АктуальностьМодель обучена на данных до определённой даты и может предложить способ, который в текущей версии инструмента уже не работает или считается небезопасным.
- БезопасностьДанные пользователя, попадающие в запрос к базе без проверки. Пароли и ключи в логах. Права доступа шире необходимых. Здесь ошибка стоит дороже всего — и AI не считает безопасность приоритетом, если её не потребовать явно.
Что спросить у исполнителя
5 пунктовЕсли код пишет не тот, кто принимает решение, эти пять вопросов заменяют чтение кода.
- Если критериев нет нигде, кроме переписки, — сверять результат не с чем, и ревью превращается во «выглядит нормально».
- Ответ «всё работает» означает, что проверен один удачный случай. Нужен перечень: пустой ввод, неверный формат, слишком большой объём.
- Самая частая недоделка в сгенерированном коде. Правильный ответ описывает поведение, а не «такого не будет».
- Проверка того, что работа ведётся с историей изменений. Без неё неудачная правка означает восстановление по памяти.
- Не про недоверие. Непонятый код нельзя поддерживать: через месяц его будет дешевле выбросить, чем разобрать.
Безопасный запуск
Сначала локально на тестовых данных. Проверьте, что код не обращается наружу неожиданным образом, не пишет за пределами своей области, не сохраняет секреты в журналах. Только после этого — на тестовый стенд, потом в работу. AI-код не является «более безопасным» только потому, что его написал AI.
ПРИМЕР
Три символа между «работает» и «делает то, о чём договорились»
Ситуация. Нужна проверка номера заказа. Задача поставлена одной фразой, без критериев. Результат проверили на правильном номере — работает, и функция уходит в работу.
Результат. Через неделю в базе заказы с номерами из строк «ord-12345» и «XORD-99Y»: проверка принимала их молча, потому что в ней не было условий «строго этот регистр» и «ничего лишнего по краям». Четыре строки с критериями до начала работы показали бы расхождение при первом же взгляде — а не через неделю в данных.
ПРАКТИКА
Сделайте сейчас
Возьмите небольшую задачу из реального проекта. Прежде чем поручать её AI или человеку, запишите четыре строки: что принимает, что возвращает, четыре случая, которые должны быть отклонены, и что происходит при ошибке. Затем получите результат и пройдите по нему с чек-листом из этого урока. Расхождение с записанным находится почти всегда — и его цена измеряется минутами, если найдено сейчас, и днями, если найдено в данных.
ОГРАНИЧЕНИЯ
Где нужен человек
- Код, который запускается локально, не является готовым к работе без ревью и проверок.
- Не принимайте результат без понимания: непонятый код — долг с непредсказуемыми последствиями.
Смежные уроки
Материал проверен: 20 августа 2026. Инструменты и тарифы меняются — сверяйтесь с первоисточником.