"La optimización prematura es la raíz de todo mal" es algo que casi todos hemos escuchado / leído
Cierto. Desafortunadamente, también es una de las citas de programación más mal utilizadas (maliciosamente) de todos los tiempos. Como Donald Knuth acuñó el meme, vale la pena agregar un contexto original de la cita:
Deberíamos olvidarnos de las pequeñas eficiencias, digamos alrededor del 97% del tiempo: la optimización prematura es la raíz de todo mal. Sin embargo, no debemos dejar pasar nuestras oportunidades en ese crítico 3%. ... Un buen programador ... será prudente mirar cuidadosamente el código crítico; pero solo después de que se haya identificado ese código. ... la experiencia universal de los programadores que han estado utilizando herramientas de medición ha sido que sus conjeturas intuitivas fallan
Tenga en cuenta que Knuth habló específicamente sobre la velocidad de ejecución en tiempo de ejecución .
Los programadores pierden enormes cantidades de tiempo pensando o preocupándose por la velocidad de las partes no críticas de sus programas.
Además, escribió el artículo en 1974 cuando cualquier recurso de máquina donde la correlación premium y negativa entre la velocidad de ejecución y la capacidad de mantenimiento del programa (mayor velocidad - menos mantenible) probablemente era más fuerte que ahora.
OK, para responder a su pregunta, según Donald Knuth, la optimización NO es prematura si soluciona un serio cuello de botella de rendimiento que se ha identificado (idealmente medido y señalado durante el perfilado).
Como dije antes, la "optimización prematura" es uno de los memes más mal utilizados, por lo que la respuesta no estará completa sin algunos ejemplos de cosas que no son optimizaciones prematuras pero que a veces se ignoran como tales:
- cuellos de botella que son visibles a simple vista y que pueden evitarse antes de ser introducidos, como el número O (N ^ 2) de viajes de ida y vuelta a la base de datos con N grande donde existe la alternativa O (1)
Además, ni siquiera están relacionados con la velocidad de ejecución del tiempo de ejecución: