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

Также известен под названиями: закон инструмента (), молоток Маслоу (), «молоточек» (). Может появляться как на управленческом уровне, так и на уровне разработчиков, суть от этого не меняется.

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

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

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

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

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

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

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

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

История термина Первое упоминание датировано 1964 годом и принадлежит :

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

Сходная концепция получила название «Молоток Маслоу» по имени Абрахама Харольда Маслоу, который в 1966 году написал:

Я думаю, что если твоим единственным инструментом является молоток, то на что угодно хочется смотреть как на гвоздь.

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

Связь с другими паттернами и антипаттернами Серебряная пуля () — гипотетический универсальный метод в технологии или управленческой технике, увеличивающий на порядок производительность, надёжность и простоту программного проекта. Фредерик Брукс показал, что серебряной пули не существует: никакое технологическое или организационное новшество в принципе не способно радикально снизить имманентную сложность проекта (то есть сложность, обусловленную сложностью самой задачи и другими неустранимыми факторами). «Серебряная пуля» и «золотой молоток» причиняют вред по-разному: если «молоток» приводит к отрицательным последствиям непосредственно, в силу вытеснения им более удачных решений, то «пуля» обычно наносит не прямой, а косвенный вред тем, что на её поиски и попытки применения в итоге затрачивается больше ресурсов, чем она даёт возможность сэкономить. Зависимость от поставщика (). Разработчики активно получают поддержку поставщика в применении «золотого молотка». Весь проект полагается на подход единственного поставщика инструментов/технологий в разработке и реализации продукта.

См. также Панацея Проблема XY

Примечания

Литература

Категория:Антипаттерны Категория:Архитектура программного обеспечения