Теории информации, распределенных систем, массового обслуживания, и параллельных вычислений: примеры применения в жизни

Мысли по поводу дисциплины "Теория информации" из интеллект-стека, #сиОдО

В книге Working Backwards про культуру Амазона авторы приводят конкретную математику из теории информации: шестистраничные эссе вмещают в себя в шесть раз больше информации, чем презентация на 30-40 слайдов, рассказываемая за 40 минут, а скорость чтения - в три раза выше скорости презентации, то есть люди успевают прочитать шестистраничный документ за 20 минут.

В компьютерном коде, описание семантики в комментариях к функциям (т. н. Design by Contract) — это форма перекодирования (сжатия) информации для того, чтобы белковые программисты впоследствии быстрее могли понять, что делает функция: прочитать и понять текстовое описание быстрее, чем прочитать и понять сам код. Кроме того, это форма избыточности: если есть только код с неожиданным поведением, иногда невозможно понять, ошибочно ли это поведение, или так и было задумано. Дополнительный текстовый комментарий иногда может помочь разрешить эту неоднозначность: если поведение кода не совпадает с семантикой, описанной в комментарии, то в коде есть ошибка.

Теория распределенных систем, массового обслуживания, и параллельных вычислений

Теория распределенных систем лежит где-то между алгоритмикой и теорией информации, потому что, с одной стороны, описывает алгоритмы, а с другой — ее цели очень тесно связаны с теорией информации. Теория распределенных систем описывает, как получить абстракцию надежного носителя информации из множества ненадежных физических носителей (см. распределенные файловые системы), абстракцию надежной передачи данных поверх ненадежных физических каналов, как в смысле потерь/losses, так и в смысле приватности, в связке с теорией криптографии (см. TCP, TLS, и т. д.), и, в конечном счете, надежных вычислений поверх ненадежных вычислителей, опять же, как в смысле reliablity/availability/repeatability, так и в смысле приватности.

К теории распределенных систем также очень близки теория массового обслуживания/queueing theory и теория параллельных вычислений, которые также имеют связь с физичностью вычислителей: они основаны на понимании того, что обработка информации, передача информации, а также смена вычислительного контекста занимают ненулевое время и требуют ресурсов.

Некоторые организационные идеи, которые идут из этих теорий

  • Передача информации между сотрудниками должна быть надежной (хотя бы на 95%): если сообщение отправлено, оно должно быть прочитано, а на вопросы в сообщении даны какие-то ответы (как вариант: “сейчас нет времени прочитать/ответить”, в протоколе HTTP эта ситуация обозначается ошибкой 503). Если передача сообщений ненадежна, тормозится работа тех, кто отправляет сообщения, а в голове у них появляются “open loops” для ретрансмиссии: “я должен переспросить, если Вася не ответит до полудня завтра”).
  • Timeliness каналов: для сообщений в чатах и форумах/почте разные таймауты (промежуток времени между моментом отправки и моментом, когда сообщение считается неотвеченным). В чатах — короче.
  • Fan-out factors: какую информацию передавать конкретно Васе в личном сообщении (unicast), какую — в тематической группе/канале, или на встрече из нескольких людей (multicast, publish-subscribe паттерны), а какую — всем: на all-hands meetings, в канале #general (broadcast). На мой взгляд, оптимально максимизировать передачу информации в средней части этого спектра: почти ничего не передавать ни личными сообщениями, ни всем подряд.
  • Сериализация внимания: выделять как можно большие блоки времени для работы над одной задачей без смены контекста, уменьшать work-in-progress, для уменьшения как затрат на передачу информации, так и смену контекста. Применимо как на уровне одного человека, так и уровне команды.
  • Парная/групповая работа, ревью, совместное владение системами: все это техники повышения надежности хранения информации и вычислений через избыточность.
  • Избегать ситуаций, когда у оргзвена (человека, команды) слишком много обязанностей и задач: при работе на пределе возможностей (capacity) часто резко ухудшается среднее время ответа (latency), задержки становятся менее предсказуемыми (latency variance), и даже ухудшается эффективность. The Goal Гольдратта про это.