Meteor: desarrollo "full-stack"

Actualmente aparecen muchas ofertas solicitando “full-stack developer”. La verdad es que, así de primeras, este tipo de solicitud puede invitar a desconfiar. Si bien es un perfil perfectamente posible, detrás de una demanda como esta puede existir la pretensión de querer buscar “un chico para todo” que hoy programe tu backend, mañana se ponga la gorra de javascript para apoyar a los desarrolladores de front-end y pasado se ponga a administrar linux o a diseñar una arquitectura.

Pero en realidad, éste es un perfil tan posible como necesario. Desde un “Senior Developer” que domine diferentes áreas, hasta alguien con la capacidad de aprender al vuelo las tecnologías que se requieran (cada día más y más…).

Lo cierto es que posiblemente sea un perfil muy útil para aquellas empresas que necesiten a alguien con una visión global del proyecto. Sin embargo, si sólo se plantea esta alternativa como vía para reducir costos a base de tener muy poco equipo de desarrollo, quizás la empresa se enfrenta a una mala decisión. Allá cada cual.

Pero no es objetivo de este post criticarlo, sino el de mostraros hoy una tecnología que hace más posible que nunca convertirse en un buen desarrollador full-stack: Meteor.

¿Qué es Meteor?

Podría surgir la tentación de clasificar Meteor como “framework”, pero la verdad es que es más que eso: es toda una plataforma. La función de esta plataforma es la de hacer de nexo, o integración entre las “distintas partes”. De hecho, funciona tanto en cliente como en servidor. En el servidor, funciona sobre node.js, mientras que en cliente podemos elegir la tecnología e incluso elegir si desarrollar para móviles (cordova) o web (react, angular…). Además, todo su código es libre.

Meteor

Pese al parecido de la arquitectura de Meteor con la de Cliente-Servidor, en Meteor la comunicación entre cliente y servidor está siempre activa a través de un websocket y un protocolo al que han llamado DDP. Este protocolo de comunicación es bidireccional ya que contribuye a mantener la persistencia entre ambas capas. Incluso la BD, también existe en el cliente y ésta se comunica con la BD del servidor.

En realidad, la función de Meteor sólo es transportar datos (el protocolo DDP no transporta en ningún momento html, css o assets, de eso sólo se encarga el cliente). Y su potencia está en utilizar un solo lenguaje en todas las capas del sistema (JavaScript).

El hecho de que el cliente contenga también una base de datos influye de forma positiva en la velocidad gracias a la compensación de latencia: cuando el usuario crea o modifica algo, se actualiza la base de datos del cliente y ésta se sincroniza con la del servidor. Evidentemente, esto no significa que el cliente tenga que tener una copia completa de la base de datos del servidor, sino que van creándose copias reducidas de ésta. Por supuesto Meteor contiene mecanismos de seguridad para controlar que estos cambios en los datos del cliente no “hacen trampa”, el servidor debe confirmar los cambios. Pero esto se hace de manera que no reduzcamos la latencia de la aplicación y de manera transparente al usuario.

La idea de Meteor no es la de reemplazar tecnologías que ya existen. Más bien pretende hacer de “integrador” de éstas, permitiéndonos crear un ecosistema. Pero la API es tremendamente sencilla, muy orientada a la productividad. Hasta el punto de que prototipar se convierte en una tarea sencilla.

Primeros pasos

Para instalar Meteor en Ubuntu, tan sólo tendremos que ejecutar el siguiente comando:

curl https://install.meteor.com | sh

Crear el primer proyecto:

meteor create miprimerapp

Esto va a crear una carpeta de proyecto. Si ingresamos en ella y ejecutamos simplemente:

meteor

lo que hará el sistema en levantar una instancia de MongoDB, ejecutar el servidor de NodeJs y preparar el cliente. Por defecto, el servidor de prueba escuchará en el puerto 3000, de modo que en el navegador debería ver lo siguiente:

Meteor