Nota: Esto es solo una opinión, y seguramente encontrarás este tema en muchos otros recursos. Sin embargo, es algo que no puedes preguntarle a una IA esperando una respuesta imparcial.
Así que aquí vamos.
Cuando comenzamos en el mundo del desarrollo de software estamos muy confundidos: no sabemos dónde empezar y mucho menos dónde terminar. El tema de qué hay disponible y qué queremos es algo que todos subestimamos. El enfoque no existe, y lo nostálgico es que se vuelve más identificable cuanto más lejos estamos del punto de partida.
Estamos tan inmersos en aprender cosas al azar, o en seguir un plan de estudios sin fundamento, que olvidamos reflexionar sobre aquello que realmente nos ayudaría a ahorrar tiempo en nuestra carrera; me refiero a avanzar de verdad.
Esto es algo que muchos no nos planteamos al inicio, y es normal sentirse desorientado. Además, se debe a que en nuestro currículum profesional existe una galaxia de herramientas y tecnologías que están ahí, disponibles para ser utilizadas.
El porqué y el para qué no siempre lo sabemos, pero ahí están, y nosotros queremos ser unos magos del desarrollo de software, tragándonos todo sin detenernos a pensar si realmente es necesario o no.
Esto provoca que, muchas veces, nos atasquemos y no aprendamos ninguna herramienta o tecnología de forma correcta, incluso después de varios años. Yo me di cuenta de esto bastante tarde, y fue frustrante.
Nos convencemos de que, con conocer lo rudimentario, ya hemos dominado el conocimiento necesario, cuando en realidad solo obedecemos órdenes de un framework o un entorno de desarrollo.
Es más, nunca nos cuestionamos más allá de eso. Obedecemos las sugerencias del IDE, la estructura sugerida del programa, los complementos de integración, los nombres de las variables, etc.
Nos descargamos de responsabilidad con la ilusión de que no es necesario saberlo, ya que, para eso existen herramientas.
Cómo ganar confianza en lo que hacemos
Hablemos de la confianza al momento de escribir código o elegir una herramienta para resolver un problema.
Actualmente, con la inteligencia artificial, muchos dirían —sobre todo respecto al código—:
¿para qué quiero saber programar?
¿para qué quiero aprender lógica?
¿para qué quiero entender cómo funciona el intérprete o el compilador?
¿para qué quiero saber qué es una variable o una referencia?
Si contamos con herramientas que hacen todo por nosotros.
La verdad es dura, y se nota cuando alguien escribe código sin la ayuda de una IA o una herramienta que lo haga por ellos: se distingue entre quien conoce los fundamentos y quien los desconoce. Pero bueno, no es lo que se intenta descifrar en este post, aunque es algo que empeora cada vez más.
Es por eso que te voy a dar la clave para aprender y avanzar realmente en la industria.
Comienza por aprender específicamente la parte intangible de la aplicación de tecnologías, la filosofía detrás de cada una, la esencia del porqué de su existencia y uso.
Sabemos que los lenguajes de programación no son más que herramientas que sirven como base de todo el desarrollo de software. Este es un tema intrínseco al desarrollo de aplicaciones muy amplio; es indiscutiblemente fundamental. De esto tendrás muchos artículos próximos.
Solo voy a decir que es totalmente necesario conocer los cimientos. Me refiero a entender exactamente cómo se comporta el lenguaje en la computadora: cómo se ejecuta, cómo se convierte a código de máquina, qué es el sistema de tipos, qué es una instancia, qué es en realidad una variable (algo muy interesante), cuál es la unidad base de trabajo del compilador (en lenguajes compilados), etc.
A esto y mucho más me refiero con conocer el lenguaje, al menos uno de cada modo de ejecución: interpretado o compilado.
No, pero tengo que conocerlos todos —dirían muchos. La verdad cruda es que no es necesario. Aprende bien, pero bien, al menos dos, y luego te darás cuenta de que es suficiente. Para construir una aplicación utilizable no basta con una sola tecnología, y lo sabrás de la forma más cruda: el usuario no va a utilizar una pantalla negra sin una interfaz amigable, intuitiva y funcional.
Así que no te frustres intentando aprender todos los lenguajes. Créeme en lo que te digo: aprende dos lenguajes de backend y domina bien alguna tecnología para hacer frontend. Y, como sabes, si eres aprendiz, ni siquiera esto será suficiente, ya que también tendrás que aprender a manejar la capa de datos.
En conclusión, no te frustres tratando de aprenderlo todo, porque al final solo te estarás engañando.
Un enfoque más pragmático
Concéntrate en la parte pragmática de la tecnología: aprende a identificar el problema a resolver, busca una solución clara, elige las herramientas más adecuadas y aprende a razonar con un enfoque que vaya más allá del simple uso de las herramientas.
Al final, no quieres ser solamente un codificador; necesitas aprender a dimensionar el problema e intentar llevarlo al mundo real.
- ¿El problema es realmente un problema?
- ¿El problema tiene una solución tecnológica?
- ¿Tengo clara la solución?
- ¿Existe una herramienta o software que ya lo resuelva, completa o parcialmente?
- ¿Vale la pena hacerlo desde cero?
- ¿Estos problemas son comunes o existe software/sectores especializados en resolverlos?
- ¿Debería dedicar tiempo a esto, o solo me está retrasando?
- Etc.
Todas estas preguntas, que a primera vista parecen no tener sentido, son justamente las que los creadores de la tecnología se hacen al momento de resolver un problema (construir software).
El ejemplo de Git
Tomemos un ejemplo: Git.
Git es una herramienta poderosa para el manejo de cambios y versiones de software, aunque muchas veces lo consumimos sin apreciar su verdadero potencial más allá de este ámbito.
Si lo observamos desde una perspectiva filosófica, Git no se limita únicamente al software. Incluso podría ayudar a un escritor a compilar un libro: comienza pieza por pieza, crea un primer intento y lo guarda como una feature, luego lo revisa, después añade otra feature y vuelve a revisar; más tarde hace un merge de lo que mejor encaja, y así continúa creando nuevas ramas según sus necesidades.
¿Qué otras ventajas podríamos enumerar del uso de esta herramienta?
- Permite trabajar de forma descentralizada.
- Permite revertir cambios no deseados en nuestros archivos.
- Permite almacenar información de forma organizada.
- Facilita la colaboración en equipo.
- Permite sincronizar los cambios realizados por otros miembros con acceso a los repositorios.
- Facilita compartir datos con quienes deseemos.
- Ayuda a organizar nuestros cambios en pequeños incrementos.
- Asegura trazabilidad.
- Y muchas más.
Git fue diseñado para resolver problemas específicos, problemas que solo se identifican al construir productos.
La conclusión
El objetivo de este artículo es que aprendamos a escribir código y desarrollar software con fundamento, porque pasamos mucho tiempo frente a una computadora, pero, como mencioné anteriormente, miles de líneas de código nunca resolvieron nada. Y si lo hicieron, fue posiblemente sin la intención correcta.
Aquí es donde todos nos perdemos: los programadores pasamos horas supuestamente aprendiendo una tecnología, pero seamos francos… ¿cuánto sabemos realmente?
- ¿Podríamos identificar un patrón de diseño a partir de la descripción de la solución a un problema?
- ¿Y la arquitectura necesaria para escalar un software que soporte millones de usuarios al mismo tiempo?
- Respuestas demasiado penosas.
El enfoque que te planteo es observar desde arriba, no desde en medio de la confusión. Tú dirás qué estás aprendiendo:
¿Será que necesitas todo ese stack?