Справочник

Словарь курса

Это канонический язык курса, а не учебник по всем оттенкам терминов. Используйте его, чтобы одинаково понимать задания, ревью, разговоры с AI-агентом и решения о границах модулей.

Основные термины

Модуль (module)
Часть системы с интерфейсом и реализацией.
Интерфейс (interface)
Все, что пользователь модуля должен знать, чтобы использовать его правильно.
Сигнатура (signature)
Видимая форма вызова: имя, параметры и тип результата. Это только часть интерфейса.
Контракт (contract)
Обещание модуля: что можно передать, что вернется, какие ошибки возможны и какие правила надо соблюдать.
Неформальный интерфейс (informal interface)
Правила использования, которые не видны в сигнатуре: порядок вызовов, ограничения, побочные эффекты и ожидания по скорости.
Инвариант (invariant)
Условие, которое должно оставаться истинным после операций модуля.
Публичное поведение (public behavior)
Наблюдаемый результат работы модуля через его интерфейс, без знания внутренних шагов реализации.
Реализация (implementation)
Внутренний способ выполнить обещание интерфейса.
Глубокий модуль (deep module)
Много поведения за маленьким понятным интерфейсом.
Мелкий модуль (shallow module)
Интерфейс почти такой же сложный, как внутреннее поведение.
Глубина (depth)
Сколько полезного поведения пользователь получает за единицу знания об интерфейсе.
Рычаг (leverage)
Польза от модуля для вызывающего кода: один простой интерфейс дает много готового поведения.
Локальность (locality)
Свойство дизайна, при котором знание, баги и изменения концентрируются в одном месте, а не расползаются по системе.
Транзитный модуль (pass-through module)
Прослойка, которая почти ничего не скрывает и в основном передает вызов дальше.
Classitis
Болезненное размножение классов или модулей без соответствующего уменьшения сложности.
Шов изменения (seam)
Место, где поведение может меняться без редактирования вызывающего кода.
Адаптер (adapter)
Конкретная реализация, удовлетворяющая интерфейсу на шве изменения.
Information hiding
Модуль скрывает важное проектное решение от остальной системы.
Deletion test
Если модуль удалить, сложность исчезнет или расползется по вызывающему коду?
Тактическое программирование (tactical programming)
Работа ради быстрого локального результата без достаточного внимания к будущей стоимости изменений.
Стратегическое программирование (strategic programming)
Работа с небольшими осознанными вложениями в дизайн, чтобы будущие изменения оставались управляемыми.
Критерий дизайна (design criterion)
Проверяемое условие, по которому можно принять архитектурное решение, а не оценивать его на вкус.
Задача агенту (agent task)
Формулировка работы для AI-агента: цель, контекст, границы, ограничения, ожидаемый артефакт и критерии приёмки.
Контекст (context)
Информация, которую агент должен знать, чтобы не угадывать: цель, текущая структура, важные файлы, ограничения и словарь.
Дизайн-план (design plan)
Короткое объяснение будущего изменения до кода: какие модули затрагиваются, какой интерфейс сохраняется или появляется, как будет проверяться поведение.
Критерии приёмки (acceptance criteria)
Проверяемые условия, по которым понятно, что работа агента действительно выполнена.

Как пользоваться

Когда агент предлагает "разнести код", "сделать сервис" или "добавить абстракцию", проверьте это словарем: где интерфейс, что скрыто внутри реализации, какой seam появляется и не стал ли новый модуль shallow.