Martelo de ouro.
O martelo de ouro é o hábito de aplicar a mesma ferramenta, linguagem ou solução conhecida a todos os problemas, mesmo aos que ela não resolve bem.
O martelo de ouro, também conhecido como lei do instrumento, lei do martelo ou martelo de Maslow, é um viés cognitivo que envolve uma dependência excessiva de uma ferramenta familiar. Na engenharia de software, o termo designa um antipadrão: uma tecnologia, linguagem ou solução de design conhecida é aplicada a todo problema novo, inclusive aos que ela atende mal, só porque a equipe já a domina. Abraham Maslow escreveu em 1966: "é tentador, se a única ferramenta que você tem é um martelo, tratar tudo como se fosse um prego".
O conceito é atribuído tanto a Maslow quanto a Abraham Kaplan, embora a frase do martelo e do prego possa não ser original de nenhum dos dois.
História
A expressão inglesa "a Birmingham screwdriver" (uma chave de fenda de Birmingham), que significa um martelo, refere-se à prática de usar uma única ferramenta para todos os fins, e antecede tanto Kaplan quanto Maslow em pelo menos um século.
Em 1868, um periódico londrino, Once a Week, trazia esta observação: "Dê a um menino um martelo e um formão; mostre-lhe como usá-los; imediatamente ele começa a cortar os batentes das portas, a tirar os cantos das venezianas e dos caixilhos das janelas, até que você lhe ensine um uso melhor para eles e como manter sua atividade dentro de limites".
Kaplan
A primeira formulação registrada do conceito foi a de Abraham Kaplan, em 1964: "Eu a chamo de lei do instrumento, e ela pode ser formulada da seguinte maneira: dê a um menino pequeno um martelo, e ele descobrirá que tudo o que encontra precisa ser martelado".
Em fevereiro de 1962, Kaplan, então professor de filosofia, fez um discurso de banquete em uma conferência da American Educational Research Association que estava sendo realizada na UCLA. Um artigo na edição de junho de 1962 do Journal of Medical Education afirmava que "o ponto alto do encontro de 3 dias ... estava no comentário de Kaplan sobre a escolha dos métodos de pesquisa. Ele insistiu que os cientistas exercessem bom senso na seleção de métodos apropriados para suas pesquisas. O fato de certos métodos estarem à mão, ou de um determinado indivíduo ter sido treinado para usar um método específico, não é garantia de que o método seja apropriado para todos os problemas. Ele citou a Lei do Instrumento de Kaplan: 'Dê a um menino um martelo e tudo o que ele encontra tem que ser martelado.'"
Em The Conduct of Inquiry: Methodology for Behavioral Science (1964), Kaplan voltou a mencionar a lei do instrumento, dizendo: "Não é nenhuma surpresa descobrir que um cientista formula os problemas de uma forma que exige, para sua solução, justamente aquelas técnicas nas quais ele próprio é especialmente habilidoso". E, em um artigo de 1964 para The Library Quarterly, ele citou novamente a lei e comentou: "Tendemos a formular nossos problemas de tal maneira que pareça que as soluções para esses problemas exigem justamente aquilo que já temos à mão".
Tomkins e Colby
Em uma coletânea de ensaios de 1963, Computer Simulation of Personality: Frontier of Psychological Theory, Silvan Tomkins escreveu sobre "a tendência de os trabalhos serem adaptados às ferramentas, em vez de se adaptarem as ferramentas aos trabalhos". Ele escreveu: "Se alguém tem um martelo, tende a procurar pregos, e se alguém tem um computador com capacidade de armazenamento, mas sem sentimentos, é mais provável que se preocupe em lembrar e em resolver problemas do que em amar e odiar". No mesmo livro, Kenneth Mark Colby citou explicitamente a lei, escrevendo: "A Primeira Lei do Instrumento afirma que, se você der um martelo a um menino, ele de repente descobre que tudo precisa ser martelado. O programa de computador pode ser o nosso martelo atual, mas é preciso experimentá-lo. Não se pode decidir, a partir de considerações puramente teóricas, se ele terá ou não algum valor".
Abraham Maslow
O martelo de Maslow, popularmente enunciado como "se tudo o que você tem é um martelo, tudo parece um prego" e variantes disso, vem de The Psychology of Science, de Abraham Maslow, publicado em 1966. Maslow escreveu: "Lembro-me de ter visto uma elaborada e complicada máquina automática de lavar automóveis que fazia um belo trabalho ao lavá-los. Mas ela só podia fazer isso, e todo o resto que caía em suas garras era tratado como se fosse um automóvel a ser lavado. Suponho que seja tentador, se a única ferramenta que você tem é um martelo, tratar tudo como se fosse um prego".
Manifestações
Programação de computadores
A noção de martelo de ouro, "uma tecnologia ou conceito familiar aplicado obsessivamente a muitos problemas de software", foi introduzida na literatura de tecnologia da informação em 1998 como um antipadrão: uma prática de programação a ser evitada.
O desenvolvedor de software José M. Gilgado escreveu que a lei continua relevante no século XXI e é altamente aplicável ao desenvolvimento de software. Muitas vezes, observou ele, os desenvolvedores de software "tendem a usar as mesmas ferramentas conhecidas para fazer um projeto completamente novo e diferente, com novas restrições". Ele atribuiu isso ao "estado de zona de conforto, em que você não muda nada para evitar riscos. O problema de usar as mesmas ferramentas sempre que possível é que você não tem argumentos suficientes para fazer uma escolha, porque não tem nada com que comparar, e isso limita o seu conhecimento". A solução é "continuar procurando a melhor escolha possível, mesmo que não estejamos muito familiarizados com ela". Isso inclui usar uma linguagem de programação com a qual não se está familiarizado. Ele observou que o produto RubyMotion permite que os desenvolvedores "envolvam" linguagens de programação desconhecidas em uma linguagem familiar, evitando assim ter de aprendê-las. Mas Gilgado considerou essa abordagem desaconselhável, porque ela reforça o hábito de evitar novas ferramentas.
Exemplo
Uma equipe fluente em expressões regulares as usa até para ler JSON. O padrão pega o primeiro "total" que encontra — no exemplo de entrada, o de um item do pedido —, lê errado números como 1.5e3 e retorna 0.0 silenciosamente quando o campo não existe.
import re
# order_total('{"items": [{"total": 5}], "total": 1.5e3}') retorna 5.0, não 1500.0
def order_total(payload: str) -> float:
match = re.search(r'"total"\s*:\s*([0-9.]+)', payload)
return float(match.group(1)) if match else 0.0
Um parser de JSON entende o formato inteiro e falha de forma explícita diante de entrada malformada: escolha a ferramenta adequada aos dados, não a que a equipe conhece melhor.
import json
def order_total(payload: str) -> float:
return float(json.loads(payload)["total"])
Adaptado do artigo da Wikipédia “Law of the instrument” (revisão 1352498338), disponível sob a licença CC BY-SA 4.0; o texto foi traduzido e editado, e exemplos foram adicionados.