Иррациональное +7


image

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

В этот раз мне понадобится помощь 2-х исследователей в этой теме. Дэниел Канеман — психолог и экономист, лауреат нобелевской премии по экономике. Его научные изыскания поставили под сомнение человеческий рационализм, который доминировал в экономической сфере прежде. А так же Дан Ариели — профессор психологии в университете Duke, который поставил множество экспериментов на людях и издал известные книги о иррационализации. Оба, практически всю свою сознательную жизнь положили на то, чтобы изучить поведение человека, лучше узнать, по каким принципам работает наш мозг и что нами движет. А нам теперь можно просто прочитать их книги и впитать весь этот огромный опыт. Впрочем, я дам ссылки в конце статьи.

Дэниел описывает мозг в виде 2-х систем. System-1 — быстрая, инстинктивная, эмоциональная и System-2 — более медленная, рациональная.

System-1: Если проводить аналогию с компами, то это наверное cache + persistence. Каждый запрос в первую очередь проходит через этот участок памяти, где стоит множество проверок, готовых выстрелить в любой момент. Здесь формируются эмоции, на фоне которых происходит дальнейшая обработка запроса. Если попробовать представить это в виде кода, оно может выглядеть примерно так:

assert danger: 
        throw FearEvent()
        if (enemyAround)
            throw FightOrRunDecisionEvent()
        throw MobilizeHardware()
        ...

assert satisfaction: 
        throw RelaxationEvent()
        throw DelightEvent()
        ...
 

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

System-2: это рациональная часть. Что-то похожее на RAM + persistence. Если запрос пришел на этот уровень, это означает, что решение не было закешировано и тут есть над чем подумать и действительно принять решение. Здесь важнейшую роль играет наша долгосрочная память. Как на физическом уровне (нейроны, которые связаны друг с другом), так и на логическом (набор ассоциативных образов со связями), память человека можно представить в виде графа. В нем отражен наш основной жизненный опыт. Когда мы запускаем программу принятия решения, по сути это переход по ребрам графа в поисках оптимального решения или ответа на вопрос. Можно схематично представить этот процесс в виде запуска несколько потоков, как в алгоритме map-reduce, где на этапе map собираются наиболее подходящие результаты из разных областей, потом, с помощью reduce выбирается самое лучшее из того, куда мы смогли добраться с учетом множества факторов, которые довольно сложно уловить.

Если подытожить, поток исполнения всегда идет через System-1, и если подходящий обработчик найден или возникло исключение, тут же и заканчивается, иначе переходим на более медленный уровень System-2, где ситуация подвергается более тщательному анализу. На практике это означает, что далеко не всегда мы так рациональны, как про себя думаем. Подавляющее большинство реакций происходит автоматически, так и не достигнув рациональной части. И этот процесс подвержен большому количеству ошибок.

Я очень люблю code review. Это часть разработки, которая позволяет выявить скрытые проблемы, получить оценку решения проблемы кем-то еще, таким образом настраивается процесс передачи знаний и опыта внутри команды. В какой-то момент я осознал, что эта практика — меч о двух сторонах. С одной стороны все эти плюсы, с другой стороны это удар по коммандной работе и отношениям внутри коллектива, если использовать этот инструмент однобоко. Допустим, наш безымянный герой Вася получил задание и реализует какой-то кусок функционала. Он старается использовать весь свой потенциал и знания, для того, чтобы имплементация получилась наилучшей с его точки зрения. Получается она таковой или нет, зависит от конкретных способностей именно этого программиста, но в его глазах, данная имплементация чуть ли не идеализируется на уровне system-1. Приходит время code-review, появляется коллега Петя и разбивает эту идеальную картинку, пусть даже во благо всего проекта, предлагая еще лучшее решение. Результат вызывает бурю протеста у несчастного Васи. Ведь все было так хорошо и безоблачно, а тут какой-то нехороший человек… зачем он это делает? все пропало! System-1 в панике, мозг может среагировать злостью, яростью или может быть безнадежностью, тревогой, ощущением никчемности бытия. Наверх скорее всего оно не пробьется и никто этого никогда не увидит, но эти эмоции будут направлены именно на человека, который сделал ревью. Несмотря на то, что изначально комментарии были исключительно относительно кода, который написал наш программист, а не его лично. В дальнейшем эти реакции могут накапливаться и проскакивать в повседневном общении, а вот это уже чревато проблемами на уровне коммандной работы.

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

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

Со своей стороны для Васи неплохо было бы иметь возможность отделить себя от результатов своего труда. Осознавать, что вопросы к его коду, это не наезд на него лично, что люди очень часто делают ошибки и всегда есть куда расти и чему учиться, и это нормально. Что Петя, в конце концов выполняет точно так же свою работу, и старается сделать ее как можно лучше, насколько он на это способен. И конечно же, о том, что и у Пети и у Васи есть одна общая цель — сделать качественный продукт и сдать его в срок. К сожалению, понимание всего этого на рациональном уровне System-2 не гарантирует того, что System-1 все равно что-нибудь не учудит. Но тут, как ни странно, coupling мозга играет нам на руку, и поэтому даже такое понимание может помочь справиться с ситуацией.

Дэвид и Дан раскрывают тему подробнее (не про код ревью, а в целом), поэтому, если есть заинтересованность, очень рекоммендую следующие книжки:

Thinking, Fast and Slow
Predictably Irrational

Ну и моя прошлая статья на Хабре.
Спасибо за внимание.




К сожалению, не доступен сервер mySQL