Когнитивная сложность, абстракции и модели
В одной из предыдущей статей про измерение сложности и про разные контексты в которых сложность может возникать. Здесь же рассмотрим откуда берётся сложность, как явление и как конкретно IT специалисты с ней работают.
Мозг
«Магическое число семь, плюс-минус два» (The Magical Number Seven, Plus or Minus Two: Some Limits on our Capacity for Processing Information). Речь про количество объектов, которые мы можем осознанно удерживать до 30 сек (кратковременная память). Но если нам надо думать про сущности и их связи (например, потоки данных, вызовы, отношения), то «семь, плюс-минус два» будет относиться к сумме сущностей их связей.
Проведём небольшой эксперимент. Не используйте заметки, попробуйте удержать получившиеся в уме какое-то время, не подглядывая в описание:
- у нас три сущности A, B и С, между ними есть связи AB, АС, BC, — объектов уже 6.
- попробуйте добавить по одному свойству к каждой из сущностей A, B и C
- добавить новые связи CA, CB, объектов стало 11.
- добавьте ещё к связям веса AB =3, AC =8, BC=11, CA=5 и CB=34, объектов стало 16.
Попробуйте добавить ещё пару объектов и соединить их с уже имеющимися
В какой-то момент объекты (сущности и связи и их свойства) начнут как бы исчезать из мыслей. Если продолжать пытаться добавлять объекты и пытаться удерживать остальные, то заболит голова или будет иное состояние дискомфорта.
Объекты в кратковременной памяти появляются, когда мы изучаем что-либо: бизнес требования, архитектуру, постановку аналитика, код. Обычно данное изучение связано с какой-то задачей: понять бизнес требования для написания постановки или изменения архитектуры, понять постановку для изменения кода и т.д.
Когнитивная сложность - это время, которые мы тратим на осознание необходимых объектов (сущности + связи + характеристики) для решения определённой задачи, а также возможность удержать эти объекты в кратковременной памяти, что бы решить поставленную задачу.
Большая часть задач в IT и многих других специальностях обладают такой когнитивной сложностью (затраченное время приближается к бесконечности или количество объектов физически невозможно удерживать в кратковременной памяти), что без помощников не обойтись.
Помощники
«Семь плюс-минус два» мало и хочется, работать с большим количеством объектов. Самый первый, наивный способ - это нарисовать все объекты и все их связи и мысленно ходить по этой схеме какое-то время пока нужный вопрос не будет решён. Например, глядя на рисунок можно быстро найти сумму весов AB + BD.
Различные диаграммы (ERD, UML, графы, С4, IDEF0, блок-схема, диаграмма последовательности вызовов, «квадратики и стрелочки» и многие другие) позволяют выйти за границы «семь плюс-минус два». Диаграммы, и другие артефакт, фактически создают копию текущего состояния кратковременной памяти, позволяя мыслено «ходить» по ней решая нужные задачи.
Но, что если в процессе изучения диаграмма содержит, большое количество объектов (классов, таблиц, приложений, систем, требований и т.д.), что приходится многократно «ходить» по ней для решения задачи ?
Абстракции и модели
Для преодоления когнитивной сложности при работе с артефактами, можно сгруппировать объекты по какому-либо признаку, а получившиеся группы можно назвать как-то.
Дальше можно убрать объекты внутри группы и упростить связи. Теперь мы видим только группы и связи между группами.
Получившееся диаграмма содержит абстракции (как сущности таки их связи), а всё вместе - это новый слой абстракции или модель.
Моделирование - это процесс выбора характеристик для формирования различных абстракций и слоёв абстракций или моделей.
Модель содержит только те объекты (сущности и связи), который важны для решения конкретной задачи или группы задач. Чтобы обеспечить возможность решения задачи, модель должна обладать приемлемой когнитивной сложностью.
Из-за когнитивной сложности построение моделей - это всегда итеративный процесс.
Модель - это артефакт, слой абстракции, который призван помочь преодолеть физические ограничения мозга (когнитивную сложность) в процессе познания.
Зачем - это всё Тимлиду?
Тимлид и команда постоянно работают с абстракциями и различными моделями:
- технология производства
- процессы
- цели и задачи
- структура команды
- solution архитектура,
- техническая архитектура продукта,
- функциональная архитектура продукта,
- логическая схема сущностей,
- слои приложений
- и т. д.
Моделирование позволяет построить взаимодействие с различными участниками процесса производства, как вовне так и внутри, акцентируя внимания на важных аспектах и скрывая неважные.