Язык шаблонов — это организованный и связный набор шаблонов , каждый из которых описывает проблему и ядро решения, которые могут быть использованы многими способами в определенной области знаний. Термин был придуман архитектором Кристофером Александером и популяризирован его книгой 1977 года «Язык шаблонов» .
Язык шаблонов также может быть попыткой выразить более глубокую мудрость того, что приносит живость в определенную область человеческой деятельности, посредством набора взаимосвязанных шаблонов. Живость — это один из терминов-заполнителей для «качества, которое не имеет названия»: чувство целостности, духа или благодати, которое, хотя и имеет различную форму, является точным и эмпирически проверяемым. [1] Александр утверждает, что обычные люди могут использовать этот подход к дизайну для успешного решения очень больших и сложных проблем дизайна.
Когда дизайнер что-то проектирует — будь то дом, компьютерная программа или лампа — он должен принять много решений о том, как решать проблемы. Отдельная проблема документируется с ее типичным местом ( синтаксис ) и использованием ( грамматика ) с наиболее распространенным и признанным хорошим решением, встречающимся в природе, как примеры, встречающиеся в словарях . Каждая такая запись представляет собой отдельный шаблон проектирования . Каждый шаблон имеет название, описательную запись и несколько перекрестных ссылок, как и словарная запись. Документированный шаблон должен объяснять, почему это решение хорошо в контексте шаблона.
Элементарные или универсальные модели, такие как «дверь» или «партнерство», являются универсальными идеалами дизайна, либо найденными в опыте, либо используемыми в качестве компонентов на практике, явно описываемыми как целостные решения сил в повторяющихся контекстах и обстоятельствах, будь то архитектура, медицина, разработка программного обеспечения или управление и т. д. Модели могут быть изобретены или найдены и изучены, например, естественные модели дизайна, характеризующие среду обитания человека. [2]
Как и все языки, язык шаблонов имеет словарь , синтаксис и грамматику – но язык шаблонов применяется к некоторой сложной деятельности, отличной от общения. В языках шаблонов для дизайна части разбиваются следующим образом:
Это упрощает работу по проектированию, поскольку дизайнеры могут начать процесс с любой части проблемы, которую они понимают, и работать над неизвестными частями. В то же время, если язык шаблонов хорошо зарекомендовал себя во многих проектах, есть основания полагать, что даже дизайнер, который сначала не полностью понимает проблему проектирования, завершит процесс проектирования, и результат будет пригоден для использования. Например, лыжники, заходящие внутрь, должны сбрасывать снег и хранить снаряжение. Грязные чистильщики снега и ботинок должны оставаться снаружи. Снаряжение требует ухода, поэтому стойки должны быть внутри.
Так же, как слова должны иметь грамматические и семантические отношения друг с другом, чтобы сделать разговорный язык полезным, шаблоны проектирования должны быть связаны друг с другом в порядке позиции и полезности, чтобы сформировать язык шаблонов. Работа Кристофера Александра описывает процесс декомпозиции, в котором у дизайнера есть проблема (возможно, коммерческое задание), он выбирает решение, затем обнаруживает новые, более мелкие проблемы, вытекающие из более крупного решения. Иногда более мелкие проблемы не имеют решения, и необходимо выбрать другое более крупное решение. В конце концов, все оставшиеся проблемы проектирования становятся достаточно мелкими или достаточно рутинными, чтобы их можно было решить путем импровизации строителей, и «дизайн» сделан.
Фактическая организационная структура ( иерархическая , итеративная и т. д.) остается на усмотрение дизайнера в зависимости от проблемы. Это явно позволяет дизайнеру исследовать дизайн, начиная с небольшой части. Когда это происходит, дизайнер обычно понимает, что проблема на самом деле является частью более крупного решения. На этом этапе дизайн почти всегда становится лучшим дизайном.
В языке, следовательно, каждый шаблон должен указывать свои отношения с другими шаблонами и с языком в целом. Это дает дизайнеру, использующему язык, большое количество указаний относительно связанных проблем, которые должны быть решены.
Самая сложная часть использования языка шаблонов внешним экспертом на самом деле заключается в получении надежного, полного списка проблем, которые необходимо решить. Конечно, люди, наиболее знакомые с проблемами, — это люди, которым нужен дизайн. Так, Александр, как известно, отстаивал импровизацию на месте заинтересованными, уполномоченными пользователями [3] [4] как мощный способ формирования очень работоспособных крупномасштабных первоначальных решений, максимизируя полезность дизайна и минимизируя переделку дизайна. Желание расширить возможности пользователей архитектуры было, по сути, тем, что привело Александра к осуществлению проекта языка шаблонов для архитектуры в первую очередь.
Важным аспектом шаблонов проектирования является выявление и документирование ключевых идей, которые отличают хорошую систему от плохой (это может быть дом, компьютерная программа или предмет повседневного использования), и помощь в проектировании будущих систем. Идея, выраженная в шаблоне, должна быть достаточно общей, чтобы ее можно было применять в самых разных системах в ее контексте, но при этом достаточно конкретной, чтобы давать конструктивные указания.
Диапазон ситуаций, в которых применяются проблемы и решения, рассматриваемые в шаблоне, называется его контекстом. Важной частью каждого шаблона является описание этого контекста. Примеры могут дополнительно проиллюстрировать, как шаблон применяется к совершенно разным ситуациям.
Например, шаблон Александра "МЕСТО ДЛЯ ОЖИДАНИЯ" рассматривает автобусные остановки так же, как комнаты ожидания в хирургии, предлагая при этом полезные и конструктивные решения. Книга "Gang-of-Four" Design Patterns Гаммы и др. предлагает решения, не зависящие от языка программирования и области применения программы.
Тем не менее, проблемы и решения, описанные в шаблоне, могут различаться по уровню абстракции и общности с одной стороны, и конкретики с другой стороны. В конечном итоге это зависит от предпочтений автора. Однако даже очень абстрактный шаблон обычно будет содержать примеры, которые по своей природе абсолютно конкретны и специфичны.
Шаблоны также могут различаться по тому, насколько они доказаны в реальном мире. Александр дает каждому шаблону оценку в ноль, одну или две звезды, указывая, насколько хорошо они доказаны в реальных примерах. Обычно утверждается, что все шаблоны нуждаются по крайней мере в некоторых существующих реальных примерах. Однако возможно документировать еще не реализованные идеи в формате, похожем на шаблон.
Модели в книге Александра также различаются по уровню масштаба – некоторые описывают, как построить город или квартал, другие имеют дело с отдельными зданиями и интерьером комнат. Александр рассматривает артефакты низкого масштаба как конструктивные элементы крупномасштабного мира, поэтому их можно соединить в иерархическую сеть.
Шаблон должен характеризовать проблемы, которые он призван решить, контекст или ситуацию, в которой эти проблемы возникают, а также условия, при которых предлагаемые решения могут быть рекомендованы.
Часто эти проблемы возникают из-за конфликта различных интересов или «сил». Возникает модель в виде диалога, который затем поможет сбалансировать силы и, наконец, принять решение.
Например, может быть шаблон, предполагающий беспроводной телефон. Силами будут потребность в общении и необходимость делать другие дела одновременно (готовить еду, осматривать книжную полку). Очень конкретный шаблон будет просто «БЕСПРОВОДНОЙ ТЕЛЕФОН». Более общие шаблоны будут «БЕСПРОВОДНОЕ УСТРОЙСТВО» или «ВТОРИЧНАЯ ДЕЯТЕЛЬНОСТЬ», предполагая, что второстепенная деятельность (например, разговор по телефону или осмотр карманов джинсов) не должна мешать другим действиям.
Хотя в своем контексте они совершенно неспецифичны, силы в шаблоне «ВТОРИЧНАЯ АКТИВНОСТЬ» очень похожи на силы в «БЕСПРОВОДНОМ ТЕЛЕФОНЕ». Таким образом, конкурирующие силы можно рассматривать как часть сущности концепции дизайна, выраженной в шаблоне.
Обычно шаблон содержит обоснование, ссылающееся на некоторые заданные ценности. Для Кристофера Александра самое важное думать о людях, которые будут соприкасаться с архитектурным произведением. Одна из его ключевых ценностей — заставить этих людей чувствовать себя более живыми. Он говорит о «качестве без имени» (QWAN).
В более общем смысле, можно сказать, что хорошая система должна быть принята, приветствована и с радостью принята как обогащение повседневной жизни теми, кто должен ее использовать, или — еще лучше — всеми людьми, на которых она влияет. Например, обсуждая уличное кафе, Александр обсуждает возможные желания гостя, но также упоминает людей, которые просто проходят мимо.
Тот же подход можно применить к техническим устройствам, таким как телефоны и автомобили, к социальным структурам, таким как команда, работающая над проектом, или к пользовательскому интерфейсу компьютерной программы. Например, качества программной системы можно оценить, наблюдая, тратят ли пользователи свое время на удовольствие или борьбу с системой.
Сосредоточившись на влиянии на жизнь человека, мы можем выявить закономерности, не зависящие от меняющихся технологий, и таким образом найти «вневременное качество» (Александр).
Обычно автор языка шаблонов или коллекции выбирает общую структуру для всех содержащихся в нем шаблонов, разбивая каждый на общие разделы, такие как контекст, постановка задачи, решение и т. д.
Например, шаблоны Кристофера Александра состоят из краткого имени, рейтинга (до двух символов '*'), сенсибилизирующей картинки, описания контекста, формулировки проблемы, более длинной части текста с примерами и пояснениями, формулировки решения, эскиза и дополнительных ссылок. Эту структуру и макет иногда называют «александрийской формой».
Александр использует специальную текстовую раскладку для обозначения различных разделов своих шаблонов. Например, формулировка задачи и формулировка решения напечатаны жирным шрифтом, последней всегда предшествует ключевое слово «Therefore:». Некоторые авторы вместо этого используют явные метки, что создает некоторую степень избыточности.
Когда дизайн выполняется командой, названия шаблонов образуют словарь, которым они могут поделиться. Это делает необходимым, чтобы названия шаблонов были легко запоминающимися и очень описательными. Вот некоторые примеры из работ Александра: МЕСТО ОКНА (помогает определить, где должны располагаться окна в комнате) и МЕСТО ДЛЯ ОЖИДАНИЯ (помогает определить характеристики автобусных остановок и залов ожидания в больницах, например).
Язык шаблонов, по замыслу Александра, содержит ссылки от одного шаблона к другому, поэтому при попытке применить один шаблон в проекте дизайнер вынужден обращаться к другим шаблонам, которые считаются полезными в его контексте.
В книге Александра такие ссылки собраны в части «ссылки» и отражены в части «контекст» связанного шаблона – таким образом, общая структура представляет собой направленный граф . Шаблон, связанный с «ссылками», обычно решает проблему более низкого масштаба, которая предлагается как часть проблемы более высокого масштаба. Например, шаблон «ОБЩЕСТВЕННОЕ ОТКРЫТОЕ КОМНАТА» имеет ссылку на «ЛЕСТНИЧНЫЕ СИДЕНЬЯ».
Даже без описания шаблона эти ссылки, наряду с содержательными названиями, несут сообщение: при строительстве места на открытом воздухе, где люди могут проводить время («ОБЩЕСТВЕННАЯ КОМНАТА НА ОТКРЫТОМ ВОЗДУХЕ»), рассмотрите возможность окружить его лестницей, где люди могут сидеть («ЛЕСТНИЧНЫЕ МЕСТА»). Если вы планируете офис («МАСТЕРСКИЕ И ОФИСЫ»), рассмотрите возможность организации рабочих пространств небольшими группами («МАЛЫЕ РАБОЧИЕ ГРУППЫ»). Александр утверждает, что связи в сети можно считать даже более значимыми, чем текст самих шаблонов.
Связи в книге Александра явно приводят к иерархической сети. Александр проводит параллель с иерархией грамматики – это один из аргументов в пользу того, чтобы говорить о языке шаблонов .
Идея связывания общепринята среди авторов шаблонов, хотя семантическое обоснование связей может различаться. Однако некоторые авторы, такие как Гамма и др. в Design Patterns , используют связывание шаблонов лишь в незначительной степени – возможно, потому, что оно не имело особого смысла для их коллекции шаблонов. В таком случае мы бы говорили о каталоге шаблонов, а не о языке шаблонов . [5]
Александр поощрял людей, которые использовали его систему, расширять его язык собственными шаблонами. Чтобы сделать это возможным, его книги не фокусируются строго на архитектуре или гражданском строительстве; он также объясняет общий метод языков шаблонов. Первоначальная концепция книги «Язык шаблонов» заключалась в том, что она будет опубликована в виде папки с тремя кольцами, чтобы страницы можно было легко добавлять позже; это оказалось непрактичным при публикации. [6] Подход на основе языка шаблонов использовался для документирования опыта в различных областях. Вот некоторые примеры: архитектурные шаблоны , шаблоны компьютерной науки , шаблоны проектирования взаимодействия , педагогические шаблоны , шаблоны садоводства , шаблоны социальных действий и шаблоны группового содействия. Подход на основе языка шаблонов также был рекомендован как способ продвижения гражданского интеллекта путем помощи в координации действий разных людей и сообществ, которые работают вместе над важными общими проблемами. [7] Спецификации Александра по использованию языков шаблонов, а также созданию новых остаются влиятельными, и его книги ссылаются на стиль экспертов в не связанных областях.
Важно отметить, что такие нотации, как UML или набор символов блок-схемы, не являются языками шаблонов. Их можно было бы точнее сравнить с алфавитом: их символы можно использовать для документирования языка шаблонов, но они не являются языком сами по себе. Рецепт или другой последовательный набор шагов, которым нужно следовать, с единственным правильным путем от начала до конца, также не является языком шаблонов. Однако процесс разработки нового рецепта может выиграть от использования языка шаблонов.
Кристофер Александр , архитектор и автор, придумал термин «язык шаблонов». [3] Он использовал его для обозначения общих проблем проектирования и строительства зданий и городов и того, как их следует решать. Решения, предложенные в книге, включают предложения, варьирующиеся от того, как должны быть структурированы города и поселки, до того, где должны располагаться окна в комнате.
Рамки и философия подхода «языка шаблонов» были первоначально популяризированы в книге «Язык шаблонов », написанной Кристофером Александером и пятью коллегами в Центре экологической структуры в Беркли, Калифорния, в конце 1970-х годов. В то время как «Язык шаблонов » содержит 253 «шаблона» от первого шаблона «Независимые регионы» (самый общий) до последнего «Вещи из вашей жизни», книга Александера « Вневременный способ строительства » более подробно рассматривает мотивацию и цель работы. Следующие определения «шаблона» и «языка шаблонов» перефразированы из «Языка шаблонов» : [3]
« Шаблон — это тщательное описание постоянного решения повторяющейся проблемы в контексте здания, описывающее одну из конфигураций, которая оживляет здание. Каждый шаблон описывает проблему, которая снова и снова возникает в нашей среде, а затем описывает основное решение этой проблемы таким образом, что вы можете использовать решение миллион раз, не делая это дважды одним и тем же способом». [3]
Язык шаблонов — это сеть шаблонов, которые вызывают друг друга. Шаблоны помогают нам запоминать идеи и знания о дизайне и могут использоваться в сочетании для создания решений.
Идея Кристофера Александра была принята в других дисциплинах, часто гораздо более активно, чем первоначальное применение шаблонов к архитектуре , как описано в книге A Pattern Language . [3] Примеры с 1990-х годов включают шаблоны проектирования программного обеспечения в программной инженерии и, в более общем плане, архитектурные шаблоны в компьютерной науке , а также шаблоны проектирования взаимодействия . С конца 1990-х годов педагогические шаблоны использовались для документирования передового опыта в обучении. [8] По крайней мере с середины 2000-х годов идея языка шаблонов была введена в проектирование архитектуры систем [9] [10] и шаблоны науки проектирования (методологии) в книге, написанной Виджаем Вайшнави и Уильямом Кюхлером с 66 шаблонами; [11] второе переработанное и расширенное издание этой книги было опубликовано в 2015 году с 84 шаблонами. [12] Книга «Освобождение голосов: язык шаблонов для революции в области коммуникации» , содержащая 136 шаблонов для использования информации и коммуникации для содействия устойчивому развитию, демократии и позитивным социальным изменениям, была опубликована в 2008 году вместе с веб-сайтом, содержащим еще больше шаблонов. [13] Колода «Групповые работы: язык шаблонов для оживления собраний и других собраний» была опубликована в 2011 году. [14] Идея языка шаблонов также применялась в пермакультурном дизайне. [15]
Уорд Каннингем , изобретатель вики , совместно с Майклом Мехаффи написал статью, в которой утверждалось, что между вики и языками шаблонов существуют глубокие связи, и что вики «фактически были разработаны как инструменты для содействия эффективному обмену и изменению шаблонов». [16]