Блок 1 · Урок 1 из 4 · ≈ 8 минут · цель: увидеть две главные формы сложности
Сложность - главный враг
Complexity is the enemy
Главная мысль: сложность (complexity) опасна не сама по себе, а потому что перегружает голову и делает последствия изменений непредсказуемыми.
Правило: маленькая правка не должна требовать большого расследования.
Проверка: где изменение расползается по системе, там копится сложность.
Зачем это вам
Когда вы работаете с AI-агентом, он может быстро написать много кода. Но скорость не спасает, если каждое следующее изменение требует разбираться в десятке далеких деталей. Вам важно замечать, где код уже просит слишком много внимания и где маленькая правка начинает тянуть за собой чужие части системы.
Хороший дизайн не делает систему «красивой ради красоты». Он уменьшает количество лишнего знания, которое нужно держать в голове, чтобы безопасно менять программу.
Суть
Есть две формы сложности, которые особенно часто мешают работе: когнитивная нагрузка (cognitive load) и усиление изменений (change amplification).
Когнитивная нагрузка - это объем информации, который нужно помнить, чтобы сделать шаг без ошибки. Если для маленькой правки нужно знать формат базы, порядок вызовов, скрытые флаги, особенности UI и исключения старого API, сложность уже управляет вами.
Усиление изменений - это ситуация, когда маленькая по смыслу правка требует менять много мест. Например, вы добавляете одно поле в профиль пользователя, а правите форму, валидатор, сериализацию, тесты, письмо, таблицу и еще три ручных преобразования.
Представьте кладовку, где все вещи лежат вперемешку. Чтобы достать отвертку, вы сначала проводите расследование: что на чем стоит, что упадет, что уже сломано, где коробка с проводами. Дизайн - это организация кладовки так, чтобы обычные действия не требовали расследования.
Запомните одно
Сложность видно не по размеру кода, а по цене понимания и цене изменения. Тревожный сигнал: маленькая правка требует понимать много далеких деталей.
Фраза агента → что он имеет в виду
- «Тут много связности»
- Изменение в одном месте может задеть другие места, потому что части системы слишком зависят друг от друга.
- «Нужно упростить интерфейс»
- Пользователь модуля должен знать слишком много деталей, чтобы вызвать его правильно.
- «Это технический долг»
- Быстрое решение сейчас увеличивает стоимость будущих изменений.
Мини-словарь
- Complexity
- Сложность: все, что делает систему труднее понять, изменить или проверить.
- Cognitive load
- Когнитивная нагрузка: сколько деталей нужно держать в голове, чтобы безопасно работать с кодом.
- Change amplification
- Усиление изменений: насколько сильно маленькое изменение разрастается по файлам, слоям и тестам.
Проверьте себя
Что является тревожным сигналом сложности?
Верно: опасна не сама длина кода, а лишнее знание, которое нужно собрать перед безопасной правкой.
Связанные материалы
- Следующий урок: Тактическое и стратегическое программирование.
- Карта курса для перехода к остальным блокам.
Основной источник
- A Philosophy of Software Design, John Ousterhout.
- APOSD vs Clean Code, заметки о различиях подходов.