Skip to main content

¿Qué es la optimización del programa?

La optimización del programa es el proceso de modificar un programa de computadora de una manera que hace que el programa se ejecute más rápido, consuma menos recursos o, en general, funcione con un mayor nivel de eficiencia. La tarea de optimización puede ser realizada automáticamente por algunos compiladores de lenguaje de programación, intencionalmente mediante el uso de un programa de optimización, o manualmente por programadores que revisan el código fuente e intentan hacer mejoras específicas. En general, la optimización del programa se realiza con un fin específico en mente, porque hay muy pocas optimizaciones generales que se pueden hacer a un programa que de alguna manera no reducen el estado optimizado de otra parte del programa, lo que significa que un programa generalmente puede estar optimizado para la velocidad o el uso de recursos, pero generalmente no ambos. Una complicación que puede ocurrir con algunos tipos de optimización es que muchos lenguajes de programación de alto nivel proporcionan un nivel de abstracción tan grande entre el código nativo y el lenguaje de la computadora que la optimización puede ser difícil o imposible de implementar en todas las plataformas en todas las situaciones, especialmente con lenguajes interpretados que utilizan la compilación justo a tiempo (JIT).

Un concepto importante en la optimización de programas es la idea de que una optimización generalmente viene con algún tipo de precio. Un ejemplo de esto es que, cuando un fragmento de código está optimizado para ejecutarse más rápidamente, el aumento de la velocidad podría tener el precio de la legibilidad del código, el uso de la memoria, la flexibilidad del programa o una serie de otros costos. Esto significa que la optimización del programa debe ser un proceso específico, con la intención de hacer que un aspecto de un programa funcione mejor y al mismo tiempo estar dispuesto a sacrificar la eficiencia de otros aspectos.

Se pueden realizar diferentes tipos de optimización de programas en diferentes etapas del desarrollo del programa. Durante el diseño, se puede realizar una optimización amplia al garantizar que un programa parezca ejecutarse de manera efectiva. Al trabajar con el código fuente real, las optimizaciones pueden incluir garantizar que no haya comandos extraños, llamadas repetitivas o funciones mal escritas. En la compilación, el programador realiza automáticamente muchas optimizaciones y el programador puede guiarlo a través del uso de diferentes modificadores o directivas del compilador.

Las optimizaciones automáticas, como puede ocurrir con un compilador o un programa de optimización de dedicación, a menudo pueden implicar trucos que son demasiado complejos para ser prácticos para los programadores humanos. Esto puede implicar mover instrucciones en un programa para que se ejecuten fuera del orden escrito originalmente pero de una manera más eficiente para el procesador. También puede implicar el cambio intencional de recursos, como bloques de memoria, para que se pueda acceder a ellos más rápido. La mayor parte de la optimización del programa se produce automáticamente en el nivel del compilador.

Una complicación con la optimización repetida o agresiva del programa es que, una vez que un programa ha sido modificado para ejecutarse de manera más eficiente, generalmente se vuelve más difícil de modificar para otros fines, como agregar funcionalidad o corregir errores. Esto puede ocurrir cuando las optimizaciones comienzan a bloquear comportamientos establecidos del programa que no se cambian o adaptan fácilmente al nuevo código sin requerir que se deshagan todas las optimizaciones. Un problema mayor es que, en muchos casos, un programa optimizado se vuelve menos legible para los humanos, porque se usan trucos y atajos en lugar de solo comandos concisos y estructuras de control clásicas. Por estas razones, a menudo hay un nivel de optimización del programa en el que es aceptable detenerse, a pesar de que las modificaciones drásticas del código pueden hacer que un programa funcione un poco más eficientemente.