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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Bulajic A., 2011.
  2. Laplante, 2005, с. 71—73.
  3. 1 2 3 Brown, 1998, с. 62—63.
  4. 1 2 Brown W. H., 1998, с. 62—63.
  5. 1 2 Фримен Э., 2011, с. 622—623.
  6. Laplante, 2005, с. 73.
  7. Kaplan A., 1964, pp. 28.
  8. Maslow A.H., 1966, pp. 15.
  9. Green J., 1985.
  10. McQuade T.J., 2006.
  11. Brooks F., 1986.
  12. 1 2 Brown, 1998, с. 64—65.
  13. Brown, 1998, с. 126—130.

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