Su intuición puede mejorar con el tiempo. Lo descartaría, tal vez un poco controvertido, pero durante muchos años de usar VTune y CodeAnalyst y ahora CodeXL, diría que soy mucho más preciso en mis intuiciones que antes sobre dónde estarán los puntos calientes, al menos para el punto donde ya no estoy completamente desprevenido cuando perfilo un código. Eso no significa que intente optimizar las cosas a ciegas.
La elaboración de perfiles ha aumentado mi dependencia de los perfiladores, no la ha disminuido. Solo digo que puedo anticipar más fácilmente cuáles serán los resultados de la creación de perfiles hasta cierto punto y, además, eliminar con éxito los puntos críticos y mejorar el tiempo que lleva completar la operación del usuario final sin tener que apuñalar a ciegas en la oscuridad y faltar (algo que puede hacerlo incluso cuando usa un generador de perfiles hasta que comience a comprender no solo cuáles son los puntos de acceso, sino también por qué exactamente son puntos de acceso con respecto a, por ejemplo, errores de caché).
Sin embargo, no fue hasta que comencé a usar perfiladores que comencé a mejorar esa intuición. Una de las razones es porque si está bien familiarizado con su código, sus corazonadas pueden ser correctas con respecto a los puntos calientes más grandes y obvios, pero no todas las sutilezas intermedias. Naturalmente, si tiene una operación de finalización de usuario que tarda una hora en completarse y hay un algoritmo de complejidad cuadrática que procesa una entrada que abarca cien mil elementos, es probable que pueda salir rico jugando sus ahorros de toda la vida con la idea de que es la complejidad cuadrática algoritmo en falta aquí. Pero eso no le da una idea detallada o, por ejemplo, le permite saber exactamente lo que no está contribuyendo al momento.
Hay tanto valor cuando comienzas a crear perfiles y ver dónde todas las cosas que creías que podrían haber sido un gran contribuyente de tiempo no estaban contribuyendo mucho tiempo; no las enormes fuentes obvias de ineficiencias, sino las que sospechaba que podrían haber sido ligeramente ineficientes, pero, después de la elaboración del perfil, al darse cuenta de que apenas contribuyeron en ningún momento. Y ahí es potencialmente donde obtienes la visión más intuitiva es que te muestran mal en todas esas áreas sutiles donde no es obvio exactamente cuánto tiempo se está gastando.
La intuición humana más allá de la complejidad algorítmica obvia a menudo comenzará de manera incorrecta porque lo que es eficiente para la máquina y lo que es eficiente para la mente humana son muy diferentes. Al principio, no resulta tan intuitivo pensar en las jerarquías de memoria que van desde los registros a la memoria caché de la CPU a la DRAM al disco. No resulta intuitivo pensar que la aritmética redundante puede ser más rápida que hacer más ramificaciones o accesos a la memoria de una tabla de búsqueda para omitir algún trabajo de procesamiento. Tendemos a pensar en términos de cuánto trabajo hay que hacer al descontar cosas como el costo de tomar decisiones y las cargas y tiendas de memoria. Lo que es eficiente para el hardware es a menudo muy intuitivo en formas que romperán todos sus supuestos humanos comenzando,
Donde mejorar esa intuición puede ayudar, a través del perfil, es el diseño de la interfaz . Los diseños de interfaz son muy costosos de cambiar en retrospectiva, y los costos aumentan en proporción al número de lugares que dependen de esa interfaz. Cuando comience a mejorar su intuición, puede comenzar a diseñar mejor las interfaces la primera vez de manera que deje espacio para la optimización futura sin costosos cambios de diseño. Sin embargo, una vez más, esa intuición es algo que generalmente se desarrolla y continúa desarrollándose indefinidamente, siempre teniendo ese perfilador a mano.