Всем известный закон Мёрфи гласит: «Если что-то плохое может случиться, то оно обязательно произойдет». Согласитесь, не самая позитивная установка, особенно когда это касается работы. И тут мне стало любопытно, а есть ли такие законы, которые мне, как ИТ-специалисту, максимально помогут избежать «чего-то плохого». К своему удивлению, я их нашел, и даже не один. Потому делюсь с вами сегодня своими сакральными знаниями в блоге ЛАНИТ. 

Источник: https://vk.com/xandertoons
Источник: https://vk.com/xandertoons

Закон тривиальности Паркинсона

Однажды я участвовал во встрече по обсуждению крупной фичи, и половину времени, отведённого на обсуждение, мы выбирали цвет кнопки на одном из экранов.

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

Попробуйте обратить внимание на эту закономерность на вашей следующей рабочей встрече. Результат может быть неожиданным.

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

Спустя год в книге Parkinson’s Law Or the Pursuit of Progress Паркинсон переформулировал закон. Он описал работу комитета по строительству АЭС. Как оказалось, в процессе обсуждения люди меньше всего времени тратили на технические характеристики атомной электростанции и другие важные  факторы. Почему-то всех больше волновал сарай, куда можно будет ставить велосипеды. С 1958 года закон начал звучать следующим образом: «Люди в обсуждениях уделяют гораздо больше времени банальным или косметическим вопросам, нежели серьезным и существенным».

В мир ИТ закон пришел, конечно же, не сразу. Это случилось благодаря датскому программисту Поул-Хеннингу Кампу, который употребил его в своей email-рассылке 1999 года. Так закон и нашёл своё применение в разработке программного обеспечения. В специализированной англоязычной литературе даже появился термин bike-shed effect, что переводится как «эффект велосипедного сарая», ставший синонимичным понятием закона тривиальности.

Закон Брукса

У кого было такое, что проект, связанный с разработкой ПО, не укладывался в сроки и руководитель проекта предлагал просто подключить ещё людей? Полагаю, что я не один такой счастливчик. И это, скорее всего, абсолютно не помогло. Почему так? На этот вопрос дал ответ американский ученый Фредерик Брукс.

В 1975 году он выпустил книгу под названием «Мифический человеко-месяц, или Как создаются программные системы». В 1979 году она вышла на русском языке. По сути это сборник очерков, которые Брукс писал во время его работы в IBM. В нем отражены основные трудности и пути их решения, с которыми руководители сталкиваются на крупных программных проектах.

Журнал PC World отдал этой книге первое место в списке «Десять ИT-книг, которые стыдно признать, что не читал». Значение работы Брукса было отмечено самыми влиятельными журналами, которые писали об информационных технологиях. Все они в один голос говорили о том, что это своего рода бестселлер мира ИТ.

Так может быть, прежде чем приступать к новому программному проекту, все-таки имеет смысл почитать Фредерика Брукса?

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

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

Кроме того, разработчики в среднем тратят 20% времени на коммуникации друг с другом, и добавление нового члена команды в их структуру лишь всё усложнит.

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

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

Закон Иглсона

Сталкивались с таким? Внезапно в программе что-то ломается, вы долго ищете причину, а в итоге оказывается, что это вы сами и написали пару лет назад. И первая ваша мысль: «Нет, я не мог такое написать, меня подставили»!

На самом деле Иглсон был еще тем оптимистом: на практике достаточно и трёх недель. Доподлинно неизвестно, кем был Иглсон и когда он придумал свой закон. Путешествуя по различным интернет-ресурсам, мне удалось найти два варианта происхождения закона. На одном из форумов было обнаружено сообщение с этим законом еще в 1991 году. Скорее всего он возник в частной сети. Это подтверждается файлом comp.fortune за 1987 год, где цитировался закон Иглсона.  

Но на самом деле такое отношение к своему коду не является чем-то плохим. Если вы оглядываетесь на свой старый код и внутренне съеживаетесь – это означает, что с тех пор вы чему-то научились и стали лучше.

Гораздо хуже, если вы не увидите в своем старом коде ничего, что можно улучшить. Это верный признак того, что вы перестали развиваться.

Закон кибернетической энтомологии

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

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

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

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

Этот и другие законы, о которых я сегодня упоминал, отчасти шуточные и гиперболизированные, но я надеюсь: каждый из них поможет вам чуточку иначе взглянуть на мир вокруг вас, особенно такой сложный и непостоянный как мир ИT.

Наконец, как говорил Станислав Ежи Лец, не стоит забывать, что незнание законов не освобождает от ответственности, а вот знание - нередко освобождает.

Делитесь в комментариях историями о том, с какими законами мира ИТ вы сталкивались во время своей работы.

P.S. Этот материал я подготовил в рамках «Школы спикеров ЛАНИТ», который принес мне победу на TED-конференции.

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


  1. MentalBlood
    12.07.2022 10:22
    +3

    Если вы оглядываетесь на свой старый код и внутренне съеживаетесь – это означает, что с тех пор вы чему-то научились и стали лучше

    К сожалению не обязательно. Может просто контекст кода забыли и оттого он менее понятен (как будто плохо написан)


    1. b1rt Автор
      12.07.2022 11:26
      +1

      Да, такое тоже бывает. Но обычно, если код написан хорошо, небольшого времени на погружение в контекст хватает, чтобы в нём разобраться. А вот если есть проблемы с качеством кода, то погружение в контекст не сильно поможет, всё так же будешь думать "я не мог такое написать" :)


      1. victor_1212
        12.07.2022 15:00

        > если код написан хорошо, небольшого времени на погружение в контекст хватает

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

        ps

        о книге Брукса «Мифический человеко-месяц .." - imho в большой степени навеяна культурой IBM, и далеко не лучшей практикой разработки OS 360 даже для того далекого времени


  1. lebedec
    12.07.2022 10:43
    +12

    Закон тривиальности Паркинсона

    Однажды я участвовал во встрече по обсуждению крупной фичи, и половину времени, отведённого на обсуждение, мы выбирали цвет кнопки на одном из экранов. 

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

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

    В своей практике придерживаюсь некоторых правил, чтобы справиться с этой проблемой: 

    • Обсуждение ведётся в формате ответов на вопросы, указанных в агенде

    • Перед встречей всем выделяется время для подготовки 

    • На встречу допускаются только участники с требованиями или результатами анализа

    • Просто прийти “обсудить” или "послушать" нельзя, даже если это менеджер

    • Ведущий может закончить встречу в любой момент, если правила выше не выполняются во избежание лишней траты времени


    1. sshmakov
      12.07.2022 12:08
      +1

      Рекомендую книгу Патрика Ленсиони «Смерть от совещаний»


  1. aenigmatista
    12.07.2022 17:49
    +2

    Если программа работает, то это значит, что количество ошибок в ней четное.


    1. vanxant
      12.07.2022 23:45
      +1

      В частности, если ваш код скомпилировался с первого раза - напишите разработчикам компилятора, пусть исправят баг у себя. (с)


    1. arheops
      13.07.2022 00:38
      +1

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


      1. Ivan22
        13.07.2022 10:42

        Если программа сработала правильно сначит при ее выполнении сработало четное количество ошибок, или программист не понял задание


    1. SomeDD
      13.07.2022 08:34
      +1

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


  1. kosikov2006
    13.07.2022 08:46
    +1

    Работа заполняет всё времяотпущенное на неё.


    1. Soukhinov
      13.07.2022 15:25

      И даже больше!


  1. dmbreaker
    13.07.2022 16:07
    +2

    "Плохой разработчик за год работы создаёт два новых рабочих места"


  1. FreeRusland
    14.07.2022 19:31

    Статья отличная для инициации размышлений на эту тему, но поверхностная со второго закона (не расписаны причины до конца), это не вменяется в вину автору, просто личное мнение. Автору большое спасибо. Законы те повлияли и на написание этой статьи возможно, плюсы будто ставили любители обсуждать сарайчик возле АЭС хоть и это научно обоснованно))) Все указанные моменты лишь следствие и психология. Суть рядовые сотрудники точно не изменят (вероятность низка), не факт что и руководство сможет. Знать это конечно надо. Главное не кинуться сломя голову устранять все моменты, так как причина будет их далее порождать много и снова.

    Закон Брукса к примеру, "руководитель проекта предлагал просто подключить ещё людей" может быть из вежливости или просто, чтобы показать свою озабоченность вопросом, попутно показав, что помочь не в его силах (или просто лень). Можно даже подумать из-за того что отказываемся от помощи сразу, сами будем и виноваты, при разборе полётов вышестоящими, нам же предложили помощь, а мы в отказ (явления в научных терминах не буду расписывать в этом комментарии). Это наши будни капиталистически-бюрократического мира, а не логичного и адекватного ;-)

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