17 страница из 25
Тема
двух измерениях, показанных на рис. 3.2. Первое измерение относится к структуре проблемы и тому, насколько хорошо мы ее понимаем:

• Простая = легко поддающаяся пониманию.

• Запутанная = очень трудная для понимания.

Второе измерение касается поведения системы и того, насколько легко мы можем его предсказывать:

• Упорядоченное = полностью предсказуемое.

• Сложное = предсказуемое в определенной степени.

• Хаотическое = чрезвычайно непредсказуемое.

Мои трусы устроены очень просто. Нетрудно понять, как они работают. Напротив, устройство моих часов весьма непросто: если бы я разобрал их, то мне понадобилось бы много времени, чтобы разобраться в их конструкции и том, как взаимодействуют отдельные части. И все же ни мои часы, ни мои трусы не обещают никаких сюрпризов (по крайней мере для меня). Это упорядоченные, предсказуемые системы.



Команда разработчиков из трех человек также будет простой системой. Чтобы достаточно хорошо узнать каждого члена команды, потребуется лишь несколько совещаний, совместных походов в кафе во время обеденного перерыва и пара кружек пива. Возьмем в качестве другого объекта город. Очевидно, что город устроен не просто, а запутанно. Таксистам требуются годы, чтобы изучить все его улицы, проезды, отели и рестораны. При этом как команды, так и города будут сложными системами. Как бы хорошо вы их ни знали, сюрпризы неизбежны. Они предсказуемы лишь в ограниченной степени, и невозможно знать наверняка, что случится завтра.

Двойной маятник (два маятника, соединенные вместе) также представляет собой простую систему. Легко понять, как он устроен, и изготовить его тоже несложно. И тем не менее при определенных условиях такой маятник совершает непредсказуемые хаотические движения вследствие значительной зависимости этой системы от начальных условий. Хаотически ведут себя и фондовые рынки. Они по определению непредсказуемы, в противном случае все знали бы, как на них зарабатывать, и всю систему постиг бы коллапс. Однако в отличие от двойного маятника фондовые рынки устроены крайне запутанно. Множество компаний, ценные бумаги которых обращаются на фондовом рынке, разнообразие используемых финансовых инструментов и транзакций, совершаемых на фондовых рынках, делают их абсолютно непостижимыми для простых людей вроде меня.

Чем эта модель отличается от других?

Известна модель Cynefin (читается как Кеневин) (рис. 3.3a), предложенная Дэвидом Сноуденом – специалистом в области управления знаниями. Эта модель предлагает типологизировать ситуации как относящиеся к одной из четырех областей: простые, запутанные, сложные и хаотические (имеется также промежуточная категория – беспорядочные) и применяется при принятии решений и выработке политик в разных областях [Snowden 2010b].

Похожая модель была создана и профессором менеджмента Ральфом Стейси. Его модель называется матрицей согласованности и определенности (рис. 3.3b). Матрица разделена на четыре области (область простых систем, запутанных, сложных и область анархии или хаоса), размещенных вдоль двух осей: степени согласованности и степени неопределенности [Stacey 2000b].

Глава 16 в этой книге называется «Все модели неверны, но некоторые из них полезны», и это утверждение соответствует действительности. Все три приведенные здесь модели неверны, но каждая из них может быть полезна. Разница между моей моделью и двумя другими состоит в том, что в моей между запутанными и сложными системами нет четкой границы. В ней также идентифицированы шесть типов систем, а не четыре, при этом запутанные и сложные пересекаются. Если эта модель покажется вам полезной, используйте ее при оценке систем различных типов. Если нет, возьмите любую из двух оставшихся. Они тоже неплохие.


Термин «запутанный» относится к устройству системы, которое может быть вполне неочевидным, если только вы не специалист в соответствующей области, в то время как термины «сложный» и «хаотический» описывают поведение систем, которое может быть в разной степени непредсказуемым. Системы, имеющие неочевидное устройство, необязательно будут сложными в этом смысле (представим себе два автомобиля в гараже). А сложная система необязательно имеет неочевидное устройство – например, два человека в спальне. (Их поведение может оказаться вполне непредсказуемым.)

• Упрощение – действия, направленные на то, чтобы сделать структуру или устройство системы более понятным (в моей модели этому соответствует движение сверху вниз).

• Линеаризация – действия, направленные на то, чтобы сделать поведение системы более предсказуемым (в модели – движение справа налево).

К сожалению, на дилетантском уровне часто путают линеаризацию и упрощение. И тут-то возникают проблемы.

А как насчет сложности программного обеспечения?

Многие придерживаются той точки зрения, что программное обеспечение должно быть настолько простым, насколько это возможно. А когда оно недостаточно простое, начинаются разговоры о том, что необходимо «снизить его уровень сложности».

Тут легко запутаться, ведь такое использование терминологии не соответствует принятому в научном обиходе определению сложности: не проводится различие между тем, как организован данный программный продукт, и его поведением.

Тем не менее если быть честным, то я вынужден буду признать, что термины «сложный» и «запутанный» существовали задолго до того, как ученые начали наполнять их разным содержанием. Поэтому в некотором смысле правота на стороне дилетантов, а не специалистов. И тем не менее, если для того, чтобы разобраться в хитросплетениях программного продукта, необходимо вызывать эксперта, я предпочитаю называть такой продукт запутанным. А если поведение программного продукта невозможно полностью предсказать (как это бывает в системах искусственного интеллекта, нейронных сетях или многопользовательских играх), то такое программное обеспечение лучше называть сложным.

Простое и хорошо структурированное ПО может демонстрировать очень сложное поведение, в то время как неочевидным образом структурированное и довольно запутанно организованное ПО порой выдает упорядоченные и полностью предсказуемые результаты.

Еще раз об упрощении

Предлагаемая мною модель основана на противопоставлении структуры и поведения. Как мне представляется, она может упростить обсуждение вопросов, связанных с простотой, и снять ряд недоразумений.

Все следует упрощать до тех пор, пока это возможно, но не более того.

Альберт Эйнштейн

Своим высказыванием Эйнштейн хотел сказать, что структура системы должна быть представлена в понятном виде. В терминах моей модели это предполагает вертикальный сдвиг сверху вниз (упрощение). Тем не менее оговорка «но не более того», по всей видимости, отсылает нас к поведению этой системы. Эйнштейн пытается предупредить нас, что следует избегать чрезмерного упрощения, поскольку это изменит сам характер данной системы (что в моей системе координат соответствует линеаризации, а не упрощению).

Простота – это миф, время которого прошло, если оно вообще когда-либо существовало [Norman 2007].

В своей интереснейшей статье «Простота сильно переоценена» Дон Норман обсуждает вопрос, насколько ценно с точки зрения пользователя добавление функциональных возможностей в тот или иной продукт по сравнению с их ограниченным количеством. Обилие функциональных возможностей подразумевает иное или более сложное поведение продукта, а зачастую и его иную структуру. В моей диаграмме этому соответствует движение по обеим осям – горизонтальной и вертикальной. (Например, когда Google добавил в почтовый сервис Gmail отдельный почтовый ящик для приоритетных сообщений, поведение Gmail усложнилось. Стал более запутанным и пользовательский интерфейс, хотя для меня он остался вполне понятным.)

К сожалению, Дон Норман использует термин «упрощение» как

Добавить цитату