AI Coding
Links
TDD
SDD
- https://martinfowler.com/articles/exploring-gen-ai/sdd-3-tools.html
- https://habr.com/ru/articles/964368/
- https://habr.com/ru/companies/X5Tech/articles/995466/
- https://habr.com/ru/articles/985990/
- https://addyosmani.com/blog/automated-decision-logs/
- https://github.com/github/spec-kit?tab=readme-ov-file#-what-is-spec-driven-development
- https://github.com/Fission-AI/OpenSpec
Git
- https://ilyabirman.ru/meanwhile/all/programmirovanie-s-kodeksom-chatagpt-git-i-levye-zametki/
- https://simonwillison.net/guides/agentic-engineering-patterns/using-git-with-coding-agents/
Понимание ИИ
Понимание программировпния
- https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/
- https://simonwillison.net/guides/agentic-engineering-patterns/linear-walkthroughs/
Test-Driven Development (TDD)
Полезен «красно-зелёный 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 — они могут сразу давать правильный ответ, пропуская путь к нему. Значит, обучение должно быть выстроено так, чтобы не пропускать.
ИИ может быть полезен в объяснении «обычного» программирования.