Золотой молоток

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Золото́й молото́к (англ. Golden hammer) — анти-паттерн проектирования, заключающийся в использовании одного и того же решения везде.[1]

Золотой молоток также известен под названиями: закон инструмента (англ. The law of the instrument), молоток Маслоу (англ. Maslow's hammer), «молоточек» (англ. Gavel)..

Паттерн (шаблон) проектирования представляет собой формализованное описание часто встречающейся задачи проектирования, её удачное решение, а также рекомендации по применению этого решения в различных ситуациях.[2]

После появления шаблонов проектирования были предложены и анти-паттерны, которые описывают, как не следует поступать при разработке программ, показывая характерные ошибки в дизайне и в реализации.[2]

Анти-паттерн — неудачный, но тем не менее широко распространенный паттерн проектирования программного обеспечения.[3]

Анти-паттерны концептуально похожи на паттерны в том, что они документируют повторяющиеся решения общих проблем. Они известны как анти-паттерны, потому что их использование (или злоупотребления) дает негативные последствия.[4].

Анти-паттерн «золотой молоток» может появляться как на управленческом уровне[5], так и на уровне разработчиков[6], суть анти-паттерна от этого не меняется.

Суть анти-паттерна[править | править вики-текст]

Золотой молоток — уверенность в полной универсальности какого-либо решения. На практике, это применение одного решения (например одного из паттернов проектирования) для всех возможных и невозможных задач.

Программист «влюбляется» в какой-то из паттернов и начинает использовать его везде, где это возможно, как универсальное решение любых проблем.

Золотой молоток также встречается и среди новичков. В данном случае по другим причинам — новичку лень изучать что-то новое, и он применяет единственный освоенный метод для всех встречающихся ему задач.

Можно выделить ряд причины возникновения:

  1. Незнание альтернативных способов решения.
  2. Нежелание тратить время на анализ альтернатив.
  3. Привычка и «автоматизм» среди профессионалов.

Следствиями являются: неэффективное и не оптимальное решение, которое снаружи выглядит «красиво»; ненужное усложнение (или упрощение) системы.

Признаки и последствия появления золотого молотка[6]:

  • Идентичные инструменты и технологии используются для огромного количества концептуально разнообразных продуктов;
  • Решения имеют низкую производительность, масштабируемость, и т.д. в сравнении с другими решениями в отрасли;
  • Архитектура системы лучше всего описана определенным продуктом, пакетом приложений или комплект инструментальных средств поставщика;
  • Разработчики обсуждая требования с аналитиками и конечными пользователями, защищают требования которые можно приспособить с помощью определенных инструментов или увести их от областей где они не применимы;
  • Разработчики становятся изолированными от отрасли. Они демонстрируют отсутствие знаний и опыта работы с альтернативными подходами;
  • Существующие продукты диктуют дизайн и архитектуру системы;
  • Все новые разработки основываются в большой степени на определенный продукт или технологию поставщика.

Факторы способствующие появлению золотого молотка[7]:

  • Группа разработчиков стремится использовать знакомую технологию;
  • Группа разработчиков не знакома с другими технологиями разработки;
  • Переход на другую технологию сопряжен с определенным риском;
  • Знакомая технология упрощает планирование и оценку разработки;
  • Большие инвестиции направленные на раскрутку определенного продукта или технологии[6];
  • Уверенность в характеристиках собственного продукта, которые не доступны у других продуктов отрасли[6].

Пример:

Некоторые веб-компании продолжают использовать и поддерживать самостоятельно разработанные системы кэширования, несмотря на наличие альтернативных решений с открытым кодом.[7]

Способы борьбы с золотым молотком[править | править вики-текст]

Анимация идеи «Золотого молотка». Молоток успешно применяется для решения задачи — забивания гвоздей. Чтобы предотвратить его повсеместное использование применяются техники: прототипирование, просмотр (анализ) исходного кода, рефакторинг, анализ альтернативных решений.

Способы предотвращения:

  • Анализ наличия альтернативных решений, поиск и сравнение других способов решения поставленной задачи. Например разработчики программного обеспечения должны следить за современными технологическими тенденциями. Это касается как и непосредственно разработчиков ПО, так и управляющего менеджмента. Хорошим способом поддержания обмена знаниями о технических новинках, является практика организации дискуссионных совещаний, на которых будут обсуждаться новые технологии (шаблоны, появляющиеся стандарты, новые продукты).[6]
  • Прототипирование, сравнение различных способов решения поставленной задачи, путем создания прототипов.

Способы идентификации — отсутствие у менеджера сборника решений для различных задач и появление трудностей при возникновении новых проблемных ситуаций, говорит о появлении золотого молотка на управленческом уровне.[5] Для выявления молотка на уровне разработчиков следует использовать просмотр кода (англ. Code review) — мониторинг кода в ходе выполнения поставленной задачи и выявление не оптимальных, либо часто повторяющихся решений, анализ и сравнение их альтернатив.

Способы устранения — рефакторинг, позволит оптимизировать код, выбором более подходящих решений и исправлением уже имеющихся.

История термина[править | править вики-текст]

Первое упоминание датировано 1964 годом и принадлежит Абрахаму Каплану (англ.)русск.[8]:

Я называю это «закон инструмента» (The law of the instrument (англ.)русск.): Дайте маленькому мальчику молоток, и он обнаружит, что по всем окружающим предметам просто необходимо стукнуть.

А́брахам Капла́н

Молоток Маслоу:

Я предполагаю, что если единственный инструмент, который вы имеете — молоток, то это заманчиво рассматривать всё как гвозди. (Когда у тебя в руках молоток, все задачи кажутся гвоздями.)

А́брахам Масло́у

от Абрахама Харольда Маслоу был опубликован в 1966 году.[9]

Английское выражение «a Birmingham screwdriver» («Бирмингемская отвёртка»), ссылается на привычку использовать один инструмент для всех целей, и предшествует Каплану и Маслоу.[10] Концепцию также приписывают Марку Твену, хотя нет никаких подтверждений в опубликованных работах Твена.[11]

Известные исключения[править | править вики-текст]

Иногда анти-паттерн Золотой молоток работает
  • Если продукт, который определяет архитектурные ограничения, является предполагаемым стратегическим решением в долгосрочной перспективе.
  • Если продукт является частью пакета поставщика, для большинства потребностей программного обеспечения.

Анти-паттерн и паттерн ошибки[править | править вики-текст]

Паттерн ошибки — повторяющаяся взаимосвязь между ошибками, о которых сигнализирует программа, и ошибкой в программе, являющейся причиной сообщений об ошибках.[3]

В отличие от паттернов ошибок, анти-паттерны относятся к уровню проектирования, а не кодирования.

Анти-паттерны являются паттернами проектирования, паттерны ошибок представляют собой паттерны некорректного поведения программ, коррелирующего с ошибками программирования.[3]

Связь с другими паттернами и антипаттернами[править | править вики-текст]

Серебряная пуля (англ. SilverBullet) — универсальный метод, в технологии или в управленческой технике, увеличивающий на порядок производительность, надёжность и простоту программного проекта[12] Серебряная пуля и золотой молоток являются противоположностями друг друга. В то время, как анти-паттерн «Golden Hammer» говорит о том, что применение одного и того же «любимого» решения не уместно и приводит к отрицательным последствиям, Silver Bullet является универсальным решением, которое увеличивает производительность и простоту проекта.

Поток лавы (англ. Lava Flow). Этот анти-паттерн образуется, когда анти-паттерн золотой молоток применяется в течение нескольких лет и большого количества проектов. Как правило, это более старые разделы, разработанные на основе более ранних версий золотого молотка, обращаются к удаленной или редко используемой части полного приложения. Разработчики уже не могут изменить эти разделы, которые растут в течение долгого времени и добавляются к новым версиям приложения в виде реализации функций, которые редко или вообще не используются клиентом.[6]

Зависимость от поставщика (англ. Vendor Lock−In). Разработчики активно получают поддержку поставщика в применении золотого молотка. Весь проект полагается на подход единственного поставщика инструментов/технологий в разработке и реализации продукта.[6]

Трудные люди (англ. Corncob). Трудные люди, которые могут быть распространены в бизнесе разработки программного обеспечения. Из-за строгих сроков и давления бюджета, разработка программного обеспечения может стать напряженной. “Трудные люди” усиливают эти проблемы и создают ненужное, дополнительное напряжение в уже накалившейся среде. Corncob - жаргонное слово, часто используемое в группе по управлению объектами, программном обеспечении консорциум, чтобы описать трудных людей. Технологическая разновидность анти-паттерна трудные люди, является формой золотого молотка.[6]

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

Литература[править | править вики-текст]