Сегодня международный день числа Пи!

Отмечается вот прямо сейчас — 3/14 в 1:59:26




Нужно печь пи-роги и пить напитки, начинающиеся на "пи".

Удачно совпало с Масленицей, блины же тоже круглые!



В разработке ПО нет таких известных констант, но есть множество законов разной степени доказанности — от формальных теорем до эмпирических наблюдений. И все очень полезные! В основном они относятся к управлению, архитектуре или UX. Вот небольшой список:



Закон Брукса:



Добавление людей в запаздывающий проект вызывает ещё большее отставание.



(Это из книги "Мифический человеко-месяц", принципиальные вещи оттуда не изменились за почти 50 лет. Там много интересного, например формула, по которой "просто программа" обходится в 9 раз дешевле, чем протестированный, документированный и интегрированный программный продукт).



Закон Хофштадтера (того самого, который автор книги "Гёдель, Эшер, Бах: бесконечная гирлянда"):



Любое дело занимает больше времени, чем вы ожидали, даже если учесть Закон Хофштадтера.



Закон Конвея (это не тот Конвей, который изобрел игру "Жизнь" и сюрреальные числа. А сам закон очень важен для организации команд — отсюда растет DDD и микросервисы):



Организации, проектирующие системы, создают архитектуры, повторяющие структуру коммуникации этих организаций.



Принцип Постела (важен для интеграций):



Система должна быть консервативна в том, что она отправляет, и либеральна в том, что она принимает на вход.



Принцип Парето (применительно к ПО):



80% пользы получается от 20% функций системы.



Закон Линуса (Торвальдса, создателя Linux):



Под множеством взглядов все дефекты всплывают на поверхность.



(очень важно для нагруженных систем: мне рассказывали, что на главной странице Яндекса, к которой обращаются больше 1,5 млрд раз в день, сбои, вероятность которых 0,0000001%, происходят 10 раз в день! То есть, для нормальной работы вероятности сбоев должны быть сильно меньше.)



Закон Вирта:



ПО становится медленнее быстрее чем железо становится быстрее.



Фундаментальная теорема программной инженерии:



Любая проблема может быть решена добавлением ещё одного уровня абстракции.





Эти законы шуточные, но есть и формально доказанные теоремы. На удивление, их не очень много.



Одна из них — Теорема Кодда (создателя реляционной алгебры), которая доказывает эквивалентность операций реляционной алгебры и языка SQL. Несмотря на критику, реляционные базы до сих пор актуальны, т.к. под ними лежит формальная математическая теория со строгими доказательствами.



Другая, очень часто поминаемая в архитектуре распределенных систем: CAP-теорема (или теорема Брюера). Она утверждает, что в распределенной системе можно обеспечить не более двух свойств из триады:

🔸согласованность данных (Consistency) — во всех вычислительных узлах в один момент времени данные не противоречат друг другу;

🔹доступность (Availability) — любой запрос к распределённой системе завершается откликом, однако без гарантии, что ответы всех узлов системы совпадают;

🔻устойчивость к разделению (Partition tolerance) — расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций.



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



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



Расширение CAP — теорема PACELC (добавляет выбор между задержками — Latency — и согласованностью, даже если система не разделена, т.к. информация по сети не передается мгновенно).



Эти законы и теоремы стоит знать и учитывать (а про CAP-теорему бывает и на собеседованиях спрашивают!)