viernes, 17 de junio de 2022

Optimización prematura

Una de las frases más repetidas en el mundo del desarrollo es esa que dice:

"La optimización prematura es la fuente de todos los problemas". Frase atribuida a Donald Knuth.

Pero lo que muchos olvidan es que Knuth también sabe, y mucho, sobre algoritmos y tipos de datos, y por lo tanto sabe elegir adecuadamente el tipo de dato adecuado para resolver un problema.

Veamos un ejemplo de algo que, por mucho que optimicen el código, sin cambiar el algoritmo, siempre será demasiado lento:

  • Borrado de carpetas y ficheros en el Windows: incluso con un disco SSD, puede tardar 10 minutos en borrar 1000 carpetas.
  • Borrado de carpetas y ficheros en linux: incluso con un disco rotativo, puede tardar 10 segundos en borrar 1000 carpetas.

 Y no se puede decir que la corporación que vende ese programa no lo haya optimizado. Simplemente utilizan un algoritmo que tarda n^2 ciclos o incluso 2^n, siendo n el número de ficheros, mientras que en linux, se utiliza un algoritmo que tarda n ciclos.

Otra frase muy utilizada es esta: "Hazlo funcionar, después hazlo funcionar bien y después hazlo funcionar rápido"

Lo ideal es hacerlo funcionar con el mejor algoritmo conocido y el mejor tipo de datos a la primera. Es posible que haya errores de programación que hay que solucionar (hazlo funcionar bien), y ya por último, se optimiza (todo lo que no pueda hacer el compilador), como eliminar variables no utilizadas, cálculos innecesarios, cálculos innecesarios dentro de bucles, orden del acceso a memoria para utilizar el caché. Si la optimización se realiza al principio, es muy probable que el código resulte poco legible y muy rígido, y ya no se podrá adaptar a alguna necesidad que se había escapado en un primer momento.

 

 

Copyleft Ender. El presente artículo no tiene finalidad informativa, de creación de opinión pública o de entretenimiento. Tiene como finalidad principal, la enseñanza y la divulgación de experiencias, proyectos, pensamientos y conocimientos del autor. Se permite la copia textual, la traducción y la distribución de este artículo entero en cualquier medio, a condición de que este aviso sea conservado. Se permite la cita. El autor no reclamará ninguna cantidad por el ejercicio de las dos autorizaciones anteriores. No autorizo a ninguna Entidad de Derechos de Autor a reclamar cantidad alguna en mi nombre por el ejercicio de los dos derechos anteriores.