Universo NodeJS
Un artículo de Rafa G. Blanes
Este es el comienzo de un nuevo proyecto.
Soy de la opinión de que si no eres capaz de explicar a otros aquello que crees que sabes y que usas en el día a día, seguramente no sepas tanto como crees. Enseñar, sea de la forma que sea, mediante posts en un blog, en artículos o en videologs, siempre te permite ahondar aún más en los temas que tratas. Tengo la impresión de que en la cultura anglosajona se fomenta más el mentoring, no es por casualidad, tanto dentro como fuera de la compañía o las empresas en las que trabajas.
Durante 2014 me he metido de lleno en ciertas tecnologías y tendencias relacionadas con conceptos como big-data, responsive design, plataformas para la economía colaborativa, el Internet de las Cosas, etc., al tiempo que me he esforzado aún más en mejorar técnicas de gestión de proyectos software (y que en gran parte consisten en tener una gran empatía con el equipo que dirijes). Como digo siempre, si no mejoras en las competencias con las que trabajas, entonces es que empeoras...
Me gusta NodeJS, lo he empleado este año pasado en un proyecto profesional para un cliente y ahora mismo lo estoy exprimiendo de lleno en uno de mis proyectos para este año. Al mismo tiempo, no encuentro en los pocos libros acerca de NodeJS escritos en castellano todo lo que me gustaría encontrar en ellos; es más, creo que existe una gran laguna que hay que cubrir.
¿Será NodeJS objeto de olvido dentro de unos años?
Aunque en software nunca se pueden hacer predicciones a medio y largo plazo porque no siempre sobreviven las mejores tecnologías, creo que NodeJS y sus derivados va a pervivir con nuestra forma de enfocar proyectos escalables mucho tiempo.
La razón, básicamente, es que es relativamente sencillo de aprender, porque se usa Javascript que es el lenguaje que cada vez está más omnipresente y porque está creciendo alrededor del core un ecosistema de módulos que lo enriquecen enormemente. Por tanto es el momento de preparar en condiciones, con rigor y calidad un buen libro sobre NodeJS.
Pero, ¿otro libro de NodeJS?, ¿será uno más o aportará algún enfoque nuevo?
Existe un gran vacío de literatura técnica en castellano sobre esta tecnología; lo que se encontrar, aún estando muy bien, no deja de ser en mi humilde opinión sencillas introducciones a lo básico de NodeJS sin dar un enfoque global a la realización de un proyecto profesional y listo para salir a un entorno de producción. O sea, que necesitarías varias publicaciones así como muchos artículos y búsquedas en foros para atar todos los cabos y terminar una aplicación mínimamente profesional con NodeJS.
Describir los rudimentos de una tecnología no te prepara para usarla a fondo en un proyecto profesional. Los libros (tanto en castellano como en inglés) que he leído, aún gustándome, carecen de lo siguiente:
- Se presentan siempre ejemplos sencillos y de juguete. Lo cual pedagógicamente está bien pero está lejos de resolver problemas reales, de los que se presentan en cualquier proyecto con NodeJS.
- No se indica cómo implementar técnicas básicas de clean code y refactoring con NodeJS.
- Tampoco se hace hicapié sobre la mejor forma de estructurar un proyecto según la naturaleza de éste.
- No hay un catálogo de buenas prácticas para que un proyecto en el que se emplea total o parcialmente NodeJS se desarrolle con lo que la comunidad acepta como lo más correcto.
- Existe un gran vacío en relación a implementar tácticas de seguridad en un proyecto web realizado con NodeJS.
- Tampoco se encuentran fácilmente las mejores prácticas para desplegar un proyecto con NodeJS en producción de cara a su mantenimiento.
- No se profundiza en ninguno de todos esos módulos que han ido creciendo alrededor de NodeJS y con los que se ha creado un ecosistema realmente rico y maduro para la realización de aplicaciones profesionales (Q y promises, passport, sequelize, async, underscore, lodash, etc.)
- Del mismo modo, no se sugiere cómo usar correctamente un framework de pruebas unitarias con NodeJS y cómo integrarlo bien en cualquier proyecto.
- Igualmente, tampoco se aclara correctamente cómo hacer una separación de responsabilidades (separation of concerns) en un proyecto con la especial idiosincrasia de NodeJS para su fácil testeabilidad y buen mantenimiento.
- En relación a proyectos web, existen bastantes cosas acerca de Express, pero en pocas se incluyen los elementos necesarios para producir una aplicación web con ficheros css y js, minimizados, concatenados, etc.
- Tampoco se aborda cómo integrar el consumo de recursos externos publicados en forma de servicios REST o cómo construir tu propia capa RESTful.
No es que quiera abarcar todos esos temas con una profundidad tremenda, pero sí con el suficiente detalle como para mostrar una visión global completa.
Así las cosas, hasta ahora si decides meterte de lleno en esta fantástica y prometedora tecnología, que sepas que tendrás que hacerte de alguno de los libros disponibles actualmente y que además tendrás que bucear en multitud de contenidos extra para ver de manera global y holística todo este Universo NodeJS.
De ahí el nombre de Universo NodeJS: no es sólo esa tecnología, su Core API y el uso más o menos avanzado de Javascript (ECMAScript versión 5), sino además multitud de módulos, técnicas y buenas prácticas para el éxito de un proyecto.
¿Cómo se publicará el trabajo?
Los capítulos, ya planteados y organizados, se irán produciendo a lo largo de los próximos meses con una dinámica similar a como fui liberando las secciones de El Libro Negro del Programador: adelantos cada varias semanas de los capítulos con el contenido fundamental hasta completar la publicación del libro con todo el material.
¡Arrrgh! Llevo elucubrando acerca de este proyecto desde hace muchos meses de modo que ahora doy el pistoletazo de salida para contribuir, modestamente, a formar más y mejor a nuestra comunidad de desarrolladores profesionales de software con esta magnífica tecnología.
Recuerda: no somos una simple acumulación de conocimientos sbre esta o aquella tecnología, sino aquello de utilidad que somos capaces de hacer para otros con ellas.