Снова о нейросетях, вайб-коддинге, или адаптируем базовые правила общения с ИИ под задачи разработчика
На этой неделе настолько часто натыкался на видео и посты про "Вайб-коддинг", что решил сам протестировать IDE Cursor и она, внезапно, оказался очень даже неплох (но есть нюанс, о нем в заключении).
Правила работы по сути те же, что и в прошлом посте по этой теме (его можно найти по ссылке, или поискав в блоге здесь), но немного расширены и дополнены:
• Четко формулируем задачу. Конкретика убивает баги. Чем точнее запрос — тем меньше правок в сгенерированном коде.
Вместо: «Напиши функцию для сортировки» — «Напиши функцию на Go, которая сортирует срез структур Event по полю Timestamp (типа time.Time) в обратном порядке. Используй sort.Slice для сортировки, и если срез пустой — возвращай ошибку».
• Определяем стиль и стандарты кода: «Следуй рекомендациям Go Code Review Comments, используй fmt.Errorf для ошибок и форматируй код с помощью gofmt».
Это позволит избежать разночтений в стиле. (В идеале, чтобы ИИ работала в вашем стиле, ей стоит скормить вашу кодовую базу, как это сделать просто и относительно быстро расскажу, в одном из следующих постов).
• Ролевой режим лучше работает с контекстом: "Действуй как Senior Swift-инженер. Оптимизируй этот код для работы с большими массивами данных." (Без контекста, нейросети зачастую начинают думать, что вы хотите привнести немного Италии в код)
• Не забываем про версию языка и контекст
Всегда указываем версию языка и фреймворк: Swift (Swift 6.1, SwiftUI): «Реализуй кастомный анимационный переход между View с использованием GeometryReader. Код должен быть совместим с iOS 18+».
• Декомпозируем задачи всегда.Структурируйте запрос как ТЗ, разбивайте задачу на шаги: «Определи структуру данных для пользователей».«Реализуй функцию fetchUsers() с обработкой ошибок».«Добавь кеширование запросов».
• Ограничиваем и направляем
Задаем ограничения по объёму, времени выполнения или архитектуре :«Сгенерируй решение для парсинга JSON, не используя сторонние библиотеки, в не более чем 50 строках кода».
Четкие рамки помогут избежать лишнего функционала.
• Без итераций никуда. Проверяй код и уточняй.
Первый ответ — это всегда заготовка (ну если только вам не "Hello, World" понадобился). Уточняем детали: «Добавь логирование через zap»«Сделай метод асинхронным»«Оптимизируй для работы с 1000+ запросами в секунду»
• Ограничивайте выходные данные. Нейросети очень любят пояснять свой код (хотя это и неплохо, но зачастую избыточно).
Чтобы избежать многословности: «Сгенерируй SQL-запрос для выборки пользователей с >5 заказами. Только код, без пояснений».
• Проси оптимизировать свой код для производительности и безопасности: «Оптимизируй функцию fetchUsers() для высокой нагрузки, добавь таймауты для HTTP-запросов и проверь обработку ошибок, связанных с сетью».
• Снова вспоминаем про контекст (по факту работа с ним - самое полезное, что сейчас предлагают ИИ реальным разработчикам) Выделяем участок своего кода в IDE (в Cursor, GitHub Copilot и IDE от JetBrains точно работает) и спрашиваем:«Почему этот цикл вызывает утечку памяти? Предложи фикс».ИИ проанализирует это и постарается объяснить логику.
• Не ограничиваемся одним инструментом, потому что ничего универсального нет.
GitHub Copilot — отлично подходит для быстрого автодополнения и создания шаблонного кода.
Cursor — для генерации объемных кусков кода и архитектурных решений (и пока что топ 1 в моем личном рейтинге).
JetBrains AI — для анализа, рефакторинга и поиска ошибок прямо в IDE.
Codeium, Tabnine, Kite — альтернативы, каждая со своими фишками.
Какие выводы по тестам нейросетевых инструментов я для себя сделал: (Быстрее самому написать код, чем мучать нейросети, чтобы получить нормальный результат 😁) Нейросети сейчас генерируют отличный код, "вайб-коддинг" реален, действительно можно создавать цельные работающие приложения, но (тот самый нюанс) только при условии, если вы знаете как это сделать и без нейросетей.
Может ли робот написать симфонию? -Да, Может, если вы ему объясните как ее писать. А как ему объяснить, если сам не понимаешь? 😁
Подписывайтесь на мой канал - Neko.Play.Panic(), делюсь там мыслями, интересными находками и новостями об играх, IT, Lego и всяком, что меня заинтересовало.