Duda de los métodos y funciones que usas al programar.
Duda de las funciones que llamas, de los métodos que usas, y de cómo los usas, aún éstos hayan sido desarrollados por grandes empresas o tengan mucha popularidad.
No me refiero a dudar de que no vayan a hacer su trabajo, que como mínimo deberían funcionar y cumplir con lo que se espera; me refiero a dudar de cómo funcionan internamente, de cómo manipulan la información y procesan la data.
Ya hace un tiempo, en un proyecto donde estuve trabajando junto a un compañero programador cuando él estaba empezando, estábamos haciendo pair programming cuando me di cuenta de una diferencia importante al momento de trabajar con funciones y métodos que no habíamos usado.
No era consiente de esta diferencia hasta ver a mi compañero trabajar. Cuando él usaba una nueva función, ya sea de una librería externa o de parte de la misma aplicación que estábamos trabajando, él asumía que la función iba a hacer su trabajo de una manera óptima y eficiente, solo se preocupaba por saber la función que debía llamar, los parámetros que recibía y qué retornaba.
Si bien no está mal trabajar de esta manera ya que te encuentras abstraído de toda la complejidad y de cómo la función hace las cosas dentro de sí, en este escenario sucedió algo interesante.
Para mi ya era normal, de hecho hasta lo hago inconscientemente, suelo entrar a la definición de una función que para mi es nueva y ver un poco cómo está escrita para entender qué recibe y cómo funciona internamente, suelo hacer esto superficialmente a menos que internamente la función no trabaje de una forma clara, en este caso suelo tomar un poco más de tiempo para evaluar si vale la pena profundizar en ella o si solo continuo con mi trabajo, en el caso de que concluya que vale la pena profundizar (que son pocos los casos) muchas veces suelo encontrarme con cosas interesantes que luego me permiten u optimizar lo que estoy haciendo o tomar eso que encontré para aprovecharlo o evitarlo en el futuro cercano.
En este escenario mi compañero llamó una función y todo bien, no había inconvenientes, aunque en mi interior mi instinto quería ver qué tenía esa función, ya que no era yo quien estaba frente al teclado en ese momento ignoré ese deseo de verla.
Posteriormente una vez dicho cambio llegó a producción se empezaron a detectar problemas de performance en ese módulo que habíamos desarrollado juntos, y si bien los dos habíamos trabajado en el módulo, ninguno tenía idea de porqué ese módulo en especifico tendría problemas con sus tiempos de respuesta. Mas adelante y luego de una extensa revisión, nos dimos cuenta de que esa función en especifico usaba internamente una variable privada para cachear la respuesta y omitir procesar la data varias veces, y esta variable privada se definía en otra función por medio de su setter así que lo único necesario después de todo y que no hubiese pasado de haber revisado la función en primer lugar, era definir cacheResult(true)…
Como esta hay varias situaciones, principalmente de performace que a través de revisar cómo las funciones trabajan aun sean funciones de librerías famosas, se puede lograr mejores resultados o evitar posibles errores.
El consejo es:
«Revisa las funciones que llamas.»
No es necesario invertir mucho tiempo, evalúa si vale la pena y aprovecha ese conocimiento a tu favor.