"Otimização prematura é a raiz de todo mal" é algo que quase todos nós ouvimos / lemos
Verdadeiro. Infelizmente, é também uma das citações de programação mais mal utilizadas (maliciosamente) de todos os tempos. Desde que Donald Knuth cunhou o meme, vale a pena adicionar algum contexto original da citação:
Devemos esquecer pequenas eficiências, digamos, 97% das vezes: a otimização prematura é a raiz de todo mal. No entanto, não devemos desperdiçar nossas oportunidades nesses 3% críticos. ... Um bom programador ... será prudente olhar atentamente para o código crítico; mas somente após a identificação desse código. ... a experiência universal de programadores que usam ferramentas de medição é que suas suposições intuitivas falham
Observe que Knuth falou especificamente sobre velocidade de execução em tempo de execução .
..Os programadores perdem muito tempo pensando ou se preocupando com a velocidade das partes não críticas de seus programas.
Além disso, ele escreveu o artigo em 1974, quando qualquer recurso de máquina que apresentasse correlação premium e negativa entre velocidade de execução e capacidade de manutenção do programa (maior velocidade - menos manutenção) provavelmente fosse mais forte do que agora.
OK, para responder sua pergunta, de acordo com Donald Knuth, a otimização NÃO é prematura se corrigir um sério gargalo de desempenho que foi identificado (idealmente medido e identificado durante a criação de perfil).
Como eu disse antes, "otimização prematura" é um dos memes mais mal-intencionados, então a resposta não será completa sem alguns exemplos de coisas que não são otimizações prematuras, mas que às vezes são descartadas da seguinte forma:
- gargalos visíveis a olho nu e que podem ser evitados antes de serem introduzidos, como o número O (N ^ 2) de ida e volta ao banco de dados com N grande onde existe alternativa O (1)
Além disso, nem sequer estão relacionados à velocidade de execução do tempo de execução: