Node.Js: El comienzo…

Creado en 2009 por Ryan Dahl, basado en la maquina V8 que Google creó para interpretar JavaScript en Chrome, hoy es la revolución de la programación web permitiendo correr JavaScript en el servidor.

Como es mi primera vez, escribiendo en un blog, quiero hacer algo especial… quiero dedicar una serie de post’s a mi proceso de aprendizaje de la plataforma node.js.

La idea de esta serie de artículos es crear algo parecido a una “bitácora” de todo mi proceso de aprendizaje de Node, esto incluye:

Para que el proceso de aprendizaje sea transparentes para ustedes, a lo largo de los post, estaré adjuntando los link's de todas las fuentes consultadas.

Bueno… así que sin mas, comencemos!!!

¿Qué es Node.js?

Esta es la pregunta que todo el mundo se hace cuando escucha por primera vez sobre Node.js, como mis conocimiento de Node son casi nulo (lo único que conozco es javascript así que voy a iniciar desde cero), lo que me parece más intuitivo es ingresar a la web oficial y averiguar ¿qué es node?.

Una vez en Node.js | About nos presenta la siguiente definicion:

"Concebido como un entorno de ejecución de JavaScript orientado a eventos asíncronos, Node está diseñado para construir aplicaciones en red escalables."

Como pueden ver, en esta definición se hace referencia a distintos conceptos que pueden producir cierta incertidumbre, para evitar esto, voy a tomar un par de apuntes para explicarlos:

  • Entorno de ejecución:
  • Como el entorno de Node es muy amplio y da para hablar mucho, a continuación se dará una breve descripción del concepto para luego, en futuros post, profundizar y conocerlo mejor.

    En nuestro caso, el entorno de ejecución Node, es una aplicación que provee de un conjunto de librerías o módulos nativos, para proporcionar los servicios necesarios para la ejecución de una aplicación.

    A continuación, se citará un fragmento del libro “introducción a Node.js a través de Koans” de Arturo Muñoz de la Torre:

    "Partes de estas librerías permiten interactuar con componentes del sistema operativo a través de funciones que cumplen con el estándar POSIX

    Básicamente este estándar o familia de estándares, define las interfaces y el entorno, así como utilidades comunes, que un sistema operativo debe soportar y hacer disponibles para que el código fuente de un programa sea portable (compilable y ejecutable) en diferentes sistemas operativos que implementan dicho estándar, Node facilita funciones para manejo de archivos, Entrada/Salida, señales y procesos conformes a las características establecidas por POSIX"

    Que quiere decir esto? que node nos provee de un conjunto de funciones y herramientas, que ya fueron testeadas por la comunidad, para brindarnos todas las funcionalidades necesarias para realizar nuestra aplicación en red siguiendo un estándar POSIX.

    Que ventajas nos proporciona el hecho de que la comunidad participa en la evolución de Node?

    Parece una pregunta un tanto rebuscada, pero esto es realmente importante, en los últimos años la participación de la comunidad a sido fundamental para el crecimiento y desarrollo de muchas tecnologías.

    Como esta pregunta extendería mucho este post, adjunto un link, muy interesante al respecto del tema, La importancia de las comunidades en tecnologia

  • Orientado a eventos asíncronos:
  • La siguiente definición la encontré investigando por google, en una página de JavaScript, cito la definición:

    "La programación asíncrona establece la posibilidad de hacer que algunas operaciones devuelvan el control al programa llamante antes de que hayan terminado mientras siguen operando en segundo plano. Esto agiliza el proceso de ejecución y en general permite aumentar la escalabilidad, pero complica el razonamiento sobre el programa."

    Les adjunto el link: Programacion asincrona paso de continuadores, eventos promesas y generadores

    Recomiendo que lean el artículo completo que explica muchas cosas sobre el asincronismo, que es un factor muy importante en el funcionamiento de Node. En su respectivo momento retomaremos este tema para hacer un estudio más a fondo.

    En resumen, la ventaja que ofrece este paradigma de programación es que, NodeJS no realiza bloqueos en el procesamiento. Esto quiere decir que:

    "cuando es requerido realizar una tarea secuencial, la cual requiere realizar el paso 1,2 y 3 en ese orden, es necesario crear una serie de callbacks, lo cual es básicamente que al terminar el paso 1, manda llamar una función correspondiente al paso 2, y al terminar el paso 2, manda llamar otra función correspondiente al paso 3.

    Esta serie de llamadas o callbacks es una de las cuestiones más criticadas de NodeJS, que incluso, ya le han puesto un nombre Call Backs Hell o el Infierno de las call backs, pues es necesario anidar una gran cantidad de funciones para realizar una única operación, lo cual puede ser un verdadero dolor de cabeza al intentar seguir el código, además que es muy verboso."

    Asi lo explican en Introduccion a nodejs

    La definición y manejo de call backs la explicaremos a lo largo de los post’s, por el momento concentrémonos en obtener una buena idea de lo que es Node.js. Aunque les dejo de tarea que encuentren la definición e interpreten lo que es una callback en JavaScript.

  • Aplicaciones escalables:
  • Las aplicaciones escalables son aquellas aplicaciones que se pueden adaptar a los cambios en el futuro. Que quiero decir con esto? que una red escalable puede expandirse rápidamente para admitir nuevos usuarios y aplicaciones sin afectar el rendimiento del servicio enviado a los usuarios actuales.

    Conclusión:

    • Node es una plataforma, que provee de funcionalidades y librerías o módulos nativos, para el desarrollo de aplicaciones de red escalables.
    • Su principal característica es la programación orientada a eventos asíncronos, que permite a Node no realizar bloqueo en las operaciones.
    • Node facilita funciones para manejo de archivos, Entrada/Salida, señales y procesos conformes a las características establecidas por POSIX

    Bueno, para no extender más este post vamos a concluirlo aqui, ya con una definición clara de lo que es Node.js. En el próximo post estaremos viendo como es el proceso de arranque de Node, como esta conformado su directorio y su core: funcionamiento y módulos.

    Cualquier consulta o comentario envialo via twitter o por email a hello@nicolascavilla.com, nos vemos la próxima. Saludos!