ЧАСТЬ II: ФУНДАМЕНТ МАСТЕРСТВА

Навыки #7-10: Git, Debugging, Документация, Веб

Главы 10-13. Оставшиеся критические навыки

Эти главы представлены в компактном формате. Каждый навык важен, но с AI вы можете быстро освоить основы.


Глава 10. Навык #7: Git и контроль версий

Почему Git критичен с AI

С AI генерация кода ускорилась в 10 раз.

Но это значит:

  • Больше изменений
  • Больше экспериментов
  • Выше риск сломать работающий код

Git — ваша страховка.

Основные команды

Базовый workflow

# Инициализация репозитория
git init

# Проверка статуса
git status

# Добавление файлов
git add .
git add file.py

# Коммит
git commit -m "Add user authentication"

# Просмотр истории
git log
git log --oneline

Ветвление

# Создать ветку
git branch feature/new-api

# Переключиться
git checkout feature/new-api

# Создать и переключиться (короче)
git checkout -b feature/new-api

# Список веток
git branch

# Удалить ветку
git branch -d feature/new-api

Слияние

# Перейти на main
git checkout main

# Слить ветку
git merge feature/new-api

# Разрешение конфликтов (если есть)
# 1. Открыть файлы с конфликтами
# 2. Выбрать нужные изменения
# 3. git add <файлы>
# 4. git commit

Хорошие commit messages

Плохо:

git commit -m "fix"
git commit -m "update"
git commit -m "changes"

Хорошо:

git commit -m "Fix: Handle null user in authentication"
git commit -m "Add: Email validation to registration form"
git commit -m "Refactor: Extract payment logic to separate service"

Структура:

<type>: <краткое описание>

<детальное описание — опционально>

Типы:

  • feat: — новая функция
  • fix: — исправление бага
  • refactor: — рефакторинг
  • docs: — документация
  • test: — тесты

С AI

AI может помочь:

AI, сгенерируй commit message для следующих изменений:
[показываешь git diff]

AI предложит хороший commit message.

Ключевые советы

✅ Коммитьте часто (каждая логическая единица изменений) ✅ Пишите понятные commit messages ✅ Используйте ветки для новых функций ✅ Регулярно пушьте в remote (backup!) ✅ Перед важными изменениями: создайте ветку


Глава 11. Навык #8: Debugging и отладка

AI делает ошибки — вы их находите

Типичная ситуация:

# AI сгенерировал код
def process_orders(orders):
    total = 0
    for order in orders:
        total += order['total']
    return total

# Вызов
process_orders([])  # KeyError: 'total'!

Проблема: AI не обработал пустой список.

Чтение stack traces

Python stack trace

Traceback (most recent call last):
  File "main.py", line 15, in <module>
    result = process_orders(orders)
  File "main.py", line 10, in process_orders
    total += order['total']
KeyError: 'total'

Как читать:

  1. Снизу вверх — последняя строка показывает ошибку
  2. KeyError: 'total' — нет ключа 'total'
  3. File "main.py", line 10 — где произошла ошибка

Использование debugger

Breakpoints

def process_orders(orders):
    total = 0
    for order in orders:
        breakpoint()  # Программа остановится здесь
        total += order['total']
    return total

В debugger:

(Pdb) print(order)  # Посмотреть значение order
(Pdb) print(orders)  # Посмотреть весь список
(Pdb) n  # Next — следующая строка
(Pdb) c  # Continue — продолжить

Систематический подход

Алгоритм отладки:

  1. Воспроизвести ошибку

    • Создайте минимальный пример, который вызывает баг
  2. Изолировать проблему

    • Какая функция/строка вызывает ошибку?
    • Что происходит до ошибки?
  3. Гипотеза

    • Почему это происходит?
    • Что должно быть, а чего нет?
  4. Тестировать гипотезу

    • Добавить print/breakpoint
    • Проверить значения переменных
  5. Исправить

    • Внести изменение
    • Проверить, что баг исчез
  6. Добавить тест

    • Чтобы баг не вернулся

Debugging с AI

Отличный workflow:

AI, помоги найти ошибку:

Код:
[вставляете код]

Ошибка:
[вставляете stack trace]

Что делаю:
[описываете шаги воспроизведения]

Ожидаемый результат:
[что должно быть]

Актуальный результат:
[что происходит]

AI часто сразу найдёт проблему!

Частые ошибки AI

1. Не обрабатывает edge cases:

# AI код
def divide(a, b):
    return a / b  # Забыл проверить b == 0

2. Неправильные типы:

# AI код
def calculate_age(birth_year):
    return 2025 - birth_year  # Что если birth_year строка?

3. Off-by-one errors:

# AI код
for i in range(len(arr) - 1):  # Пропустит последний элемент!
    print(arr[i])

Глава 12. Навык #9: Чтение документации

AI не знает всё

AI отлично знает:

  • Популярные библиотеки (React, Django, Express)
  • Стандартные подходы
  • Общие паттерны

AI плохо знает:

  • Новые библиотеки (вышли после cutoff date)
  • Специфичные API вашей компании
  • Нюансы последних версий

Вывод: Умение читать документацию остаётся критичным.

Как быстро найти нужное

Официальная документация

Структура обычно такая:

1. Getting Started — быстрый старт
2. Tutorial — пошаговое руководство
3. API Reference — детальное описание всех функций
4. Examples — примеры использования
5. FAQ — частые вопросы

Совет: Начинайте с Examples — это быстрее всего.

Чтение API docs

Пример (Python requests):

requests.get(url, params=None, **kwargs)

Parameters:
  url (str) - URL for the request
  params (dict, optional) - Query parameters
  **kwargs - Additional arguments

Returns:
  Response object

Example:
  response = requests.get('https://api.github.com/users/octocat')
  print(response.json())

Что искать:

  • Parameters — что передавать
  • Returns — что получите
  • Example — как использовать

Workflow: Документация → AI → Применение

Эффективный подход:

  1. Найдите документацию библиотеки/API
  2. Прочитайте примеры — понять основы
  3. Дайте документацию AI:
AI, вот документация библиотеки XYZ:
[вставляете релевантную часть]

Создай функцию, которая:
[ваша задача]
  1. AI использует документацию → лучший результат!

Поиск решений

Ресурсы:

  • Stack Overflow — огромная база вопросов/ответов
  • GitHub Issues — проблемы и решения конкретных библиотек
  • Reddit — обсуждения best practices
  • Блоги разработчиков — детальные гайды

С AI:

AI, я нашёл такое решение на Stack Overflow:
[вставляете код]

Адаптируй это для моего случая:
[ваша задача]

Глава 13. Навык #10: Веб и сети

Большинство приложений — веб

Даже если вы не делаете веб-сайты, ваше приложение вероятно:

  • Общается с API
  • Отправляет данные на сервер
  • Получает обновления из интернета

Понимание основ веба критично.

HTTP: Request / Response

Как работает веб

Клиент (браузер)      Сервер
     │                   │
     │  HTTP Request     │
     │ ─────────────────>│
     │                   │
     │  HTTP Response    │
     │ <─────────────────│
     │                   │

HTTP методы

GET — получить данные

GET /users/123

POST — создать данные

POST /users
Body: {"name": "Alice", "email": "alice@example.com"}

PUT/PATCH — обновить

PUT /users/123
Body: {"name": "Alice Smith"}

DELETE — удалить

DELETE /users/123

REST API basics

REST — стандарт проектирования API.

Принципы:

  • Ресурсы (существительные): /users, /products, /orders
  • HTTP методы (глаголы): GET, POST, PUT, DELETE
  • Stateless — каждый запрос независим

Пример REST API:

GET    /products           # Список товаров
GET    /products/123       # Один товар
POST   /products           # Создать товар
PUT    /products/123       # Обновить товар
DELETE /products/123       # Удалить товар

JSON и работа с данными

JSON — стандартный формат данных в вебе.

{
  "id": 123,
  "name": "Laptop",
  "price": 999.99,
  "inStock": true,
  "tags": ["electronics", "computers"]
}

Python:

import json

# JSON → Python dict
data = json.loads('{"name": "Alice"}')
print(data["name"])  # Alice

# Python dict → JSON
json_str = json.dumps({"name": "Bob"})
print(json_str)  # '{"name": "Bob"}'

Асинхронные запросы

Fetch API (JavaScript):

// GET запрос
fetch('https://api.example.com/users')
  .then(response => response.json())
  .then(data => console.log(data));

// POST запрос
fetch('https://api.example.com/users', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({name: 'Alice'})
})
  .then(response => response.json())
  .then(data => console.log(data));

Python (requests):

import requests

# GET
response = requests.get('https://api.example.com/users')
data = response.json()

# POST
response = requests.post(
    'https://api.example.com/users',
    json={'name': 'Alice'}
)

Базовая безопасность

CORS (Cross-Origin Resource Sharing)

Проблема: Браузер блокирует запросы с другого домена.

Решение: Сервер должен разрешить CORS:

# Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app)

Аутентификация

JWT (JSON Web Token) — популярный способ.

Workflow:

  1. Пользователь логинится → получает JWT токен
  2. Каждый запрос включает токен в header:
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    
  3. Сервер проверяет токен

С AI

Создание API с AI:

AI, создай REST API для управления задачами (TODO):
- GET /tasks - список задач
- POST /tasks - создать задачу
- PUT /tasks/:id - обновить задачу
- DELETE /tasks/:id - удалить задачу

Используй Flask и PostgreSQL.
Добавь JWT аутентификацию.

AI создаст полноценный API!


Заключение Части II

10 критических навыков освоены!

1. Понимание кода — читаете и понимаете каждую строку ✅ 2. Архитектурное мышление — проектируете системы ✅ 3. Алгоритмическое мышление — понимаете сложность ✅ 4. Формулирование задач — основа промпт-инжиниринга ✅ 5. Паттерны — направляете AI к правильным решениям ✅ 6. Тестирование — TDD с AI ✅ 7. Git — контроль версий и коллаборация ✅ 8. Debugging — находите ошибки AI ✅ 9. Документация — читаете и применяете с AI ✅ 10. Веб и сети — основа современных приложений

Вы готовы к Части III

Теперь, когда фундамент заложен, переходим к:

  • Работе с LLM на практике
  • Созданию AI-агентов
  • Командам агентов
  • Growing Software в действии!

Следующая часть: ЧАСТЬ III — НОВАЯ ПАРАДИГМА: Growing Software с AI