Me ha ocurrido cientos de veces donde he estado a punto de tirar la toalla cuando he estado aprendiendo un nuevo lenguaje o tecnología que está “de moda” para el desarrollo. En cierto modo, debo agradecer que mi formación profesional fue -por decirlo sutilmente- sin amarrarme a un determinado lenguaje de programación, lo que me permitió ir un poco más allá de solamente entender una determinada tecnología o esquema de programación. (Claro está, no llegaré a COBOL, pero al menos podría intentar entenderlo).
En estos días he estado de autodidacta para aprender GO para aplicarlo en un servidor con el fin de crear un endpoint. Sí, entiendo que hay cientos de paquetes que son “llegar, instalar y profit”, pero creo que es necesario comenzar con algo simple para entender el lenguaje. Ese prueba y error que he hecho para dominar a la bestia me ayudó a comprender que es una mejora en muchos sentidos de PHP como declaración de tipo para variables -aunque PHP 7 lo incluyó para los tipos de datos estándar- y múltiple retorno de valores.
Muchas veces en este proceso de aprendizaje intenté abandonarlo ya que se me hacía difícil entender la lógica para programar un endpoint que responda correctamente a los requerimientos. Sin embargo, continué hasta lograr consumir un recurso vía REST a través de ARC, cuestión que coronó un par de horas de darme cabezazos con tutoriales para usar gin-tonic y el driver de mysql.
Por tanto, descubrí que el empeño en no detenerte hasta lograrlo es importante. Sin embargo, también hay que entender que hay instancias donde no va a resultar o no es aplicable y debes detenerte para no perder más tiempo.
Esto último me ocurrió a inicios de semana cuando intenté hacer un clúster de DNS caché para el mundo, así el servicio sería redundante con haproxy y bind9. Sin embargo, y tras darme cuenta que haproxy no balancea conexiones udp (sí, dns usa udp para ser más rápido aún) y que por la arquitectura de servicios locales, sí falla el DNS a los clientes queda el DNS primario que actúa como DNS de dominio y DNS forward, por lo cual no aplicaba. Esos descubrimientos los hice en pocas horas, tras ya tener instalado dos nodos y un balanceador.
En estos procesos de aprendizajes, uno también se descubre así mismo, ya que comienzan a aflorar las frustraciones, tolerancia a fallar y reintentar desde 0 tu proceso de aprendizaje, con el fin de armar los caminos semátnicos bajo el cual tu cerebro establece las relaciones de conceptos con cosas que ya conoces (“los argumentos en el lenguaje X son variables como en el lenguaje Y”), y así puedes generar tu propia base de conocimiento de cómo resolver problemas con lo poco que estás conociendo el lenguaje. Y es así, como con las iteraciones vas descubriendo nuevas formas de hacer lo mismo, pero más estructurado, más hermoso, un diálogo entre el programador y el ensamblador…
Por tanto, darte el tiempo de aprender nuevas cosas (y no llegar siempre a Stack Overflow), es un camino que debería enseñarse formalmente desde pequeños, ya que el miedo al fracaso es grande, pero nadie valora el esfuerzo de aprender cosas nuevas por cuenta propia, que a la larga, es la forma bajo la cual perdura más el recuerdo.