AI Coding

TDD

SDD

Git

Понимание ИИ

Понимание программировпния

Test-Driven Development (TDD)

Полезен «красно-зелёный TDD»: то есть стоит не просто «сначала написать все тесты», а действовать по такому циклу:

  • Новый тест сначала должен падать (иначе что он проверяет?)
  • Затем требуется сделать минимальное изменение кода, чтобы тест начал проходить.
  • А дальше надо рефакторить, превращая код из «просто срабатывающего» в «полноценный». Пример промта:
Build a Python function to extract headers from a markdown string. Use red/green TDD.

❗ИИ нельзя позволять менять тесты (если считает это необходимым, то должен объяснить причину). А на случай, если это всё-таки произойдёт, в CI нужен hook, который блокирует PR с такими изменениями.

Spec-Driven Development (SDD)

Всё значимое требуется фиксировать. При этом можно быстро проверять гипотезы на практике и подстраиваться на ходу: “Сделай тут тремя разными способами, а мы сравним результаты “вживую” и выберем”.

Экономия контекста и токенов при чтениях

Краткий и точный контекст - это самое важное. Нужно давать агенту ровно ту часть системы, которая нужна для конкретного изменения.

  • Формулировать задачу узко: измени только валидацию в этом методе, работай в пределах этих двух файлов;
  • Структура проекта понятна и предсказуема: предсказуемые названия файлов, понятное разделение по слоям, внятные README.md;
  • Карта проекта и ограничения: где находится нужный модуль, что считается точкой входа, где лежит бизнес-логика, а где тесты или вспомогательные части. И можно сразу уточнять, какая часть карты актуальна для текущей задачи: какой модуль трогать, какие директории релевантны, а где не нужно ничего менять;
  • Фиксировать архитектурные правила отдельно: важные инварианты вроде «этот слой не ходит напрямую в БД», «этот модуль не импортирует этот пакет» или «новую логику добавляем только через такой паттерн» агенту лучше знать заранее;
  • Разделять поиск, понимание и изменение: сначала дать агенту задачу поиска релевантных файлов и посмотреть, не “увело” ли его. Затем задачу понимания: что именно в них отвечает за нужное поведение. “Если агент плохо справляется с задачей - попробуй её декомпозировать”.

Выбор стека: типизация и “стандартизация”

Cтатическая типизация позволяет поймать ряд ошибок ИИ. Для LLM “удобнее”, когда что-то часто встречалось в обучающем датасете. Если на GitHub есть тысячи “Тетрисов” на JavaScript, то агенту будет легко сделать ещё один. Хуже обстоят дела с малоизвестными вещами и с совсем новыми, вышедшими уже после даты «knowledge cutoff» ИИ-модели.

Подход к Git

Общий совет: коммитить как можно чаще. Это как сохранения в видеоигре: никогда не знаешь, когда ИИ вдруг пойдёт вразнос, и чем свежее последний коммит, тем меньше прогресса можешь потерять. Плюс по commit messages, ИИ в будущих диалогах сможет понимать по ним много полезного контекста.

При этом ИИ очень помогает со «сложными командами». Даже опытным разработчикам непросто целиком уместить в голове логику и команды Git.

Риск-менеджмент

Когда ИИ быстро генерирует много кода, человеческое ревью становится одновременно “важным местом” и “узким местом”. От его тщательности зависят и качество проекта, и скорость разработки. При работе с ИИ-кодом требуются:

  • Компетенции и прилежность тщательно проверить всё, что требуется;
  • Душевный покой принимать без излишних проверок то, где они не требуются;
  • Мудрость отличать одно от другого.

Понимание работы ИИ

Знание принцпов как работает ИИ: чем различаются модели? Как измеряют их эффективность? Какие формы обучения к ним сейчас применяют? Как работает кэширование токенов? Как устроен «режим планирования»?

  • Agent Skills лучше MCP, потому что не загружаются в контекст сразу, а только по необходимости;
  • для верного выполнения задачи машине нужен весь релевантный контекст;
  • при этом окно контекста не бесконечное, да и то в середине “проседает”;
  • поэтому не стоит «закидывать в ИИ всё возможное», надо “не мусорить”;
  • фича «compaction» может «сжимать имеющийся диалог до главного»;
  • но модель сама выбирает «а что главное», и может упустить важное.

Понимание программирования

Все абстракции “протекают”. С ИИ, если хочется делать масштабные вещи, необходимость понимать «уровни ниже» совершенно не исчезла. Наоборот, к ним добавился ещё один. Значит, чтобы добиться от ИИ профессионального кода, надо самому быть профессионалом.

Обучение программированию

Главная проблема с LLM — они могут сразу давать правильный ответ, пропуская путь к нему. Значит, обучение должно быть выстроено так, чтобы не пропускать.

ИИ может быть полезен в объяснении «обычного» программирования.