Язык шаблонов
Язык шаблонов (англ. pattern language) — организованный и структурированный набор шаблонов, каждый из которых описывает проблему и суть решения, применимого в различных вариациях в определённой профессиональной области. Термин был введён архитектором Кристофером Александером (англ. Christopher Alexander) и получил широкую известность благодаря его книге 1977 года «A Pattern Language».
Язык шаблонов также можно рассматривать как способ выражения глубинного знания о том, что приносит «живость» в выбранную сферу человеческой деятельности, посредством системы взаимосвязанных шаблонов. «Живость» — одно из обозначений «качества без имени» (англ. the quality that has no name): чувство целостности и гармонии, которое может принимать различные формы, но поддаётся точному и эмпирическому описанию[1]. Александр утверждает, что обычные люди могут использовать этот подход к проектированию для успешного решения очень крупных и сложных задач.
Что такое шаблон?
Когда проектировщик разрабатывает что-либо — будь то дом, компьютерная программа или лампа, — ему необходимо принять множество решений относительно способов разрешения возникающих задач. Одна задача документируется с указанием её типового места (синтаксис) и назначения (грамматика), а также с описанием наиболее распространённого решения, наблюдаемого на практике, по аналогии с определениями в словарях. Каждая такая запись является отдельным шаблоном проектирования. Каждый шаблон обладает названием, описанием и перекрёстными ссылками, подобно словарной статье. Описанный шаблон должен объяснять, почему это решение эффективно в соответствующем контексте.
Базовые или универсальные шаблоны, такие как «дверь» или «партнёрство», являются идеалами проектирования, либо выделенными из опыта, либо предназначенными для включения в практические решения и описываются как целостные разрешения сил, действующих в повторяющихся контекстах, будь то архитектура, медицина, разработка ПО или управление[2].
Как и любой язык, язык шаблонов обладает лексикой, синтаксисом и грамматикой, однако он применяется к сложной деятельности, отличной от коммуникации. В языках шаблонов для проектирования эти части распределяются следующим образом:
- Описание языка — лексика — это коллекция названных и описанных решений для задач в определённой области. Такие решения получили название шаблоны проектирования. Например, в архитектурном языке описываются поселения, здания, комнаты, окна, защёлки и т.д.
- Каждое решение включает синтаксис — описание его места в более крупной или более абстрактной структуре. Это, в свою очередь, автоматически связывает решение с другими необходимыми. Например, комнаты предусматривают способы попадания света и передвижения людей.
- Решение содержит грамматику, то есть описание того, как оно решает конкретную проблему или приносит пользу. Если польза не требуется, решение не используется. Иногда определённый элемент проекта можно опустить ради экономии ресурсов; если нет необходимости в отдельной комнате ожидания, её можно заменить простым дверным проёмом.
- В главе с описанием языка грамматика и синтаксис перекрёстно индексируются (часто алфавитным указателем названий шаблонов), чтобы проектировщик мог быстро находить смежные решения и логично документировать процесс. В книге Александера «A Pattern Language» шаблоны расположены по убыванию масштаба с отдельным алфавитным указателем.
- Сеть связей в индексе языка предоставляет множество путей для осмысления проектирования.
Это упрощает процесс проектирования, позволяя начинать работу с любой знакомой части задачи, постепенно переходя к неизвестным областям. Если язык шаблонов хорошо себя зарекомендовал на многих проектах, можно полагать, что даже проектировщик, не полностью понимающий исходную задачу, завершит проект и получит пригодный результат. Например, лыжники, входящие с улицы, должны иметь место для хранения экипировки, а грязь и чистка обуви остаются снаружи.
Множество шаблонов образует язык
Точно так же, как слова должны быть связаны друг с другом синтаксически и семантически для образования полезного языка, шаблоны должны быть связаны по положению и функциональности для образования языка шаблонов. Работа Кристофера Александера описывает процесс декомпозиции: проектировщик сталкивается с проблемой, выбирает решение, далее обнаруживает новые частные задачи, возникающие из этого решения. Иногда у подзадачи нет решения — тогда стоит выбрать другое общее решение. В итоге все оставшиеся задачи становятся достаточно мелкими и рутинными для самостоятельного разрешения исполнителями.
Фактическая организационная структура (иерархическая, итеративная и т. п.) остаётся на усмотрение разработчика и зависит от задачи. Это даёт свободу начинать проект с мелкой части; нередко такой старт позволяет обнаружить, что задача — часть более крупной системы, что ведёт к улучшению общего решения.
Каждый шаблон должен указывать связи с другими шаблонами и с языком в целом, что даёт проектировщику ценные ориентиры относительно сопутствующих проблем.
Сложнее всего стороннему специалисту получить полный и достоверный перечень задач для решения. Как правило, лучше всех знакомы с проблемой те, кому и нужен проект, поэтому Александр настаивал на работе непосредственно с вовлечёнными пользователями[3][4] на месте; такой подход позволяет вырабатывать наиболее действенные и крупномасштабные решения, одновременно увеличивая их практическую ценность и уменьшая объём доработок. Именно стремление предоставить пользователям архитектуры больше возможностей привело Александера к разработке языка шаблонов.
Проектные задачи в контексте
Важная особенность шаблонов — фиксация и документирование ключевых идей, которые отличают хорошую систему (будь то дом, программа или объект ежедневного быта) от плохой, а также помощь при создании будущих систем. Идея, выраженная в шаблоне, должна быть достаточно общей, чтобы применяться в разных системах в рамках контекста, но одновременно служить конструктивным ориентиром.
Множество ситуаций, в которых задача и её решение актуальны, называется контекстом шаблона. Описание контекста всегда включает примеры, иллюстрирующие применение решения в различных случаях.
Например, шаблон Александера «МЕСТО ОЖИДАНИЯ» (англ. A PLACE TO WAIT) относится к оформлению как автобусных остановок, так и комнат ожидания в клиниках, предлагая конструктивные решения для обеих ситуаций. Книга «Шаблоны проектирования» (англ. Design Patterns) Гаммы и др. содержит шаблоны, не зависящие от языка программирования или предметной области программ.
Уровень абстракции и общности шаблонов может сильно варьироваться. Даже очень общий шаблон обычно снабжается конкретными примерами. Cуществует градация по степени апробированности шаблонов — Александр отмечает их нуля, одной или двумя звёздами в зависимости от количества реальных примеров. Считается, что любой шаблон должен иметь хотя бы минимальную внедрённость в реальных прототипах, но также допустимо документировать непроверенные идеи в описательном формате.
Уровень описания шаблонов в книге Александера тоже различается: одни относятся к градостроительству, другие к отдельным зданиям или интерьерам. Мелкомасштабные объекты рассматриваются как конструктивные единицы крупномасштабных, соединяясь в иерархическую сеть.
Балансировка сил
Шаблон должен характеризовать задачи, которые призван решать, ситуации их возникновения и условия допустимости предложенных решений.
Часто задачи возникают из столкновения интересов или «сил». Шаблон выстраивается в ходе диалога, который уравновешивает силы и способствует принятию решения.
Пример: шаблон «беспроводной телефон» — его смысл в сочетании потребности в связи и необходимости одновременно заниматься другими делами (например, готовкой или просмотром книг). Более общий шаблон — «беспроводное устройство» или «вторичная деятельность», предполагающий, что вторичная деятельность (например, разговор по телефону или проверка карманов) не должна мешать основной.
Хотя контексты шаблонов «вторичная деятельность» и «беспроводной телефон» различны, лежащие в их основе «силы» схожи. Это отражает суть проектной идеи.
Мотивация и обоснование шаблонов
Обычно шаблон включает обоснование, связанное с определёнными ценностями. Для Александера важнейшая цель — создание архитектурных объектов, делающих людей более живыми; это «качество без имени» (англ. quality without a name, QWAN).
В более общем случае хорошая система должна быть с радостью воспринята и обогатить ежедневную жизнь как пользователей, так и других затронутых людей. Обсуждая, например, уличное кафе, Александр анализирует желания не только посетителей, но и прохожих.
Те же принципы применимы к техническим устройствам, общественным структурам и пользовательскому интерфейсу программ — качество решения можно измерять тем, как пользователи воспринимают систему.
Сфокусировавшись на последствиях для жизни людей, удаётся выделить шаблоны, не зависящие от технологии, и найти «вневременное качество» (Александр).
Типичная структура и оформление
Авторы языков или коллекций шаблонов обычно выбирают для всех своих шаблонов общую структуру: контекст, формулировка задачи, решение и т. д.
Шаблоны Александера, к примеру, состоят из короткого названия, рейтинга (до двух звёзд), картинок, описания контекста, формулировки задачи, развернутого объяснительного текста, краткого изложения решения, схемы и дополнительных ссылок. Такая схема иногда называется «Александровской формой».
Александр выделяет ключевые разделы шаблона визуально: формулировка проблемы и решение набираются жирным шрифтом, а последний всегда предваряется ключевым словом «Следовательно:». Некоторые авторы для этого применяют явные метки.
Значимые названия
При командной работе названия шаблонов становятся общим словарём, поэтому они должны быть легко запоминаемыми и однозначными. Например: WINDOW PLACE (место для окна) и A PLACE TO WAIT (место ожидания) — оба из работ Александера.
Агрегация в ассоциативной сети (язык шаблонов)
Язык шаблонов, как задумывал Александер, изобилует связями между шаблонами; пытаясь применить какой-то шаблон в проекте, разработчик автоматически обращается к другим, значимым в данном контексте.
В книге Александера такие связи собираются в разделе «ссылки» и отражаются в разделе «контекст» шаблона-адресата. Таким образом, возникает структура ориентированного графа. Связываемый шаблон, как правило, отвечает за более частную задачу и предлагается как часть для решения общезадачной проблемы. Например, шаблон «ПУБЛИЧНАЯ ВНЕШНЯЯ КОМНАТА» указывает на шаблон «ЛЕСТНИЧНЫЕ СИДЕНЬЯ».
Даже без текстового описания связи и значимые имена сами по себе служат подсказкой: если проектируется внешнее пространство для людей, стоит окружить его лестницами с сидениями, если офис — организовать рабочие места группами и т. д. Александр считает, что такие связи порой важнее самой прозаической части шаблона.
Все эти связи выстраивают иерархическую сеть — аналог грамматической структуры языка и один из аргументов на пользу термину «язык».
Идея связей между шаблонами общепринята у авторов языков, хотя обоснование выбора связей может различаться. Авторы книги «Шаблоны проектирования» (Гамма и др.) делают на них меньше акцента — их описание скорее каталог шаблонов, чем связанный язык[5].
Использование
Александр поощрял пользователей своей системы дополнять язык собственными шаблонами. Поэтому его книги не ограничиваются только архитектурой или гражданским строительством, а излагают общий метод создания языков шаблонов. Первоначально предполагалось, что книга «A Pattern Language» выйдет в виде папки с кольцами для свободного добавления страниц, однако это оказалось неудобно для массовой публикации[6]. Подход языка шаблонов применяется для описания опыта в самых разных областях: архитектура, разработка ПО, паттерны интерактивного проектирования, педагогические паттерны, ландшафтное проектирование, социальная активность, фасилитация групп и др. Язык шаблонов также предлагается как способ развития гражданского интеллекта: помогает координировать действия разных людей и сообществ, работающих над общими задачами[7]. Спецификации Александера по применению языков шаблонов и созданию новых продолжают влиять на специалистов в самых разных областях, а его книги часто используются как образец.
Важно понимать, что нотации вроде UML или набора символов блок-схем — не языки шаблонов. Их можно сравнить с алфавитом: с их помощью можно зафиксировать язык шаблонов, но они сами системным языком не являются. Рецепт или другая последовательная инструкция, имеющая однозначный путь «от и до», это тоже не язык шаблонов. Зато при разработке нового рецепта язык шаблонов может оказаться полезным.
Пример шаблона
- Название: Пропорция шоколадной крошки (ChocolateChipRatio)
- Контекст: Вы готовите небольшие партии печенья с шоколадной крошкой для семьи и друзей
- Сначала рассмотрите шаблоны: Пропорция сахара (SugarRatio), муки (FlourRatio), яиц (EggRatio)
- Проблема: Определить оптимальное соотношение шоколадной крошки и теста
- Решение: Учитывайте, что большинству нравится, когда шоколада много, но его избыток не должен делать печенье непрочным. В малых партиях стоимость не существенна. Следовательно, используйте максимальное количество крошки, обеспечивающее устойчивую текстуру.
- Далее рассмотрите: Пропорцию орехов (NutRatio), время выпечки (CookingTime) или способ заморозки (FreezingMethod)
Происхождение
Кристофер Александр (англ. Christopher Alexander), архитектор и автор, впервые ввёл термин «язык шаблонов»[3]. Он применил его для описания типовых проблем проектирования и строительства зданий и городов, а также способов их решения. В книге даются рекомендации — от структуры городов до расположения окон.
Концепция и философия подхода «языка шаблонов» получила известность с выходом книги «A Pattern Language», написанной Александером с коллегами в Центре экологических структур в Беркли во второй половине 1970-х. «A Pattern Language» включает 253 шаблона — от наиболее общего «Независимые регионы» (Independent Regions) до последнего — «Вещи из вашей жизни» (Things from Your Life). Книга «The Timeless Way of Building» содержит более глубокое обсуждение сути этого подхода. Ниже приводятся перефразированные определения:[3]
«Шаблон — это тщательное описание проверенного временем решения повторяющейся задачи в области архитектуры; описывает одну из компоновок, придающих зданию "живость". Каждый шаблон фиксирует проблему, многократно встречающуюся в нашей среде, и затем формулирует суть решения так, чтобы его можно было применять снова и снова, но каждый раз по-новому»[3]
Язык шаблонов — это сеть шаблонов, ссылающихся друг на друга; они помогают систематизировать знания и использовать их для создания новых решений.
Области применения
Идея Кристофера Александера была адаптирована во многих других дисциплинах, зачастую шире, чем исходное применение в архитектуре, к которому относилась первоначальная книга. Среди примеров с 1990-х годов — шаблоны проектирования в инженерии программного обеспечения и, шире, архитектурные шаблоны в информатике и паттерны интерактивного проектирования. С конца 1990-х педагогические паттерны используются для описания хороших практик в обучении.[8]. C середины 2000-х идея языка шаблонов внедряется в системную архитектуру[9][10] и шаблоны научного проектирования — отдельная книга В. Вайшнави и У. Кечлера содержит 66 шаблонов[11]; второе переработанное и дополненное издание этой книги (2015) содержит 84 шаблона[12]. В 2008 году вышла книга Liberating Voices: A Pattern Language for Communication Revolution — она содержит 136 шаблонов эффективного использования ИКТ для устойчивого развития, демократии и социальных изменений, с сопутствующим сайтом с расширенной коллекцией[13]. В 2011 году выпущена карточная колода Group Works: A Pattern Language for Bringing Life to Meetings and Other Gatherings[14]. Применение идеи языка шаблонов отмечено и в пермакультурном проектировании[15].
Уорд Каннингем (англ. Ward Cunningham), изобретатель wiki, совместно с Майклом Мехаффи показал глубокие параллели между вики-системами и языками шаблонов и утверждал, что вики были специально созданы для совместного сбора и развития таких шаблонов[16].
Примечания
- ↑ Alexander, Christopher. The Timeless Way of Building. — Oxford University Press, 1979. — ISBN 978-0-19-502402-9.
- ↑ Henshaw, J. Guiding Patterns of Naturally Occurring Design: Elements. PURPLSOC 2015 proceedings, July 3-5 2015 Krems, Austria PURPLSOC meeting on the many open scientific questions, e.g. regarding the theoretical background of patterns and the practical implementation of pattern methods in research and teaching.
- ↑ 1 2 3 4 Alexander, Christopher. A Pattern Language: Towns, Buildings, Construction. — Oxford University Press, 1977. — P. 1216. — ISBN 978-0-19-501919-3.
- ↑ Alexander, Christopher, The Oregon Project
- ↑ Andy Dearden, Janet Finlay (январь 2006). “Pattern Languages in HCI: A critical review”. Human Computer Interaction. 21 (1). Проверьте дату в
|date=(справка на английском) - ↑ Portland Urban Architecture Research Laboratory Symposium 2009, presentation by 4 of 6 original authors of A Pattern Language.
- ↑ Schuler, Douglas Choosing success: pattern languages as critical enablers of civic intelligence. publicsphereproject.org. Portland Urban Architecture Research Laboratory Conference, Portland, OR, 2009. Дата обращения: 10 июня 2024. Архивировано 16 апреля 2025 года.
- ↑ Fincher, Sally (сентябрь 1999). “Analysis of design: an exploration of patterns and pattern languages for pedagogy”. Journal of Computers in Mathematics and Science Teaching. 18 (3): 331—348. Проверьте дату в
|date=(справка на английском) - ↑ Cloutier, Robert J.; Verma, Dinesh (июнь 2007). “Applying the concept of patterns to systems architecture”. Systems Engineering. 10 (2): 138—154. DOI:10.1002/sys.20066. S2CID 16218191. Проверьте дату в
|date=(справка на английском) - ↑ Cloutier, Robert J.; Muller, Gerrit; Verma, Dinesh; Nilchiani, Roshanak; Hole, Eirik; Bone, Mary (март 2010). “The concept of reference architectures”. Systems Engineering. 13 (1): 14—27. DOI:10.1002/sys.20129. S2CID 10835558. Проверьте дату в
|date=(справка на английском) - ↑ Design Science Research Methods and Patterns (англ.). crcpress.com. Auerbach Publications (октябрь 2007). Дата обращения: 10 июня 2024.
- ↑ Design Science Research Methods and Patterns, 2nd Edition (англ.). crcpress.com. CRC Press (2015). Дата обращения: 10 июня 2024. Архивировано 26 февраля 2015 года.
- ↑ Liberating Voices Pattern Language. publicsphereproject.org. Дата обращения: 10 июня 2024. Архивировано 25 сентября 2025 года.
- ↑ Group Pattern Language Project. groupworksdeck.org. Дата обращения: 10 июня 2024.
- ↑ Jacke, Dave. Лесосад как язык шаблонов (A Forest Garden Pattern Language) // Edible Forest Gardens, Volume II: Ecological Design And Practice for Temperate-Climate Permaculture / Dave Jacke, Eric Toensmeier. — White River Junction, VT : Chelsea Green Publishing, 2005. — P. 63–139. — ISBN 1-931498-80-6.
- ↑ Cunningham, Ward. Wiki as pattern language // Proceedings of the 20th Conference on Pattern Languages of Programs, October 23–26, 2013, Monticello, Illinois / Ward Cunningham, Michael W. Mehaffy. — Corryton, TN : The Hillside Group, 2013. — P. 32:1–32:14. — ISBN 9781941652008.
Литература
- Кристофер Александр, Сара Исикава, Мюррей Сильверстайн. A Collection of Patterns which Generate Multi-Service Centres // Declan and Margrit Kennedy (eds.): The Inner City. Architects Year Book 14, Elek, London, 1974. ISBN 0-236-15431-1.
- Alexander, C., Ishikawa, S., Silverstein, M., Jacobson, M., Fiksdahl-King, I. & Angel, S. A Pattern Language: Towns, Buildings, Construction. Oxford University Press, 1977. ISBN 978-0-19-501919-3.
- Alexander, C. The Timeless Way of Building. Oxford University Press, 1979. ISBN 978-0-19-502402-9.
- Шулер, Д. Liberating Voices: A Pattern Language for Communication Revolution. MIT Press, 2008. ISBN 978-0-262-69366-0.
- Лейтнер, Хельмут. Pattern Theory: Introduction and Perspectives on the Tracks of Christopher Alexander. 2015. ISBN 1505637430.
Ссылки
- Язык шаблонов для написания шаблонов — Джерард Месзарош и Джим Добл
- Использование шаблонов для разработки сценариев для крупных аэрокосмических проектов
- Шаблон бизнес-модели Lean Startup
- Что такое качественный use case? (отрывок из книги Patterns for Effective Use Cases)
Каталоги шаблонов в сети
- patternlanguage.com, Центр экологических структур
- Fused Grid — современный городской шаблон, коллекция и синтез примеров
- hcipatterns.org — шаблоны для человеко-компьютерного взаимодействия
- The Portland Pattern Repository
- Group Works: A Pattern Language for Bringing Life to Meetings and Other Gatherings — язык шаблонов для групповой работы
- The Core Protocols — коллекция шаблонов командной коммуникации
- Liberating Voices! Pattern Language Project — краткие версии шаблонов (доступны также на других языках)