Este es un proyecto cancelado que no recibe actualizaciones. No obstante, puedes acceder a su archivo como referencia.

Versión Cero

Optimización Prematura

Todos conocemos la famosa frase de Donald Knuth:

La optimización prematura es la raíz de todos los males.

Como sabemos esto hace referencia a que sólo debemos optimizar nuestros programas cuando nos encontramos con un problema de rendimiento, ya que la optimización prematura de los mismos, antes de conocer su verdadero profile de ejecución, nos suele llevar a malos diseños y complejidades innecesarias.

Pues bien, en este artículo se atribuye a Brian Goetz la idea de que la optimización prematura no se refiere a la optimización demasiado pronto en el ciclo de desarrollo, sino a la optimización demasiado pronto en la carrera del desarrollador.

Es una idea interesante. Todos hemos visto a desarrolladores experimentados cuyo código sale directamente “optimizado” de sus manos y tiene una “intuición natural” sobre qué debe ser optimizado. Por contra, un programador sin experiencia puede armar un buen desastre tratando de optimizar un código que finalmente sólo se ejecutará el 0,1% del tiempo del procesador.

Comentarios
1 quicksorter
29 enero 2007, 23:33

Sí, de hecho es algo en lo que se incide desde introducción a ing. software.


2 Nacho
30 enero 2007, 08:53

Es cierto que eso es un problema, pero si hubiese una lista de los males de la programación, el copypaste estaría bastante más arriba en ella.


3 Perez R.
30 enero 2007, 16:58

Si, pero el tema es que en COBOL la cosa es como dice Mike Miller, y no solo se trata de evitar el GOTO, sino de saber usarlo.
En otras funciones de cosas la capacidad puede ser anexa sin perjuicio de tecnicas modernas o concepciones arcaicas, esa dicotomía que nos llevaria a una espiral de charlas y contubernios sin salida. Ahi si se evidencia la peresocidad del personal de desarrollo, si puede charlar lo hara y si spuede salir a fumar tambien.


4 pablo santos
31 enero 2007, 22:45

¡Otro tema interesante!

Creo que aquí la regla de oro es “mide primero, optimiza después”. Porque muchas veces se pierde tiempo en algo que “gana mucho tiempo”, sin determinarse primero “cuánto” (en milisegundos, o segundos, o lo que sea).


5 Sergio Montoro Ten
18 febrero 2007, 15:04

Alguien me dijo en una ocasión: “Oye ¿tu sabes cuánto le cuesta ejecutar un IF al ordenador? ¿Y sabes cuánto tiempo y riesgos se corren a veces intentando quitar algunos de estos IFs?”
Yo creo en la optimización desde el diseño. Y pondré un ejemplo concreto. Muchas veces lo primero que se hace en una aplicación es modelizar la base de datos. Al normalizar el modelo suelen salir bastantes tablas. Sucede que el tiempo que una transacción tarda en ejecutarse en básicamente proporcional al número de tablas en las que tenga que escribir. El resultado final son amenudo transacciones lentas, porque nadie tuvo suficiente picardía en el diseño del modelo de datos.


6 Juanjo Navarro
18 febrero 2007, 23:49

Exacto, Sergio. La optimización de diseño es la única que merece la pena hacerse “a priori”.

Pero sí creo, como comentaba en esta cita, que hay que tener mucha experiencia para hacer este tipo de optimización. Porque sino al final obtienes un sistema “overenginered”. Lo típico es el novato que pilla un sistema y lo llena de “patrones”. Empieza a meter factorías a diestro y siniestro para cosas que jamás van a tener más de una implementación. O el que abusa de los EJB (“por si acaso esto se tiene que balancear”) y acaba teniendo un sistema lentísimo para hacer una actualización a una BBDD.


7 Sergio Montoro Ten
22 febrero 2007, 00:57

Yo detesto los programas “no locales” en los cuales la implementación real del método que estás buscando está ocho clases más p’allá perdida en algún ignoto paquete o el nombre del directorio que necesitas para saber dónde se están grabando los archivos, está puesto en un oscuro fichero de configuración oculto tras el séptimo sello.
Sobre las aplicaciones en tres capas opino lo mismo: casi siempre traen más complicaciones y quebraderos de cabeza que beneficios.
A veces el software es como la contabilidad: cuanto más aburrido y predecible es lo que te encuentras, mejor que mejor.


Acerca - Contacto - Información legal y técnica - Condiciones de uso - Noticias sobre el mundo del Desarrollo de Software.