8 апреля 2019 г.

Разбитые окна

В социальной психологии есть такая "теория разбитых окон". Она утверждает, если упрощенно, что бардак который не исправляют — воспроизводит вокруг еще больший бардак. Точнее, утверждается, что человек смотрит на то, в каком состоянии находится его окружение, и интуитивно выводит отсюда неформальные социальные нормы (“как здесь можно себя вести”) — в противовес формальным социальным нормам ("как положено себя вести"). И если окружение показывает, что “здесь можно” бить окна, мусорить, другими способами нарушать формальные нормы, и это никого не волнует (окна не вставляют, мусор не убирают, нарушителей не штрафуют) — человеку психологически проще становится разбить еще одно окно, бросить жевачку на пол, припарковаться в неположенном месте.

Строго говоря, теория утверждает, что проще становится не только подражать уже существующему поведению, но и проще становится усилить его: не только бросить мусор, но и избить кого-то, ограбить, и так далее. Но я не хочу погружаться в детали, потому что я в них не разбираюсь. Да и не все ученые эту теорию поддерживают — не вполне очевидно, насколько точно она описывает причинно-следственную связь (как и большинство теорий в социальной психологии, впрочем). Здесь я ее использую скорее в качестве аналогии

У меня есть субъективное мнение, что какой-то похожий механизм действует в разработке. А именно: чем больше вокруг уже разбросано костылей, кривых, неудобных, и неоптимальных решений — тем больше вероятность, что очередное решение будет таким же, а то и хуже. Причем это касается не только кода, а и вообще окружения, в котором идет разработка: костыльная и ненадежная инфраструктура, непонятные и плохо работающие процедуры, тормозящие пользовательские интерфейсы — все это создает интуитивное ощущение, что нормально не заботиться особо о качестве. Что “и так сойдет” — здесь норма. И это ощущение потом переносится и на написание кода

И обратное тоже верно: когда в кодовой базе все аккуратно вылизано, описано, покрыто тестами, когда инфраструктура продумана и удобна — сделать что-то кривое становится психологически сложно. Как-то заранее стыдно, что ли? Ну как на чистенькой улочке бросить мусор мимо урны.

Причем (это уже я рефлексирую про себя) это работает на полу-автоматическом уровне: не только я сознательно выбираю “аккуратные” решения, а еще на стадии бессознательного поиска мозг уже чаще подсовывает решения соответствующего типа. Если вокруг все сделано аккуратно, изящно и продумано — кривые решения просто реже приходят в голову, и наоборот.

(Это, конечно, статистическое утверждение — кривые решения реже приходят в голову в хорошем окружении, но все-таки приходят)

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

Мне сложно сказать, как с этим у других. Со стороны я вижу, что в командах, где многое уже на костылях — люди склонны и дальше делать костыли. Но со стороны сложно понять, где здесь причина а где следствие. То ли костылей много потому, что люди изначально не умеют иначе, то ли люди научились их делать потому, что вокруг их уже много.