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