Cuando una persona recien empieza a aprender a programar es una buena idea que escoja un solo lenguaje de programación y que a partir de alli vaya conociento las herramientas de software relacionadas a ese lenguaje, como sus interpretes o compiladores, los comandos de este, o editores de codigo y asi, Todo esto con el fin de ir familiarizandose con el concepto base de lo que conlleva escribir software, este enfoque es simple y hasta hace sencillo aprender lo que significa crear software.
Pero cuando ya se pasa la barrera de saber escribir codigo, y ya sabes que es un if, un loop, una funcion y entiendes las bases de un lenguaje de programación, lo siguiente que necesitas es crear software que resuelva tu problema de verdad.
Porque escribir codigo es como apender un nuevo idioma, no basta con saber las bases del lenguaje, tienes que usarlo, tienes que escribir algo, tienes que leer algo, o usarlo para comunicarte.
en otras palabras, saber escribir codigo no es suficiente, necesitas entender como funcionan tambien sistemas de software, protocolos, arquitecturas, guias de diseño y patrones y muchos otros temas que ya mencione en el video de Temas que todo programador debería aprender, con el fin de pasar la barrera de solo serun programador que escribe codigo por escribir a uno que realmente e competente creando software, y de hecho esta es la diferencia de un desarrollador de software que esta empezando con uno que ya lleva mucho tiempo en el sector, poque este ultimo ya se ha familiarizado con muchos de estos terminos o conceptos y los entiende de una forma practica, que uno que solo sabe muchos lenguajes o alguna herramientas puntuales pero se le dificulta crear una solucion.
Ahora si estas empezando no te preocupes tarde o temprano, si sigues estudiando llegaras a ese punto, pero en este video quisiera compartirles una premisa que me ayuda a poder dominar muchos más lenguajes, y frameworks de una forma que de hecho es simple, y que es hasta obvia pero que muchos ignoran, y es la premisa: "Entender Conceptos es mucho mas importante que aprender solo código"
Entender Conceptos es mucho mas importante que aprender solo código
En este canal me han visto usando varios lenguajes de programacion y frameworks basados encima de estos lenguajes y que sirven incluso para distintos tipos de proyecots, alguns solo son para backend, otros para frontend, otros moviles, aplicaciones desktop, aplicativos de red y asi, y algunas veces muchos de ustedes se preguntan como es que puedo aprender todos estas herramientas, y lenguajes o como puedo ir variandolos tan frecuentemente.
Y bueno la respuesta puede llegar a ser simple, muhcos esto lenguajes y frameworks, sdks, y herramientas en general, se parecen mucho o son casi lo mismo.
Para que puedan entenderlo piensen esto, si aprendes que es una condicional en algun lenguaje, cuando aprendes otro no te tomara mucho tiempo, porque es lo mismo solo que varia su sintaxis, algunos llevan {} otros solo un espacio, otros solo parentesis, pero una condicional en cualquier lenguaje hara lo mismo.
Es decir hasta entendido una idea antes que solo memorizar codigo.
A esto voy con conceptos mayor que codigo, tu entendies que es una condicional, no que es un if, Y esto aplica para todo.
Es decir si entiendes que es una funcion, una clase, una instanci, da igual en que lenguaje los apliques, solo va a variar su sintaxis, seguira siendo lo mismo.
Y no solamente hablo de codigo, porque si entiendes la definicion que es un interprete o entorno de ejecucion, o que es un compilador o trasnpilador, te dara igual el lenguaje que lo uses porque entiendes la salidad final que dara estos programas de este lenguaje, por lo que tambien esto sirve para entender multiples herramientas de software.
Y esto tambien aplica para servicios de la nube, en donde muchos de estos tambien tiene categorias, por lo que si aprendes la definicion de que es VPS, da igual si usas AWS, google cloud o azure, todos te ofreceran lo mismo
Esto tambien aplica al frontend si sabes que es Server side rendering, client side rendering, static site generation, da igual el framework nuevo que salga mañana, sabra cual es el que te conviene aprender.
Es decir si entiendos los conceptos antes que el codigo, herramientas y servicios, entenderas como intercambiar entre estos.
Ahora yo se que pareceria que este es un problema de programadores que recien estan iniciando, pero de hecho ya lo he visto en personas que llevan años programando, porque esto no se trata de programar, esta mas relacionado a un proceso de aprender relacionado a codigo. Saber la teoria, ayuda.
Es decir dentro de todo lo que usas como desarrollador, todo tiene una clasificacion, y entender como se clasifican tus herramientas, servicios, lenguajes y conceptos de tu lenguaje te ayudara a no solo escribir codigo por escribir sino a entender que es solo una parte de todo lo que usas.
Es por esto que tambien siempre les menciono que da lo mismo el lenguaje cuando ves las cosas de este modo, porque solo son herramientas, en donde algunas te ayudan a hacer mejor el trabajo.
LOs lenguajes a mi modo de ver, son para el programador como a un mecano son como un su kit de herramientas, dependiendo del problema que se te presente escoges uno otra herramienta, algunas veces el mecanico escogera una llave, otras veces un martillo, otras un desarmador y asi.
El desarrollador de software hace lo mismo,algunas veces te conviene usar un lenguaje simple de leer como go en lugar de c++, otra veces te conviene usar un solo lenguaje para todo como es javascript, otras veces te conviene usar servicios de la nube de almacenaje de objetos en lugar de lamacenar archivos localmente y asi. tienes que entender conceptos primero, tienes que investigar un poco, antes de solo escoger por escoger.
Esto es clave, porque al final esto te permitira pensar en elaborar sistemas en lugar de solo estar pensnado en herramientas indifivuales, veras como unir estas piezas para crear software complejo, lo que te volvera mas competente. Y hasta se vuelve mas interesante, y facil.
interesante porque no importa si mañana te ofrecen un trabajo en un lenguaje que quizas no dominas mucho, pero que ya has trabajado con otro similar, no tendras tanto problema en aprenderlo mientas haces es el proyecto. Y de hecho ese el siguiente punto que vamos a tocar, como llevar esto a la practica.
Como llevarlo practica
quizas te preguntes, hay un curso, un tutorial algo de esto, en realidad no, porque cada desarrollador necesita aprende esto de forma distinta, pero si hay una forma en la que puedes hacerlo y diviertida, y es creando proyecots continuamente.
Ahora no estoy hablando de siempre crear el mismo proyecto, sino de ir aumentando la dificultad conforme vamos aprendiendo.
Por ejemplo si estas empezando a programar y ya te creaste una aplicacion de terminal que pregunta algo, subele el nivel, create algun tipo de crud con alguna interfaz grafica, ya hices esto, añadele una base de datos, ya hiciste eso añadele una API, ya hiciste eso, aañadele autenticacion, ya hiciste, esto despliegalo, ya añadele envio de sms, notificaciones y email, ya hiciste eso, automatiza el despleigue, ya hiciste eso, añadele monitorizacion, ya hicist eso, crea una arquitectura mucho mas complja, como microservicios o microfrontend, y asi. Esto no tiene un fin.
El primer paso es plantearte un objetivo, una aplicacion o proyecto final.
LO siguiente es diseñar un poco la arquitectura de la aplicacion, suena como algo complicado pero en realidad puedes iniciar con fraficos muy simple dibujando todas las partes que interactuan, recuadros que repretan cliente servidor, una linea que represtna el protocolo que usas, los servicios que tiene y demas. Esto lo hago tanto en proyectos grandes como en proyectos pequeños, te ayuda a tener una vista general de todo. Aunque no es la unica forma, si desarrollas tu base de datos, tambien puedes crear un diagram ERD y alli definir primero tus modelos de datos lo que tambien te da una idea de lo que conllvera desarrola tu proyecto, pero de nuevo solo a modo teorico, aun no estamos tocando codigo, para esto ultimo puedes usar tu cliente sql favorito como dbeaver, heidisql, mysql workbench y demas.
Una vez tienes estos graficos o ideas genericas empiezas a desarrollar tu proyecto. Te puedes ayudar de chatpgt, copilot o la herramienta que gutes, la idea ya no es solo escribir cdigo es llevar a cabo el diseño que has creado.
Y de hecho parece simple como suena, pero lleva muhco tiempo, porque dentro de estos temas, hay subtemas y estos tienen otros subtemas y asi, esto hace que a mas proyecots de distintos tipos crees mas experiencias ganas, pero reusando temas que ya has entendido no solo avanzaras mas rapido sino que podras conocer mas.
Es decir a partir de aqui empiezas a reemplazar partes de ese diseño:
- creas una REST API, cambialo por GraphQL o tRPC, o WEbsockets. listo estas aprendiendo de medios relacionados a RPC o Remote procedure calls, que esun paradigma de comunicacion
- usaste postgresql para tu base de datos, puedes aprender sql server o mariadb, o mysql, y notaras que todos se parecen porqu decienden del estandar SQL, solo que cada base de datos usa los suyos propios.
- usas un servicio de la nube para enviar correos, cambialo por otro y aprende su categoria, ya desplegaste en un VPS, ahora haslo en un Pass o FUncion serverless
Es decir vas cambiando parte a parte, esto te da una idea de que todos hacen lo mismo pero de diferene forma y a medida que vas creando proyectos tambien vas apendindo sus dificultades y sus consideraciones
En mi dia a dia cuando ayudo a desarrolladores a llevar proyectos, muchas veces estos han notado como proyectos hechos en Python se parecen mucho a los de Nodejs,
o como usar un Frameowrk como Spring boot, es similar a crear un proyecto en Nestjs en Nodejs, no por la sintaxis sino por la arquitecutra que llevan, la generacion de codigo, inyeccion de dpendnecias o como aprender los principios REST te permite crea una API en cualquier lenguaje
entonce spar apoder lograr esto debes tener en claro lo siguiente: Primero estudia, que es la herramienta, como funciona, al menos de una forma superficial, que tengas una idea, no solo la uses. toma notas, la memoria es fragil, para eso tienes herramientas como notion u obsidian, yo uso ambas.
Es decir si has creado una aplicacion en la nube, no solo le pidas al Chat que te resuelva tareas sino lee o estudia un poco los temas que te sugiere, la parte de investigar te correponde.
Si estas desplegando una aplicacion y el chat te dio un tutorial paso a paso para hacerlo, en lugar de solo hacer por hacer, presta atencion a esos terminos raros que menciona y estudialos un poco mas, saber que es un VPS, un VPC, un Proxy Server, Un servicio de OBject Storage o un servicio de correos transaccionales, todos eos son terminos que categorian muchos servicios y que si empiezas a entenderlos mañana cuando tengas que crear otra aplicacion no te sera dificil porque estaras pensando en un diseño de sistema que incluya estos terminos y no solo en una herramienta que suban archivos, ejecuten codigo o envieen correos.
- Es mas importante saber que es un Static Site generator en lugar de solo saber que es Astro
- ES mas importante saber que es una herramienta de infraestructure as a code que en lugar de solo saber Terraform
- Es mas importante saber que es template engine,
Y esta Lista sigue y sigue, por ejemplo: ES decir entender estos terminos te ayudan a elaborar un sistema que puede ser mas complejo.
Ahora no significa que todo lo que tienes que aprender sea teoria, de hecho es mucho ma divertido ir a la practica e ir creando software, pero lo que les digo es que es muy importante entender que es o como es catalogada la herramienta que estamos usando, para que a futuro sepamos como funcionan otras herramientas de la misma categoria
Teniendo en cuenta esto, notaras que ganaras muchas ventajas al tener esta idea clara.
Enfoque en Conceptos Universales: Explora cómo los conceptos como la arquitectura de software, la estructura de datos, los principios de diseño y la seguridad informática son aplicables en una amplia gama de situaciones, independientemente del lenguaje o framework utilizado.
Flexibilidad y Adaptabilidad: Destaca cómo comprender los conceptos fundamentales te hace más adaptable a los cambios en la tecnología. En lugar de estar limitado a una tecnología específica, puedes aplicar tus conocimientos a diferentes entornos y tecnologías emergentes.
Resolución de Problemas: Enfatiza cómo entender los conceptos te ayuda a convertirte en un mejor solucionador de problemas. En lugar de depender de soluciones predefinidas, puedes analizar y abordar los problemas de manera más efectiva utilizando tus conocimientos fundamentales.
Desarrollo Profesional: Discute cómo tener una comprensión sólida de los conceptos te hace más valioso como desarrollador. Los empleadores valoran a los profesionales que pueden pensar críticamente, diseñar soluciones eficientes y adaptarse a nuevas tecnologías.
Educación Continua: Subraya la importancia de la educación continua y el aprendizaje autodidacta en la industria de la tecnología. Aprender constantemente nuevos conceptos te permite mantenerte relevante y avanzar en tu carrera profesional.
como aprender esto
Ahora esto es una idea, no es un paso a paso, asi que si no te digo que aprendas todo esto, solo que dependiendo del area en el que te encunetres puedes aplicar o mismo, ya sea si eres frontend, backend, desarrollador movil o devops, dentro de los proyectos que llevas entiende mucho mas los conceptos y prueba distintas herramientas de tu sector, lo que te dara mas profesionalidad al poder ser mas competente y dar mas opciones para resolver un mismo problema.
Ademas que conforme sigas aprendiendo tu set de conocimiento sera msa amplio, te ayudar a sobrellevar proyectos distintos porque sabes que son temas que algunas vsites, e dara mas confianza, y cuando tomes un trabajo lo tomaras como un reto no como algo frustrane.
Esto ha sido todo por el video de hoy, nos vemos en un siguiente vidoe