Разработка
Урок 2

Генерация кода по описанию задачи

0 из 6
1
Фундамент
2
Погружение
3
Бизнес-кейс
4
Промпт
5
Инсайт
6
Практика
Фундамент

Качество описания = качество кода

В Уроке 1 вы сгенерировали первую функцию — простую, с одной задачей. Но реальные задачи сложнее: несколько шагов, условия, обработка ошибок, взаимодействие с базой данных или API.

Парадокс: чем сложнее задача, тем важнее качество описания. Если для простой функции достаточно «посчитай сумму», то для сложной нужна мини-спецификация.

3 уровня генерации кода:

Уровень 1: Одна функция — «напиши функцию валидации email». AI справляется идеально. Это вы уже умеете из Урока 1.

Уровень 2: Алгоритм из нескольких шагов — «функция, которая читает CSV, фильтрует строки по дате, группирует по категории, считает средние и записывает результат в новый файл». Здесь нужна декомпозиция — без неё AI запутается в порядке шагов или пропустит один из них.

Уровень 3: Полная фича — «API-эндпоинт для регистрации пользователя: валидация данных, хеширование пароля, запись в БД, отправка email подтверждения, возврат токена». Это несколько файлов и слоёв — без правильного описания AI выдаст «кашу».

Правило: описание задачи должно быть длиннее, чем вы думаете. 2-3 предложения → посредственный код. 10-15 предложений с примерами → почти production-ready код.

Ключевой навык этого урока: научиться писать «мини-ТЗ» для AI, которое превращается в качественный код с первого раза.

Погружение

5 техник для точной генерации кода

В Уроке 1 вы использовали базовый промпт с полями «Задача + Входные данные + Выходные данные». Это работает для простых функций. Для задач Уровня 2 и 3 нужны продвинутые техники:

Техника 1: Пошаговая декомпозиция
Вместо «напиши функцию обработки заказа» разбиваете на шаги: «Шаг 1: проверь, что все товары в наличии. Шаг 2: рассчитай стоимость с учётом скидок. Шаг 3: спиши со склада. Шаг 4: создай запись заказа. Шаг 5: верни подтверждение.» AI будет следовать вашему плану и не пропустит ни одного шага.

Техника 2: Примеры входа/выхода
Самый мощный способ объяснить AI, что вы хотите. Вместо «функция форматирования телефона» покажите: вход: «89991234567» → выход: «+7 (999) 123-45-67». Вход: «+7 999 123 45 67» → выход: «+7 (999) 123-45-67». AI поймёт паттерн и обработает все варианты, включая те, о которых вы не подумали.

Техника 3: Ограничения вперёд (Constraints-first)
Скажите AI, чего делать НЕ нужно: «Без внешних библиотек», «Не используй рекурсию», «Совместимость с Python 3.8», «Не более 50 строк». Ограничения сужают пространство решений — AI не выдаст решение с 10 зависимостями, когда вам нужен чистый код.

Техника 4: Итеративная доработка
Не пытайтесь получить идеальный код с первого раза. Схема: Генерация → Ревью → Уточнение → Финал. Первый запрос: «Напиши функцию X.» Второй: «Добавь обработку ошибок для случаев Y и Z.» Третий: «Оптимизируй — сейчас O(n²), нужно O(n log n).» Каждая итерация улучшает код — как скульптор, который сначала вырубает форму, потом шлифует детали.

Техника 5: Контекст проекта
Если вы работаете в существующем проекте, скажите AI: «Проект на FastAPI + SQLAlchemy + PostgreSQL. Стиль кода: PEP8, type hints обязательны, логирование через structlog.» AI подстроит код под ваш стек и стиль — не нужно переписывать потом.

Ключевое отличие от Урока 1: там вы описывали что нужно. Здесь вы учитесь описывать как именно — с шагами, примерами и ограничениями. Это разница между «хочу сайт» и техническим заданием.

Бизнес-кейс

Как бэкенд-разработчик создал 8 API-эндпоинтов за 3 часа вместо 2 дней

Ситуация: бэкенд-разработчик в логистической компании. Задача: создать REST API для системы управления складом — 8 эндпоинтов: CRUD для товаров, приёмка, списание, поиск с фильтрами, генерация отчёта по остаткам.

Обычный подход: 2 рабочих дня (16 часов). Модели данных (2 часа), маршруты (4 часа), валидация (3 часа), обработка ошибок (2 часа), тесты (3 часа), документация (2 часа).

Подход с AI и 5 техниками:

Шаг 1. Декомпозиция. Описал каждый эндпоинт отдельно: метод, путь, параметры, пошаговая логика обработки, формат ответа (успех и ошибки). Не «сделай CRUD» — а «POST /api/items — принимает name, sku, quantity, price. Шаг 1: валидация (sku уникален). Шаг 2: создание записи. Шаг 3: возврат 201 с id.»

Шаг 2. Примеры входа/выхода. Для сложных эндпоинтов (поиск с фильтрами, отчёт по остаткам) дал конкретные примеры: «GET /api/items?category=electronics&min_qty=10 → список товаров с пагинацией, total_count в заголовке.»

Шаг 3. Ограничения. «FastAPI, Pydantic v2, async SQLAlchemy, PostgreSQL. Без ORM-магии — явные запросы. Все ответы через стандартный ResponseModel.»

Шаг 4. Итеративная доработка. Первая версия → добавил пагинацию → добавил обработку конкурентных запросов при списании (чтобы два пользователя не списали один товар одновременно).

Результат: 8 эндпоинтов за 3 часа. Код прошёл код-ревью с 2 мелкими замечаниями (вместо обычных 8-10). Тесты — 85% покрытие. Документация Swagger — сгенерирована автоматически из Pydantic-моделей.

Главный вывод: время сместилось с написания кода на описание задачи. 40% времени — формулировка описания, 20% — генерация, 40% — проверка и доработка. Раньше: 10% описание, 70% написание, 20% отладка.

Готовый промпт

Продвинутый генератор кода с декомпозицией

Этот промпт значительно мощнее, чем в Уроке 1. Он использует все 5 техник: контекст проекта, пошаговую декомпозицию, примеры, ограничения, и настроен на итеративную доработку. Заполняйте разделы в квадратных скобках:

ChatGPT / Claude / DeepSeek
Ты — senior-разработчик, который пишет production-ready код. Следуешь принципам чистого кода, SOLID и DRY.

КОНТЕКСТ ПРОЕКТА:
- Язык/фреймворк: [например: Python + FastAPI / TypeScript + Express / Go + Gin]
- База данных: [PostgreSQL / MongoDB / SQLite / без БД]
- Стиль кода: [PEP8 / ESLint Airbnb / стандартный]
- Существующие зависимости: [перечисли, что уже используется в проекте]

ЗАДАЧА:
[Опиши, что должен делать код]

ПОШАГОВАЯ ЛОГИКА (декомпозиция):
1. [Первый шаг — что происходит сначала]
2. [Второй шаг]
3. [Третий шаг]
...

ПРИМЕРЫ ВХОДА/ВЫХОДА:
- Вход: [пример входных данных] → Выход: [ожидаемый результат]
- Вход: [граничный случай] → Выход: [что должно произойти]
- Вход: [невалидные данные] → Выход: [какая ошибка]

ОГРАНИЧЕНИЯ:
- [что НЕ использовать — библиотеки, паттерны, подходы]
- [требования к производительности — O(n), лимит памяти]
- [совместимость — версия языка, браузеры, ОС]

ТРЕБОВАНИЯ К РЕЗУЛЬТАТУ:
1. Полный рабочий код (не псевдокод, не фрагменты)
2. Type hints / типизация
3. Обработка ошибок с понятными сообщениями
4. Docstring / комментарии к сложным блокам
5. 5 unit-тестов: нормальный вход, граничные случаи, невалидные данные
6. Пример вызова с реальными данными

Если задача слишком сложная для одного файла — разбей на модули и покажи структуру файлов.
📝 Как использовать:

Не обязательно заполнять все разделы. Для простых задач достаточно «Контекст + Задача + Ограничения». Для сложных — добавляйте декомпозицию и примеры. Чем сложнее задача, тем больше разделов нужно заполнить. После генерации попросите AI: «Что можно улучшить?» — и примените Технику 4 (итеративная доработка).

🤖 Открыть в AI-модели
Инсайт

Мысль дня

Лучший промпт для генерации кода — это не про код. Это про чёткое описание проблемы. Когда вы точно знаете, ЧТО нужно — AI знает, КАК это написать. Ваша суперсила — не синтаксис, а умение формулировать задачу.
— Адаптировано
Практика

Сгенерируйте сложную функцию с итеративной доработкой

Сегодня вы применяете все 5 техник на практике. Задание из трёх шагов — каждый сложнее предыдущего:

📝 Шаг 1: Опишите сложную задачу с декомпозицией

Выберите одну задачу: (а) Парсер логов — функция, которая читает лог-файл, извлекает ошибки, группирует по типу и создаёт отчёт с количеством каждого типа ошибок и временными метками. (б) Калькулятор доставки — функция, которая по весу, габаритам, расстоянию и тарифной зоне рассчитывает стоимость доставки с учётом скидок за объём. (в) Ваша реальная рабочая задача — что-то, что вам действительно нужно автоматизировать. Разбейте выбранную задачу на 4-6 пошаговых шагов (Техника 1).

⚡ Шаг 2: Примените все 5 техник и сгенерируйте код

К описанию из Шага 1 добавьте: 2-3 примера входа/выхода (Техника 2), ограничения — язык, без внешних библиотек (Техника 3), контекст проекта (Техника 5). Вставьте всё в продвинутый промпт из блока выше и сгенерируйте код. Прочитайте результат — понятна ли логика? Совпадают ли шаги с вашей декомпозицией?

🔄 Шаг 3: Итеративная доработка — 3 раунда

Раунд 1: «Добавь обработку 3 дополнительных ошибок: [опиши, какие именно ситуации нужно поймать].» Раунд 2: «Оптимизируй производительность — объясни, какие места можно ускорить и почему.» Раунд 3: «Сделай код-ревью финальной версии и оцени по шкале 1-10: читаемость, надёжность, производительность.» Сравните первую версию с финальной — разница покажет силу итеративного подхода (Техника 4).

Блок изучен!