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


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



E — экспериментатор (experimenter), T — учитель (teacher), L — ученик (learner)


Суть эксперимента заключалась в изучении реакции людей на приказы, которые вступают в конфликт с их моральными принципами. До проведения эксперимента считалось, что большинство испытуемых прекратят эксперимент как только поймут, что причиняют Ученику боль. Однако во время проведения эксперимента выяснилось, что поразительное количество испытуемых доходили до максимального разряда в 450 вольт.


В первом наборе экспериментов Милгрэма 65 процентов участников (26 человек из 40) использовали максимальное возможное значение в 450 вольт, хотя им было и неприятно делать это; в определённый момент времени каждый участник останавливался и сомневался в эксперименте; некоторые участники хотели прекратить и вернуть деньги, которые им заплатили за участие. В течении эксперимента у участников наблюдались различные степени волнения и стресса. Они потели, дрожали, заикались, кусали губы, стонали, впивались ногтями в кожу, некоторые нервно смеялись.

Когда мы узнаём о таких результатах, то нам хочется верить, что мы бы так никогда не поступили. Нам хочется верить, что “просто подчинение приказам” — это человеческий недостаток, которого у нас нет. Но эксперименты, типа эксперимента Милгрэма показывают, что такая вера в лучшем случае оптимистична, а в худшем — полностью не верна.


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



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


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


  • «Пожалуйста, продолжайте» (Please continue/Please go on);
  • «Эксперимент требует, чтобы вы продолжили» (Experiment requires that you continue);
  • «Абсолютно необходимо, чтобы вы продолжили» (It is absolutely essential that you continue);
  • «У вас нет другого выбора, вы должны продолжать» (You have no other choice, you must go on).

Не используя ничего, кроме слов экспериментатор смог добиться того, что 65 процентов испытуемых против своей воли били очень болезненными разрядами тока других людей. Интересно, какие слова мы используем в контексте разработки программного обеспечения?


  • Это не мы решаем, а команда продукта
  • Нам нужно уложиться в дедлайн
  • Команда маркетинга собирается выпустить пресс-релиз на следующей неделе
  • Мы закрываем слишком мало тикетов
  • Мы все равно потом выкинем этот код
  • Это временное решение
  • Нужно улучшить производительность твоей команды
  • Это затронет небольшое количество пользователей
  • Это не приоритетно для нас сейчас
  • Мы починим это потом
  • Этого хочет руководство
  • Почему так долго?
  • Нужно быстрее сделать это

Я пишу об этом не для того, чтобы предложить какое-то решение. У меня его нет. Я пишу для того, чтобы взрастить — прежде всего в себе — сочувствие и понимание. Когда я вижу код, который оставляет чувство недоумения или поведение, которое я не понимаю я должен помнить, что действия не всегда отражают намерения. Я должен помнить, что инженеры оставляют плохой код не потому, что им всё равно — они оставляют плохой код потому, что у них не было свободы привести его в порядок. И они оставляют баги не потому, что им плевать на пользователей, а потому, что у них не было полномочий отклоняться от роадмапа продукта.

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


  1. vassabi
    12.12.2018 12:25

    Вероятно в какой-то момент человек, обладающий властью ясно дал понять, что у нас нет времени исправлять проблемы или эти проблемы недостаточно приоритетны по сравнению с другими вещами в роадмапе. Или что удаление мертвого кода не приносит ценности пользователю. В итоге оставляем код как есть и переходим к следующей задаче, хотя это вступает в конфликт с нашим моральным компасом и понятиями о том, что такое хорошо, а что такое плохо.

    Увы, это хорошо работает, когда ваш код у кого-то уже работает и вы напрямую работаете с его пользователем. И вы чините его проблему так чтобы не поломать код других пользователей и чтобы в бущем снова что-то прикрутить без проблем.
    Когда продукт еще не продается, тогда твой пользователь — это его заказчик. Который один и который в код не смотрит от слова «вообще».
    Если вы не продадите ему результаты своего труда, то конечно мировая красота будет приятно поражена чистотой и стройностью вашего кода, но…

    PS: понятно, что перегиб в сторону «х-к, х-к и в продакшен», тоже не хорошо, везде нужен баланс. Просто я столько неплохих проектов видел, которые «не взлетели» из-за непонимания разрабами нужд бизнеса (и внутреннего ака продажники и внешнего ака клиенты) иметь работающее «здесь и сейчас» решение…


  1. exehoo
    12.12.2018 14:10
    +1

    Не используя ничего, кроме слов экспериментатор смог добиться того, что 65 процентов испытуемых против своей воли били очень болезненными разрядами тока других людей.

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


  1. theTeacherOfEnglish
    12.12.2018 17:22

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


    1. mantisa
      13.12.2018 08:41

      не совсем уж и мертвым )

      вяло жівушім?


      1. theTeacherOfEnglish
        13.12.2018 13:52

        Да, и непокрытым тестами.


  1. adictive_max
    13.12.2018 04:37

    ИМХО, эксперимент Милгрэма — вообще какая-та сомнительная тема со странными выводами. Есть законный научный эксперимент, руководитель эксперимента говорит, что «всё идёт по плану». На каком основании оператор установки должен срывать эксперимент?
    Ещё и делают какие-то далеко идущие выводы, распространяющиеся за пределы лаборатории. Влияние «авторитета», пониженная эмпатия, «психология подчинения» и всё такое…
    Так то, с такой точки зрения, некоторые врачебные специальности — это вообще поголовно маньяки-садисты, они каждый день причиняют людям боль по приказ директора клиники, ещё и деньги за это получают.


    1. vkar
      13.12.2018 06:57

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


      1. adictive_max
        13.12.2018 10:47

        А причём здесь нацисты и моральные принципы? Не надо выдёргивать поступи людей из контекста и оценивать их в «сферическом вакууме». По легенде, это научный эксперимент, проводимый над гражданином США по законам США, то есть:
        1 — опасность для здоровья и жизни «подопытного» настолько мала, насколько возможно
        2 — «подопытный» сам добровольно согласился на участие в эксперименте.
        По сути, оценивается не сколько людей «переступят через себя», а сколько пренебрежёт добровольно принятыми на себя обязанностями из-за личного психологического дискомфорта.

        Причём, если верить вики, то чем меньше у реальных испытуемых уверенность в безопасности «подопытного» тем меньше они слушались «авторитета».


    1. uzzz Автор
      13.12.2018 11:00

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

      «На каком основании оператор установки должен срывать эксперимент» — возможность выхода из эксперимента это обязательное условие проведения эксперимента.


    1. ldss
      13.12.2018 19:31
      +1

      вообще какая-та сомнительная тема со странными выводами


      Да вывод-то простой — звездное небо над головой есть, а морального закона внутри — нету


      1. vassabi
        15.12.2018 13:45

        в принципе — над именно таким состоянием и работает тоталитарная государственная политика последние лет сто: «наш закон защищает простого гражданина, а простой гражданин должен слушаться наших законов».

        длинная нудная простыня, которую можно не читать
        Посмотрите на любое современное государство (или иное современное и поэтому тоталитарное общество, в котором есть какие-то законы) — от США и до Китая, от Германии и до Сомали. Даже талибаны и игилами — и те не устают повторять на своих территориях: «вам надо жить по нашим законам, наши законы — самые лучшие законы в мире» (а кто против — тот ССЗБ).
        Наличие морального закона внутри им всем только мешает. В одних местах граждан либо просто убивают, либо используют на тяжелых работах. В других — сажают в тюрьму. В третьих — подвергают публичному остракизму: т.е. публикуются адреса, телефоны со словами «мы знаем где ты живешь, работаешь и где учатся твои дети», собирается группа у порога с плакатами «изза тебя голодают дети африки\вымирают киты\ и т.д.», а на работу начальнику (или в универ ректору) начинают названивать «доброжелатели» со словами: «как вы можете держать у себя этого негодяя???».

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