Vamos a dividir su pregunta en dos preguntas secundarias sobre
- optimizaciones asintóticas (que no dependen del lenguaje de programación, así que imaginemos que no ha escrito “en C ++” en cuestión). Esencialmente se reduce a inventar un nuevo algoritmo que es más rápido que el anterior. Si bien estas “optimizaciones” le permiten acelerar enormemente el programa, dependen en gran medida de su comprensión del dominio problemático de la tarea que está tratando de lograr. Y hay demasiados dominios para comprenderlos todos a menos que desee dedicar toda su vida a ese objetivo. Si puede conformarse con algo menos que “comprensión profunda”, entonces su mejor opción es obtener un título de CS en una universidad decente. Si bien el título de CS no le enseña mucha programación, le brinda una buena visión general de muchos dominios y algoritmos de problemas importantes que se utilizan en ellos, por lo que si / cuando tenga que optimizar el algoritmo es probable que sepa la solución o al menos en qué dirección debe excavar para encontrar uno.
- Optimización no asintótica. En la mayoría de los casos se reduce a saber con precisión lo que está sucediendo en un nivel de abstracción más bajo y aprovechar ese conocimiento. La única forma de obtener ese conocimiento es aprender a programar el sistema y escribir muchos programas desde cero para tener una idea de lo que aprendió. Después de haber adquirido cierta comprensión de la programación del sistema, la mejor manera de capacitarse para detectar e implementar la optimización no asintótica IMO está participando en concursos de programación y haciendo soluciones que no deberían ser lo suficientemente rápidas para llegar al límite de tiempo, cumplir con el límite de tiempo de todas formas.