воскресенье, 25 августа 2013 г.

Про шаблоны

Шаблоны меня интересуют достаточно давно. Помню, еще студентом читал книгу по когнитивной психологии, так там приводился пример, чем отличаются в шахматах эксперт и новичок. Правила игры знают и тот, и другой, но эксперт просчитывает на несколько ходов вперед: он оперирует более крупными объектами — комбинациями.
Разумеется, такие структуры нужно уметь выделять. Но если это удается, то потом это окупается.

Польза и вред от шаблонов

Недавно прочитал на Хабре статью «Для чего нужны шаблоны проектирования». Речь, конечно, шла про шаблоны проектирования из программирования, но думаю, что это можно обобщить на шаблоны вообще. Там были указаны следующие преимущества: 
  • экономия времени, которое тратится на обсуждение и принятие решения,
  • одинаковое понимание дизайна решения задачи в головах всех членов команды,
  • понимание работы сторонних инструментов и библиотек.
Это — коммуникативные преимущества. Есть и другое очевидное преимущество — повторное использование.
Чем плохи шаблоны? Зачастую они слишком абстрактны. И критикуют также их слепое применение без осмысления.

Описание шаблонов

Нельзя разработать универсальный язык описания шаблонов (либо он будет очень абстрактным и бедным), так как этот язык описания очень сильно зависит от предметной области. Приведу просто несколько (интересных для меня) примеров.
1. Шаблон проектирования в разработке программного обеспечения — повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. При описании этих шаблонов в книге Design Patterns использовались следующие разделы (перевод собственный, где-то я старался избегать прямого перевода, в скобках приведены английские названия):
  • Название шаблона (Pattern Name and Classification): уникальное название, которое помогает идентифицировать и ссылаться на шаблон.
  • Причины (Intent): описание причин для использования шаблона. 
  • Другие названия (Also Known As): другие названия шаблона.
  • Решаемые задачи (Motivation/Forces): сценарий, состоящий из задачи и контекста, в котором шаблон используется. 
  • Применимость (Applicability): ситуации, в которых шаблон применяется; контекст для шаблона. 
  • Структура (Structure): графическое представление шаблона (например, с помощью диаграммы классов или диаграммы взаимодействий).
  • Участники (Participants): список классов и объектов, которые используются в шаблоне.
  • Взаимодействие (Collaboration): описание того, как классы и объекты, использующиеся в шаблоне, взаимодействуют друг с другом. 
  • Результаты (Consequences): описание результатов и побочных эффектов после использования шаблона.
  • Реализация (Implementation): описание реализации шаблона. 
  • Пример кода (Sample Code): примеры того, как шаблон может быть использован в языке программирования.
  • Примеры использования (Known Uses): примеры реального использования шаблона.
  • Связанные шаблоны (Related Patterns): другие шаблоны,связанные с исходным; обсуждение различий между исходным шаблоном и похожими шаблонами.
2. Компетенции (как модели поведения). Да-да, шаблоны позволили мне по-другому взглянуть на компетенции. У них же тоже есть коммуникативные преимущества: достаточно одному рекрутеру другому сказать, что у кандидата хорошо развита компетенция «Сбор информации», и сразу понятно, какое поведение демонстрирует кандидат (конечно же, при условии, что оба рекрутера пользуются одни и тем же описанием этой компетенции). Описание компетенций состоит из следующих разделов (не все из них обязательны):
  • Название компетенции.
  • Определение компетенции.
  • Поведенческие индикаторы (положительные и отрицательные).
  • Примеры поведения в конкретных ситуациях.
  • Рекомендации по оценке компетенции.
  • Рекомендации по развитию компетенции.
  • Связь с другими компетенциями и отличие от них.
3. Педагогические шаблоны. Цели педагогических шаблонов — зафиксировать лучшие практики в педагогике и облегчить коммуникацию между преподавателями. Mitchell Weisburgh предложил следующие разделы для описания педагогических шаблонов:
  • Название (Name).
  • Решаемая задача (Problem).
  • Контекст (Context).
  • Причины и ограничения (Forces).
  • Решение (Solution).
  • Примеры (Examples).
  • Результат использования (Resulting Context).
  • Обоснование (Rationale).
  • Связанные шаблоны (Related Patterns).
К сожалению, какого-либо общего языка для описания шаблонов нет (даже в рамках выбранной предметной области): каждый выбирает для себя тот язык, который наиболее удобен для использования.
Однако знакомство с шаблонами и создание своих собственных шаблонов может быть полезным для профессионального развития: в этом случае вы сможете оперировать более крупными объектами при решении задач.

1 комментарий: