WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

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

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

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

Суть антипаттерна

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

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

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

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

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

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

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

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

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

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

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

Способы борьбы с золотым молотком

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

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

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

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

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

История термина

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

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

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

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

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

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

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

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

Известные исключения

Иногда антипаттерн «золотой молоток» работает:

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

Связь с другими паттернами и антипаттернами

  • Серебряная пуля (англ. SilverBullet) — гипотетический универсальный метод в технологии или управленческой технике, увеличивающий на порядок производительность, надёжность и простоту программного проекта[10]. По мнению автора термина, Фредерика Брукса, «серебряной пули не существует»: никакое технологическое или организационное новшество в принципе не способно снизить имманентную сложность проекта (то есть сложность, обусловленную сложностью самой задачи). «Серебряная пуля» и «золотой молоток» причиняют вред по-разному: если «молоток» приводит к отрицательным последствиям непосредственно, в силу вытеснения им более удачных решений, то «пуля» обычно наносит не прямой, а косвенный вред тем, что на её поиски и попытки применения в итоге затрачивается больше ресурсов, чем она даёт возможность сэкономить.
  • Зависимость от поставщика (англ. Vendor Lock−In). Разработчики активно получают поддержку поставщика в применении «золотого молотка». Весь проект полагается на подход единственного поставщика инструментов/технологий в разработке и реализации продукта[11].

См. также

Примечания

Литература

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии