August 19

Когнитивная сложность, абстракции и модели

В одной из предыдущей статей про измерение сложности и про разные контексты в которых сложность может возникать. Здесь же рассмотрим откуда берётся сложность, как явление и как конкретно 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, блок-схема, диаграмма последовательности вызовов, «квадратики и стрелочки» и многие другие) позволяют выйти за границы «семь плюс-минус два». Диаграммы, и другие артефакт, фактически создают копию текущего состояния кратковременной памяти, позволяя мыслено «ходить» по ней решая нужные задачи.

Но, что если в процессе изучения диаграмма содержит, большое количество объектов (классов, таблиц, приложений, систем, требований и т.д.), что приходится многократно «ходить» по ней для решения задачи ?

Абстракции и модели

Для преодоления когнитивной сложности при работе с артефактами, можно сгруппировать объекты по какому-либо признаку, а получившиеся группы можно назвать как-то.

Дальше можно убрать объекты внутри группы и упростить связи. Теперь мы видим только группы и связи между группами.

Получившееся диаграмма содержит абстракции (как сущности таки их связи), а всё вместе - это новый слой абстракции или модель.

Моделирование - это процесс выбора характеристик для формирования различных абстракций и слоёв абстракций или моделей.

Модель содержит только те объекты (сущности и связи), который важны для решения конкретной задачи или группы задач. Чтобы обеспечить возможность решения задачи, модель должна обладать приемлемой когнитивной сложностью.

Из-за когнитивной сложности построение моделей - это всегда итеративный процесс.

Модель - это артефакт, слой абстракции, который призван помочь преодолеть физические ограничения мозга (когнитивную сложность) в процессе познания.

Зачем - это всё Тимлиду?

Тимлид и команда постоянно работают с абстракциями и различными моделями:

Моделирование позволяет построить взаимодействие с различными участниками процесса производства, как вовне так и внутри, акцентируя внимания на важных аспектах и скрывая неважные.