ИИ трансформировал разработку программного обеспечения. В этой главе рассматриваются техники промптинга для генерации кода, отладки, ревью и рабочих процессов разработки.

<Callout type="info" title="ИИ как партнёр в программировании">
ИИ отлично справляется с генерацией кода, отладкой и документированием — но всегда проверяйте сгенерированный код на безопасность, корректность и поддерживаемость. Никогда не разворачивайте код от ИИ без тестирования.
</Callout>

## Генерация кода

### Правильно и неправильно: промпты для кода

<Compare 
  before={{ label: "❌ Размытый запрос", content: "Напиши функцию для валидации email." }}
  after={{ label: "✓ Полная спецификация", content: "Напиши функцию на Python, которая валидирует email-адреса.\n\nВход: string (потенциальный email)\nВыход: tuple[bool, str | None] - (is_valid, error_message)\nОбработай: пустую строку, None, unicode-символы\nИспользуй regex, добавь type hints и docstring." }}
/>

### Генерация функций

<TryIt compact prompt={`Напиши функцию на \${language:Python}, которая \${description:валидирует email-адреса}.

Требования:
- Вход: \${inputTypes:string (потенциальный email)}
- Выход: \${outputType:boolean и опциональное сообщение об ошибке}
- Обработай граничные случаи: \${edgeCases:пустая строка, None, unicode-символы}
- Производительность: \${performance:стандартная}

Включи:
- Type hints/аннотации
- Docstring с примерами
- Валидацию входных данных
- Обработку ошибок`} />

### Генерация классов/модулей

<TryIt compact prompt={`Создай класс на \${language:Python} для \${purpose:управления сессиями пользователей}.

Дизайн класса:
- Имя: \${className:SessionManager}
- Ответственность: \${responsibility:управление жизненным циклом пользовательской сессии}
- Свойства: \${properties:session_id, user_id, created_at, expires_at}
- Методы: \${methods:create(), validate(), refresh(), destroy()}

Требования:
- Следуй паттерну \${designPattern:Singleton}
- Обеспечь правильную инкапсуляцию
- Добавь подробные docstring
- Включи пример использования

Тестирование:
- Включи скелет unit-тестов`} />

### Генерация API-эндпоинтов

<TryIt compact prompt={`Создай REST API эндпоинт для \${resource:профилей пользователей}.

Фреймворк: \${framework:FastAPI}
Метод: \${method:GET}
Путь: \${path:/api/users/{id}}

Запрос:
- Заголовки: \${headers:Authorization Bearer token}
- Схема тела: \${bodySchema:Н/Д для GET}
- Query-параметры: \${queryParams:include_posts (boolean)}

Ответ:
- Успех: \${successResponse:200 с объектом пользователя}
- Ошибки: \${errorResponses:401 Unauthorized, 404 Not Found}

Включи:
- Валидацию входных данных
- Проверку аутентификации
- Обработку ошибок
- Учёт rate limiting`} />

## Отладка

<Callout type="tip" title="Принцип отладки">
Всегда включайте **ожидаемое поведение**, **фактическое поведение** и **сообщение об ошибке** (если есть). Чем больше контекста вы предоставите, тем быстрее ИИ сможет определить причину проблемы.
</Callout>

### Анализ багов

<TryIt compact prompt={`Отладь этот код. Он должен \${expectedBehavior:возвращать сумму всех чисел}, но вместо этого \${actualBehavior:возвращает 0 для всех входных данных}.

Код:
\${code:вставь свой код сюда}

Сообщение об ошибке (если есть):
\${error:нет}

Шаги отладки:
1. Определи, что код пытается сделать
2. Проследи выполнение с заданным входом
3. Найди, где ожидаемое и фактическое поведение расходятся
4. Объясни корневую причину
5. Предоставь исправление с объяснением`} />

### Интерпретация сообщений об ошибках

<TryIt compact prompt={`Объясни эту ошибку и как её исправить:

Ошибка:
\${errorMessage:вставь сообщение об ошибке или stack trace сюда}

Контекст:
- Язык/Фреймворк: \${framework:Python 3.11}
- Что я пытался сделать: \${action:чтение JSON-файла}
- Соответствующий код: \${codeSnippet:вставь соответствующий код}

Предоставь:
1. Объяснение ошибки простым языком
2. Корневую причину
3. Пошаговое исправление
4. Как предотвратить это в будущем`} />

### Отладка производительности

<TryIt compact prompt={`Этот код работает медленно. Проанализируй и оптимизируй:

Код:
\${code:вставь свой код сюда}

Текущая производительность: \${currentPerformance:занимает 30 секунд для 1000 элементов}
Целевая производительность: \${targetPerformance:менее 5 секунд}
Ограничения: \${constraints:лимит памяти 512MB}

Предоставь:
1. Определи узкие места
2. Объясни, почему каждое из них медленное
3. Предложи оптимизации (ранжированные по влиянию)
4. Покажи оптимизированный код
5. Оцени улучшение`} />

## Ревью кода

### Правильно и неправильно: промпты для ревью кода

<Compare 
  before={{ label: "❌ Общий запрос", content: "Проверь этот код." }}
  after={{ label: "✓ Конкретные критерии", content: "Проверь этот код для pull request.\n\nПроверь на:\n1. Корректность: баги, логические ошибки, граничные случаи\n2. Безопасность: риски инъекций, проблемы с авторизацией\n3. Производительность: N+1 запросы, утечки памяти\n4. Поддерживаемость: именование, сложность\n\nФормат: 🔴 Критично / 🟡 Важно / 🟢 Предложение" }}
/>

### Комплексное ревью

<TryIt compact prompt={`Проверь этот код для pull request.

Код:
\${code:вставь свой код сюда}

Проверь на:
1. **Корректность**: Баги, логические ошибки, граничные случаи
2. **Безопасность**: Уязвимости, риски инъекций, проблемы с авторизацией
3. **Производительность**: Неэффективности, N+1 запросы, утечки памяти
4. **Поддерживаемость**: Читаемость, именование, сложность
5. **Лучшие практики**: конвенции \${framework:Python/Django}

Форматируй ревью так:
🔴 Критично: обязательно исправить перед мержем
🟡 Важно: следует исправить
🟢 Предложение: было бы неплохо
💭 Вопрос: нужно уточнение`} />

### Ревью безопасности

<TryIt compact prompt={`Проведи ревью безопасности этого кода:

Код:
\${code:вставь свой код сюда}

Проверь на:
- [ ] Уязвимости инъекций (SQL, XSS, command)
- [ ] Недостатки аутентификации/авторизации
- [ ] Утечку конфиденциальных данных
- [ ] Небезопасные зависимости
- [ ] Криптографические проблемы
- [ ] Пробелы в валидации входных данных
- [ ] Обработку ошибок, раскрывающую информацию

Для каждой находки:
- Серьёзность: Critical/High/Medium/Low
- Местоположение: Номер строки или функция
- Проблема: Описание
- Эксплуатация: Как это может быть атаковано
- Исправление: Рекомендуемое решение`} />

## Рефакторинг

### Обнаружение code smells

<TryIt compact prompt={`Проанализируй этот код на code smells и возможности рефакторинга:

Код:
\${code:вставь свой код сюда}

Определи:
1. Длинные методы (предложи извлечение)
2. Дублирующийся код (предложи улучшения по DRY)
3. Сложные условия (предложи упрощение)
4. Плохое именование (предложи лучшие имена)
5. Сильную связанность (предложи развязку)

Для каждой проблемы покажи код до/после.`} />

### Применение паттернов проектирования

<TryIt compact prompt={`Отрефактори этот код, используя паттерн \${patternName:Factory}.

Текущий код:
\${code:вставь свой код сюда}

Цели:
- \${whyPattern:отделить создание объектов от использования}
- \${benefits:упростить тестирование и расширяемость}

Предоставь:
1. Объяснение паттерна
2. Как он применяется здесь
3. Отрефакторенный код
4. Компромиссы для рассмотрения`} />

## Тестирование

### Генерация unit-тестов

<TryIt compact prompt={`Напиши unit-тесты для этой функции:

Функция:
\${code:вставь свою функцию сюда}

Фреймворк для тестирования: \${testFramework:pytest}

Покрой:
- Happy path (нормальные входные данные)
- Граничные случаи (пустые, null, граничные значения)
- Случаи ошибок (невалидные входные данные)
- \${specificScenarios:конкурентный доступ, большие входные данные}

Формат: паттерн Arrange-Act-Assert
Включи: Описательные имена тестов`} />

### Генерация тест-кейсов

<TryIt compact prompt={`Сгенерируй тест-кейсы для этой функциональности:

Функциональность: \${featureDescription:регистрация пользователя с верификацией email}
Критерии приёмки: \${acceptanceCriteria:пользователь может зарегистрироваться, получает email, может верифицировать аккаунт}

Предоставь тест-кейсы в этом формате:

| ID | Сценарий | Дано | Когда | Тогда | Приоритет |
|----|----------|------|-------|-------|-----------|
| TC01 | ... | ... | ... | ... | High |`} />

## Архитектура и дизайн

### Проектирование систем

<TryIt compact prompt={`Спроектируй систему для \${requirement:чат-приложения реального времени}.

Ограничения:
- Ожидаемая нагрузка: \${expectedLoad:10,000 одновременных пользователей}
- Требования к задержке: \${latency:< 100ms доставка сообщений}
- Доступность: \${availability:99.9%}
- Бюджет: \${budget:средний, предпочтительно open source}

Предоставь:
1. Диаграмму архитектуры высокого уровня (ASCII/текст)
2. Описания компонентов
3. Поток данных
4. Выбор технологий с обоснованием
5. Стратегию масштабирования
6. Компромиссы и рассмотренные альтернативы`} />

### Проектирование схемы базы данных

<TryIt compact prompt={`Спроектируй схему базы данных для \${application:e-commerce платформы}.

Требования:
- \${feature1:Аккаунты пользователей с профилями и адресами}
- \${feature2:Каталог товаров с категориями и вариантами}
- \${feature3:Заказы с позициями и отслеживанием платежей}

Предоставь:
1. Описание сущностей и связей
2. Определения таблиц с колонками и типами
3. Индексы для частых запросов
4. Связи по внешним ключам
5. Примеры запросов для ключевых операций`} />

## Генерация документации

### Документация API

<TryIt compact prompt={`Сгенерируй документацию API из этого кода:

Код:
\${code:вставь код эндпоинта сюда}

Формат: \${format:OpenAPI/Swagger YAML}

Включи:
- Описание эндпоинта
- Схемы запроса/ответа
- Примеры запросов/ответов
- Коды ошибок
- Требования к аутентификации`} />

### Inline-документация

<TryIt compact prompt={`Добавь подробную документацию к этому коду:

Код:
\${code:вставь свой код сюда}

Добавь:
- Docstring файла/модуля (назначение, использование)
- Docstring функций/методов (параметры, возвращаемое значение, исключения, примеры)
- Inline-комментарии только для сложной логики
- Type hints, если отсутствуют

Стиль: \${docStyle:Google}`} />

## Шаблоны промптов с prompts.chat

### Действуй как Senior-разработчик

```
Я хочу, чтобы ты выступил в роли senior-разработчика. Я буду 
предоставлять код и задавать вопросы о нём. Ты будешь проверять 
код, предлагать улучшения, объяснять концепции и помогать с 
отладкой. Твои ответы должны быть образовательными и помогать 
мне стать лучшим разработчиком.
```

### Действуй как Code Reviewer

```
Я хочу, чтобы ты выступил в роли code reviewer. Я буду 
предоставлять pull request с изменениями кода, и ты будешь 
тщательно их проверять. Проверяй на баги, проблемы безопасности, 
проблемы производительности и соответствие лучшим практикам. 
Предоставляй конструктивную обратную связь, которая поможет 
разработчику улучшиться.
```

### Действуй как Software Architect

```
Я хочу, чтобы ты выступил в роли software architect. Я опишу 
системные требования и ограничения, и ты спроектируешь 
масштабируемые, поддерживаемые архитектуры. Объясняй свои 
проектные решения, компромиссы и предоставляй диаграммы, 
где это полезно.
```

## Интеграция в рабочий процесс разработки

### Генерация сообщений коммитов

<TryIt compact prompt={`Сгенерируй сообщение коммита для этих изменений:

Diff:
\${diff:вставь git diff сюда}

Формат: Conventional Commits
Тип: \${commitType:feat}

Предоставь:
- Строку темы (макс. 50 символов, повелительное наклонение)
- Тело (что и почему, перенос на 72 символах)
- Футер (ссылки на issues, если применимо)`} />

### Генерация описания PR

<TryIt compact prompt={`Сгенерируй описание pull request:

Изменения:
\${changes:перечисли свои изменения или вставь краткое описание diff}

Шаблон:
## Резюме
Краткое описание изменений

## Внесённые изменения
- Изменение 1
- Изменение 2

## Тестирование
- [ ] Unit-тесты добавлены/обновлены
- [ ] Ручное тестирование завершено

## Скриншоты (если изменения UI)
placeholder

## Связанные Issues
Closes #\${issueNumber:123}`} />

## Резюме

<Callout type="tip" title="Ключевые техники">
Включайте полный контекст (язык, фреймворк, ограничения), точно указывайте требования, запрашивайте конкретные форматы вывода, просите объяснения вместе с кодом и включайте граничные случаи для обработки.
</Callout>

<Quiz 
  question="Какой самый важный элемент нужно включить при просьбе к ИИ отладить код?"
  options={[
    "Только язык программирования",
    "Ожидаемое поведение, фактическое поведение и сообщение об ошибке",
    "Только фрагмент кода",
    "Имя файла"
  ]}
  correctIndex={1}
  explanation="Отладка требует контекста: что должно происходить vs что происходит на самом деле. Сообщения об ошибках и stack trace помогают ИИ быстро определить точную проблему."
/>

ИИ — мощный партнёр в программировании. Используйте его для генерации, ревью, отладки и документирования, сохраняя при этом собственное архитектурное суждение.
