На двери кабинета физики в институте, где я начинал свою трудовую деятельность, висела табличка: «Закрывайте, пожалуйста, дверь. Незакрытая дверь приводит к возрастанию энтропии Вселенной». Конечно, в данном случае термин «энтропия» был использован в житейском понимании — мера сложности, хаотичности или неопределённости системы. Незакрытая дверь — это, однозначно, непорядок, который приводит к общему увеличению энтропии. Народу табличка нравилась, никто не хотел причинять вред Вселенной. Призыв действовал — дверь обычно аккуратно закрывали.

Но что такое одна дверь в масштабах огромной Вселенной? Мелочь, не достойная внимания. А ведь из таких мелочей и состоит вся окружающая жизнь. Возьмём, к примеру, наши системы. Огромные левиафаны, состоящие из миллионов строк кода и миллионов записей в базах данных. При таких масштабах кажется, что одна строка — песчинка, ничтожно малая по сравнению со всей системой. Так к ней часто и относятся — как к незначительной песчинке — неаккуратно, без особого внимания к деталям. И раз за разом увеличивают энтропию как самой системы, так и окружающего мира.

В информатике есть известный замечательный принцип: «Garbage in, garbage out» (GIGO). Это правило очень хорошо подходит ко многим нашим системам. Если на вход поступает мусор, то на выходе будет очень сложно получить что-то, кроме того же мусора. Иногда многократно приумноженного.

Garbage in, garbage out
Garbage in, garbage out

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

Песчинка за песчинкой

Бывает, что новое программное обеспечение разрабатывают на базе нечётких или фактически отсутствующих бизнес-процессов. Как ни парадоксально, но именно Билл Гейтс в книге «Дорога в будущее» метко высказался по этому поводу: «Первое правило для применения любой техники или технологии в бизнесе: автоматизация эффективной операции умножает её эффективность. А второе: автоматизация неэффективной операции умножает её неэффективность».

В этом случае мусор на вход поступает с самого начала — ещё до разработки системы. Достаточно одного-двух маленьких уродливых «бизнес-процессиков». Мы же знаем, что большое начинается с малого. Песчинка там, песчинка здесь — гора постепенно растёт.

Песчинка за песчинкой // Фото fabrikasimf — freepik.com
Песчинка за песчинкой // Фото fabrikasimf — freepik.com

Работа над системой началась, песчинки множатся. Бизнес-аналитик небрежно оформил требование или опустил какой-то незначительный аспект реализации решения в ТЗ. В гору добавилась ещё одна песчинка, стрелка энтропии почти незаметно сместилась выше.

Разработчик базы данных неаккуратно заполнил описание поля в таблице или не заполнил его вовсе. Подумаешь, какая мелочь — в ТЗ же всё есть. Но новая песчинка уже неумолимо легла на своё место. Технический писатель перепутал слова в названии поля окна. Да кому какая разница, и так понятно. И потом, всё равно эту документацию никто читать не будет. Неужели, новая песчинка? Разумеется!

Всё это мелочи, незначительные крупинки. Но горячо любимые нами «костыли» и «велосипеды» — это уже не просто песчинки, а целые тачки, если не сказать, самосвалы песка. Да вы и сами прекрасно знаете, что творится в коде некоторых систем. Сейчас весь этот бардак политкорректно именуется «легаси».

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

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

Порядок в общем бардаке

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

Типичный унылый индустриальный пейзаж // Фото wirestock — freepik.com
Типичный унылый индустриальный пейзаж // Фото wirestock — freepik.com

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

Человек видит, что нарушения правил поведения другими членами социума не пресекаются, и, как следствие, перестаёт считать правила обязательными для себя (причём не только те, нарушения которых он наблюдал, но и любые другие).

На бытовом уровне теория разбитых окон иллюстрируется следующей фразой: «Если другим можно, то почему мне нельзя?» Если вы видите, что все вокруг постоянно нарушают правила, делают всё «спустя рукава», то будете ли вы считать себя обязанным поддерживать порядок в окружающем вас бардаке?

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

Конечно, против энтропии не попрёшь, она всё равно будет расти. Стремление мира к хаосу — фундаментальный закон природы. Но в наших силах хоть немного замедлить этот процесс. Или нет?...

Вообще, здорово, когда всё получается красиво, аккуратно и качественно. И не важно, что это — деревянная табуретка, программный код, или строительство дома. Чем меньше мусора будет поступать на вход, тем меньше его будет на выходе. А замедление роста энтропии станет дополнительным преимуществом.

Комментарии (11)


  1. vya
    18.01.2022 20:57
    +3

    Красиво и аккуратно это с водопадом и запасом времени. А когда при укладке черепицы, просят "вот этот фиолетовый кирпич измеряющий давление " в фундамент заложить уже вчера, то глаз волей-неволей дёргается и картинка портится.


    1. zloddey
      19.01.2022 08:48
      +1

      "Хотя бы" рефакторить. Отделять часто изменяемые части от редко изменяемых. Находить и уничтожать неиспользуемое.


      1. LARII
        19.01.2022 09:44
        +2

        До сих пор помню фразу своего шефа: "Ты хочешь, чтобы все было слишком хорошо."

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

        Второе средство - это попытки получения ответственности вне зоны ответственности. "Сеня, быстро расскажи товарищу почему Володька сбрил усы."


        1. zloddey
          19.01.2022 13:12
          +1

          До сих пор помню фразу своего шефа

          Текущего или бывшего?


          1. LARII
            19.01.2022 13:23
            +1

            Бывшего. Но я потратил 9 лет своей жизни на его компанию.


  1. denizko
    19.01.2022 14:14

    Крайне заниматель, получается виноваты все, кроме кодеров )))


    1. dolovar
      19.01.2022 14:18
      +1

      Дык:

      Стремление мира к хаосу — фундаментальный закон природы.
      Лично я так и не понял, о чем статья. Очередной призыв больше времени уделять рефакторингу?


      1. adeshere
        19.01.2022 18:45
        +2

        А я вот восхищен образностью языка и злободневностью статьи. Да, никакой конкретики вроде бы нет. Но если не задумываться иногда о вот таких "философских" вопросах, то где взять "путеводную звезду", выбирая то или иное решение при написании очередной строчки кода, комментария в заголовке функции, просто при закрывании двери? Каждый раз вспоминать конкретное "золотое правило" для данного конкретного случая? Да, можно и так. Но философия как раз затем и нужна, чтобы вместо множества частных случаев сформулировать общее правило, по которому автоматически "выводятся типы" для целого комплекса ситуаций. Благодаря этому сжимается объем информации, нужный для описания мира.

        Впрочем, такого рода статьи, наверно, уже ближе к искусству, а не к техдокам. А когда речь идет про искусство, то, как известно, о вкусах не спорят все фломастеры разные. Мне вот зашло. Жаль, не могу поставить в карму автору второй плюсик ;-)


  1. vox78
    20.01.2022 07:45

    Часо с таки сталкиваюсь - ага баг,но его мало кто заметит, тут надо много нового внедрить пока конкур5нты не обогнали, а баг этот потом...


  1. SeanT
    20.01.2022 07:45
    -1

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


  1. zaiats_2k
    20.01.2022 09:24
    +1

    Проверять надо входные данные, и выдавать ошибки, а не мусор транслировать дальше по трубе.