Siendo pequeño, fui a clases de violín. Tocaba mucho, y muy bien. Un día, hace un par de años, me apeteció aprender a tocar la guitarra. Me compré una, barata, y empecé a ver conciertos de mis bandas favoritas. Iba parando el video, y ponía la mano igual que el guitarrista. Luego, apuntaba los dedos que estaba poniendo, y trataba de aprenderme la canción. O, al menos, ese era el plan ¿Qué podía salir mal?
Salió todo mal. Creo que, después de tres días intentando tocar una sola canción, no sonaba bien ni un sólo acorde.
Me frustré. Me frustré muy rápido. ¿Cómo podía ser que, siendo yo tan buen violinista, no sonase ni un solo acorde bien? Pues, sencillamente, porque la guitarra y el violín no tienen nada que ver. Absolutamente nada. Me faltaba algo muy básico: Los fundamentos.
Ahora, pensarás: “Pero, Carlos, ¿esto no era un post sobre NodeJS? ¿No me ibas a contar de qué va esto de javascript? ¿Te has vuelto ya loco?”.
Sí, esto va de javascript. Y no, aún no me he vuelto loco. Bueno, quizá un poco.
Bien, si lo que quieres es que te hable de Javascript, o de NodeJS, te contaré mejor que mi primer lenguaje de programación fue PHP. Y un día, decidí moverme a Node. Leí un par de tutoriales, y mucho código, y me puse a rehacer con Node un backend que tenía en PHP.
¿Sabes cómo fue? Igual que cuando me compré la guitarra: Fatal. ¿Y sabes por qué? Por lo mismo que cuando me compré la guitarra: Porque, pese a saber muchísimo PHP, no tenía ni idea de los fundamentos de Node.
Vale, entonces, es importante aprender los fundamentos. Sí. Siempre. Pero, ¿qué son los fundamentos? Y, casi más importante, ¿cómo aprendo los fundamentos de NodeJS?
Bien, vayamos por partes. Los fundamentos son los conocimientos básicos de cualquier cosa. Es sobre lo que se va a construir cualquier curso, cualquier aprendizaje, cualquier práctica. Todo. Si no son sólidos, te va a pasar como a la gente de Pisa con su torre: Se va a caer. Y para evitar que se caiga, vas a tener que poner tanta ingeniería, que habrías deseado aprender bien los fundamentos.
“Ok, Carlos, ya me he enterado de que los fundamentos son importantes. Háblame de los de NodeJS”.
Vale. Vamos a ello. Son tres cosas. No es una, ni son dos. Tres:
1. Asincronía
Una de las partes más importantes de NodeJS es la asincronía. Esto quiere decir que no todo pasa a la vez. Ni siquiera secuencialmente. O quizá sí. Es uno de los conceptos que hace que NodeJS sea tan particular.
Imagina que tienes que hacer un sandwich. Desde cero. Tienes que hacer el pan, cortarlo, cortar el jamón, el queso, y luego armarlo todo.
Tienes varias formas de hacerlo: Puedes hacer un paso detrás de otro, esperando a que termine el anterior para empezar con el siguiente. Esto, es hacer las cosas síncronas: Una detrás de otra. Primero una, luego otra, y luego otra.
También puedes aprovechar los tiempos. Mientras se hornea el pan, puedes ir cortando el jamón y el queso, e irlos dejando listos para armar el sandwich. Y, cuando el pan termine de hornearse, lo cortas y montas lo que queda. Esto, es la asincronía. Hay tareas que se realizan a la vez, y de esta forma optimizas los tiempos.
Para manejar la asincronía, tienes diferentes herramientas: Callbacks, promesas y async/await. Todas ellas se basan en ejecutar una función cuando la tarea asíncrona termine.
2. EventLoop
El event loop es la base de NodeJS. Está escrito en C++, y es el motivo por el cual es asíncrono.
Imagina un hamster dando vueltas en una rueda. Todo el rato. Ahora, le das una pipa al hamster. Si quiere pelarla, tendrá que parar de correr en su rueda, pelar la pipa, y luego seguir corriendo. El tiempo que la pela, no puede hacer otra cosa. Así funcionan los lenguajes tradicionales. Síncronos.
NodeJS, en lugar de un hamster, son muchos. Una megafactoría de hamsters. Cuando al que corre en la rueda le pasan una pipa, en lugar de pararse y pelarla, se la da a otro hamster, experto pelador de pipas, que la pela por él mientras el primero sigue corriendo. Así, le pueden llegar muchas más pipas. Y cada vez que le llegue una, se la va a pasar a otro para que la pele. Asincronía.
Esto es lo que el Event Loop de NodeJS hace con las funciones. En lugar de quedarse bloqueado, lanza un hilo, y ejecuta en segundo plano la función. Esto es altamente eficiente.
3. Módulos
NodeJS se basa en módulos. ¿Qué quiere decir que se base en módulos? Que todo lo que no sea sintaxis, va a ser un módulo. Todo.
¿Acceso a ficheros? En un módulo: fs. ¿Peticiones HTTP? En el módulo http. ¿Ejecutar procesos del sistema? En un módulo: so. ¿Comprobar si un número es par o impar? En un módulo. Bueno, en dos: is-odd y is-even. Todo son módulos.
Algunos vienen por defecto en NodeJS. A estos, se les llama “módulos del core”, o “core modules”. Son bastantes, y son muy útiles para poder hacer nuestros programas en NodeJS.
Hay otros que no vienen en el core, pero se pueden descargar y utilizar en nuestro código. Lo habitual, suele ser tenerlos en NPM, que es donde se listan los paquetes. NPM se instala junto con NodeJS, y nos va a permitir gestionar todas las dependencias de forma sencilla y muy profesional.
Además, puedes crear tus propios módulos, y hasta subirlos a NPM, para que todo el mundo los use.
En resumen
Si quieres empezar con NodeJS, y no quieres perder muchísimo tiempo en hacer cosas sobre una base nula, como yo cuando aprendí a tocar la guitarra, o los italianos cuando hicieron la torre de Pisa, tienes que saber que en NodeJS:
Esto son solo un par de pinceladas. No me da tiempo a enseñarte todos los fundamentos en un blogpost. Por suerte, si quieres aprender en profundidad los fundamentos de NodeJS, si que te los puedo enseñar en el Curso de Fundamentos de NodeJS.
Bien!! esas analogías, aun no se nada del tema , pero adviertes mucha paciencia, para que las cosas resulten mejor.!!
Muy bueno el concepto 😃 💚
excelente explicación y analogías Carlos
Excelentes ejemplos de las bases de JS y que las usamos en Node tambien, gracias por la info, tomare este curso ahora
Gracias por la información 😁👍🏆🥇
Wow excelente post, estoy tomando este curso y esta muy bueno.
Muchas Gracias. Muy claras las comparaciones, un buen dato para todos aquellos que estamos explorando este mundo.
Jajaja literal estoy viviendo lo mismo. Pasé de PHP a Node y pues la ventaja es que es un proyecto nuevo y tenía algo de idea con al asincronismo, en parte no ha sido tan traumático pero si muy, muy lento el proceso de elaboración de un back.
Muy buenos tips.
Y yo perdiendo el tiempo en clases de 1 hora, en este post lo has resumido bastante bien.
Excelente Post. Siempre se debe tener conocimiento fundamental para avanzar de manera eficiente.
Muy buen tema amigo Carlos
Buen Post, gracias
me toca hacer la torre de pisa con cohetes
buenardo
Genial máster. Aprender Node viniendo de PHP es bien complicado pero tu amenizas mucho el camino! Muchas gracias!
¡Genial!, esto es muy motivador :3
En este post dices que nos enseñaras los fundamentos de Node.JS y que son tres, además nos los enseñas. Pero luego en el resumen de este sales con que “son solo unas pinceladas” y que no te da tiempo de enseñarnos los fundamentos en este post…
…
Excelente post, me encanto. Gracias.
Estoy tomando el curso y es buenísimo, ame las analogías de este blog.
Si es necesario primero los fundamentos, ¿Por qué hicieron primero este curso y luego el de Node?