Детерминизм позволяет разработчикам программного обеспечения проектировать, планировать и предсказывать поведение своего программного продукта в реальных условиях использования. Они создают или вносят изменения в программный код, чтобы задать или изменить поведение программного продукта после компиляции и развертывания у пользователя. Если на мгновение отвлечься от ошибок программирования, сбоев операционных систем, аварийных отключений электричества, неквалифицированных пользователей и других рисков, то можно сказать, что предсказания разработчиков очень часто оказываются весьма точными. Тот же детерминизм позволил мне в свое время сделать вполне верный прогноз, что мой проект обанкротится, если не удастся найти больше клиентов.
Но, как это ни было бы странно, одного детерминизма недостаточно. Хотя мы умеем предвидеть очередное появление кометы Галлея и можем еще на стадии разработки предсказать, как будет функционировать программное обеспечение, мы не в состоянии определить погоду на месяц вперед. Мы также не в состоянии точно предвидеть результат сложной комбинации желаемых параметров программного обеспечения, время, имеющееся на разработку, требуемые для проекта ресурсы или (что, к сожалению, случилось с моим проектом) наступление момента, когда появятся новые клиенты.
Так в чем же проблема?
Сложность
Если вежливый и послушный сын ваших соседей – олицетворение предсказуемости, то его своенравная и взбалмошная младшая сестра может служить символом сложности. Предсказуемость позволяет вам ходить на работу, назначать встречи, заниматься спортом и смотреть телевизор. В то же самое время сложность зачастую превращает взаимодействия между вами и внешним миром в непредсказуемый хаос, полный неожиданных проблем и сюрпризов.
Многие иногда путают создаваемые сложностью проблемы с проблемой больших чисел (когда одновременно происходит огромное количество событий), но сложные явления не всегда предполагают наличие большого количества элементов. Возьмем, например, молекулу воды (фигурально выражаясь, естественно, на практике это сделать очень непросто). Эта молекула состоит всего из двух атомов водорода и одного атома кислорода. Ничего сложного, не так ли? И тем не менее даже такая простая структура из трех атомов проявляется неожиданным образом в сложных явлениях текучести, эффектах, связанных с плотностью воды, и других физических и химических явлениях [Solé 2000: 13], которые не поддаются легкому объяснению с точки зрения поведения отдельных атомов. Таким образом, сложность необязательно будет проявлением больших чисел. Достаточно трех молекул воды, чтобы состоящая из них система характеризовалась сложным поведением – примером будет знаменитая задача трех тел.
К счастью, с того момента, когда Кант с энтузиазмом объявил причинность основой научного знания, наука не стояла на месте. Теория динамических систем, теория хаоса, теория сетей, теория игр и ряд других научных дисциплин добились значительного прогресса, объяснив, почему некоторые явления невозможно предсказывать и почему некоторые события невозможно планировать или рассчитать заранее – их можно только испытывать или наблюдать. Часто весь комплекс исследований в области сложных систем собирательно именуют теорией сложности (см. главу 3 «Теория сложности»).
Если развитие науки начиная с XVII века проходило под знаком детерминизма, то сложность как предмет исследования возникла в XX веке; соответствующие исследования значительно ускорились с того момента, когда в конце XX века теория сложности выделилась в отдельную научную дисциплину. Физик-теоретик Стивен Хокинг утверждал, что XXI век будет веком сложности [Chui 2000].
Развитие теории сложности – хорошая новость для руководителей, лидеров команд и менеджеров проектов (а также всех прочих «лидеров» и «менеджеров»), работающих в компаниях, создающих ПО. Это означает, что возник научный подход к исследованию сложных систем, включая проблемы разработки программного обеспечения и управления организациями в целом. И хотя для меня момент истины опоздал ровно на 10 миллионов евро, я согласен со Стивеном Хокингом, что представление о сложности – ключевая парадигма XXI века.
Наше линейное мышление
К сожалению, применяя теорию сложности к решению конкретных проблем, мы постоянно сталкиваемся с определенным неудобством: наш мозг предпочитает видеть простые причинно-следственные связи и игнорировать сложность. В своей статье «Рожденные верить: Как наш мозг создает богов» [Brooks 2009] автор показывает, что человеческий мозг чрезмерно ориентирован на установление причинно-следственных связей, что заставляет нас видеть их даже там, где их нет. Как отмечается в статье, дети думают, что острые скалы созданы для того, чтобы о них могли чесаться животные, а реки – чтобы по ним можно было плавать на лодках. По всей видимости, устройство человеческого мозга заставляет нас повсюду усматривать целеполагание и причинно-следственные связи, даже если для этого нет никаких оснований.