premature optimization
expressãoprogramação
Ajustar o código em busca de velocidade antes de saber se isso importa, ao custo de clareza e tempo.
A frase de Knuth - 'a otimização prematura é a raiz de todo o mal' - alerta contra distorcer o código por ganhos de desempenho que a medição não mostrou serem necessários. A citação completa admite os poucos pontos percentuais críticos que de fato importam; a ideia é medir primeiro e então otimizar a parte que realmente faz diferença.
Otimização prematura é a raiz de todo mal é a frase mais mal citada do software, e o dano vem do truncamento. Knuth escreveu que devemos esquecer as pequenas eficiências em cerca de noventa e sete por cento das vezes, e em seguida acrescentou que não devemos abrir mão das oportunidades naqueles três por cento críticos. A frase é um argumento a favor da medição, não contra o trabalho de desempenho.
A versão mutilada já justificou uma quantidade enorme de software genuinamente lento. Ela é acionada contra pensar em complexidade no momento do projeto, contra escolher a estrutura de dados adequada, contra se importar com quantas idas e voltas uma página faz. Nada disso é o que Knuth queria dizer: o alvo era ajustar linhas arbitrárias de código na intuição antes de saber onde o tempo é de fato gasto.
A distinção é entre otimização e projeto. Escolher um algoritmo cuja complexidade sirva ao tamanho esperado da entrada é projeto, e fazê-lo tarde é caro porque muda o formato de tudo ao redor. Reescrever um laço para poupar instruções antes de medir é otimização, e fazê-lo cedo em geral é desperdício. Meça primeiro, otimize o que a medição apontar, e não confunda nenhum dos dois com as decisões arquiteturais que precisam ser tomadas antes de haver o que medir.
Também conhecido como: root of all evil, premature optimization is the root of all evil
Fontes
- Knuth, 'Structured Programming with go to Statements' (1974), quoting Hoare