Kitobdan iqtiboslar Вайб-кодер от нуля до мастера в эпоху AImuallif Михаил Тарасов
Твоя новая работа — быть параноиком. Быть тем самым душным тимлидом для своего AI-стажёра. Прежде чем писать промпт, задай себе вопросы:
— А что, если данные придут пустые?
— А что, если придёт не тот тип данных (не массив, а объект)?
— А что, если сеть упадёт?
— А что, если сервер вернёт ошибку?
Думать о пограничных случаях, об ошибках, об архитектуре — вот твоя настоящая работа
1 kishiga yoqdi
Совет от гаражного кодера:
— Промпт — это новое ТЗ. Начни думать о своих запросах к AI не как о вопросах в Google, а как о техническом задании для стажёра. Чем чётче и детальнее ты опишешь задачу, тем меньше говнокода получишь в ответ.
— Прокачивай скилл ревьюера. Каждый сгенерированный кусок кода рассматривай под микроскопом. Задавай себе вопросы: «Это безопасно? Это оптимально? Это читаемо? Какие здесь могут быть пограничные случаи?». Твой главный скилл теперь — критическое мышление.
— Не теряй хватку. Хотя бы раз в неделю пиши что-то с нуля, без помощи AI. Небольшую утилиту, скрипт, компонент. Это как тренировка в спортзале. Ты должен держать свои «кодерские мышцы» в тонусе, чтобы не разучиться ходить без костылей.
— Думай архитектурно. Начни больше читать не про конкретны
Глава 3. «Hello, AI!»: Пишем первый код, не касаясь клавиатуры (почти)
— Просим Copilot/Cursor сгенерить «Hello, World!» на JS
AI-ассистент — это не твой мозг. Это твой самый быстрый, самый продуктивный, но при этом самый наивный и безответственный джуниор-стажёр.
Он
Используй AI для генерации альтернатив, а не конечного решения
Промпт — это новое ТЗ. Начни думать о своих запросах к AI не как о вопросах в Google, а как о техническом задании для стажёра. Чем чётче и детальнее ты опишешь задачу, тем меньше говнокода получишь в ответ
Совет от гаражного кодера:
— Выноси логику в отдельные функции. Наше условие isVip уже становится сложным. В реальном проекте его лучше вынести в отдельную функцию-предикат: const isVip = (user) => user.status === … Это делает код ещё чище.
— Не бойся reduce, подружись с ним. Потрать вечер на то, чтобы решить 5—10 разных задач на массивы с помощью. reduce (). Ты поймёшь, что им можно делать практически всё: группировать, искать уникальные значения, преобразовывать массив в объект.
— Пиши тесты на свои рефакторинги. Прежде чем начать рефакторить код (сгенерированный или свой старый), напиши на него несколько простых тестов, которые проверяют основные сценарии. После каждого шага рефакторинга прогоняй тесты. Если они всё ещё зелёные — ты на верном пути.
— Спрашивай у AI «как улучшить?». После того, как ты сам отрефакторил код, скорми свою финальную версию AI-чату и спроси: «Что ещё можно улучшить в этом коде?». Иногда он может подкинуть интересную идею, о которой ты не подумал, например, предложить деструктуризацию объекта user для большей читаемости.
Валидируй данные на входе. Прежде чем работать с данными, пришедшими извне (от пользователя, из API), убедись, что они того типа, который ты ожидаешь
вайб-кодер не просто чинит, он учится, чтобы не повторять ошибок. Проблема была не только в AI. Проблема была в нашем промпте. Он был слишком наивным.
Промпт уровня «Джуниор»:
// Напиши функцию, которая получает имена пользователей с API.
Промпт уровня «Миддл»:
// Напиши асинхронную функцию getUsersNames, которая делает GET-запрос на «…', получает массив пользователей и возвращает новый массив только с их именами. (Это то, что мы написали).
А вот как выглядит промпт уровня «Сеньор»:
// Напиши асинхронную функцию getUsersNames, которая делает GET-запрос на «…'. Функция должна быть надёжной. Добавь обработку сетевых ошибок с помощью try...catch. Если ответ сервера не успешный (статус не 200—299), функция должна выбрасывать ошибку с текстом статуса. Если в ответе пришёл пустой массив или вообще не массив, функция должна возвращать пустой массив, не падая. В случае любой другой ошибки, она также должна возвращать пустой массив и логировать ошибку в консоль.
Чувствуешь разницу? Сеньорский промпт не просто говорит, что делать. Он предвидит проблемы и говорит, как на них реагировать. Он описывает не только «happy path», но и все «sad paths