Общий язык обсуждения
подходов к разработке
Возможность учиться, а также лучше и быстрее понимать раз-работку распределенных систем — лишь часть преимуществ от наличия общего набора паттернов проектирования. Паттерны ценны даже для опытных разработчиков распределенных си-
стем, уже хорошо их понимающих. Паттерны предоставля-ют общий словарь, позволяющий нам быстро понимать друг друга. Понимание — основа обмена знаниями и дальнейшего обучения.
Для того чтобы было понятнее, представим, что мы оба исполь-зуем один и тот же инструмент для постройки дома. Я называю его «сепулька», а вы называете его «бутявка». Как долго мы бу-дем спорить о преимуществах «сепулек» над «бутявками» или пытаться объяснить различие в их свойствах, пока не придем к тому, что это одно и то же? Только когда мы придем к тому, 26 Глава 1. Введение
что «сепульки» и «бутявки» — одно и то же, мы сможем учиться на опыте друг друга.
При отсутствии общего словаря много времени тратится либо на споры в поисках «насильственного согласия», либо на объ-яснение понятий, которые остальные понимают, но называют по-другому. Следовательно, ценность паттернов состоит еще и в том, что они обеспечивают наличие общего набора понятий и их определений, позволяющего не тратить время на дискус-сии об именах, а перейти к обсуждению деталей реализации основных идей.
За то короткое время, что я работал над технологией кон-тейнеров, я убедился в этом. На тот момент идея контейне-ров-прицепов (будут описаны в главе 2) прочно укрепилась в сообществе «контейнерщиков». Благодаря этому не было необходимости тратить время на разъяснение того, что зна-чит быть контейнером-прицепом, а вместо этого можно было перейти к обсуждению того, как использовать этот паттерн для решения конкретной задачи. «А вот если мы здесь ис-пользуем паттерн Sidecar...» — «Ага, кажется, я знаю, какой контейнер отлично подойдет для этой задачи». Этот пример подводит нас к третьему показателю ценности паттернов про-ектирования — возможности создания повторно используе-мых компонентов.
Общие повторно используемые компоненты
Паттерны позволяют учиться на чужом опыте и предоставляют общий язык для обсуждения тонкостей построения систем, но, помимо этого, они дают программисту еще один инструмент — возможность выявлять общие компоненты, которые достаточно реализовать однократно.
Глава 1. Введение 27
Если бы мы писали весь необходимый программный код са-мостоятельно, то мы никогда бы ничего не доделали. Более того, у нас едва бы получалось начать. Каждая созданная или создаваемая на сегодня система является результатом тысяч, а то и сотен тысяч человеко-лет работы. Код операционных систем, драйверов принтеров, распределенных баз данных, исполнительных сред контейнеров и их оркестраторов — все, что мы сегодня строим, создается на основе совместно используемых библиотек и повторно используемых компо-