¿Puede un desarrollador back-end de Java (con más de 5 años de experiencia) cambiar de pista al desarrollo de pila MEAN?

Sí, por supuesto. Antes de venir a Node.js, había pasado 10 años y medio trabajando en Sun en el equipo de Java SE y, por lo tanto, había bebido profundamente el Java koolaid. Estaba muy seguro de que Java era la única y verdadera forma de escribir software, y que esas personas de JavaScript estaban siendo tontas al escribir sistemas grandes en un lenguaje tan flojo.

Luego me presentaron a Node.js, y fue DIVERTIDO. Un problema que tuve con JavaScript, que cualquier cosa podría modificar cualquier cosa, fue resuelto por los módulos Node.js, ya que forman un límite estricto alrededor de un bloque de código. Por lo tanto, es más fácil trabajar módulo por módulo para garantizar que cada módulo sea sólido, a diferencia de la situación que tiene en JavaScript basado en navegador.

Me ayudó que me sumergiera en el fondo, porque casi de inmediato conseguí un contrato con Packt Publishing para escribir un libro sobre el desarrollo de Node.js; ahora está en su tercera edición (busque “Node.js Web Development 3rd edition”). Escribir el libro significaba que tenía una razón para aprender profundamente Node.js.

Los lenguajes son algo similares, excepto que debe darse cuenta de que JavaScript es un lenguaje de programación funcional, mientras que Java es un lenguaje orientado a objetos. Los patrones de codificación son un poco diferentes como resultado. Otro obstáculo es que la documentación de JavaScript no es tan precisa como la que tenemos en el mundo de Java, con la expectativa de interfaces estrictamente definidas y comentarios bien escritos de Javadoc, que producen documentación bien estructurada.

Una ventaja de no forzar una escritura estricta es que es posible codificar un pequeño objeto anónimo que se pasa entre unas pocas funciones cooperantes y no hay necesidad de formalizarse con la definición de una interfaz dentro de la jerarquía de clases. Eso contribuyó al factor divertido: en lugar de exagerar al crear definiciones rígidas de Clase e Interfaz para todo, podría crear una instancia de un Objeto anónimo o una Función anónima, pasarlo y nada me importó.

El año pasado hice mucha programación Spring / Hibernate. Si bien es un marco útil que proporciona muchas capacidades para escribir el back-end de una aplicación web, encontré que el estilo de codificación es muy oneroso. Tener que especificar todo dentro de una pulgada de su vida útil, tener que instanciar cosas cada vez que te das la vuelta, eso significa un montón de código repetitivo en exceso que no agrega nada.

Un ejemplo práctico es la manipulación de objetos de hora / fecha. Gran parte de mi trabajo el año pasado incluyó datos de series de tiempo y no hemos tenido problemas para asegurarnos de que siempre estuviéramos calculando las manipulaciones de tiempo en la zona horaria correcta, y así sucesivamente. La biblioteca JavaScript MomentJS es un soplo de aire fresco. Esa biblioteca le permite escribir una manipulación compleja de hora / fecha en una línea de código que fácilmente tomaría 20-30 líneas en los nuevos objetos Date en Java 8 (las clases derivadas de JodaTime).

ES-2015, ES-2016, ES-2017, presenta nuevas funciones en JavaScript que harán que sea mucho más fácil para un programador de Java sentirse como en casa. Por ejemplo, ahora es posible definir objetos de clase adecuados, crear subclases (“clase A se extiende B”) y otra programación orientada a objetos. Creo que los programadores tradicionales de JavaScript se molestan un poco por esto, pero no me importa.

Otra nueva característica son las funciones asíncronas que hacen que sea mucho más fácil escribir código asincrónico. Los patrones de codificación asincrónica son otro obstáculo. Debe comprender cómo funcionan las funciones de devolución de llamada, por qué son algo bueno y evitar quedar atrapado por las trampas. Con las funciones asíncronas puede evitar muchos problemas. He escrito un libro sobre eso: busque “Asynchronous Node.js / JavaScript with ES-2015/2016 Promises, Generators and Async / Await” en la librería Kindle.

Escribí más sobre la comparación Spring-versus-Node.js aquí: ¿Cómo se compara Node.js con una plataforma MVC tradicional como Spring?

También he reunido una página de recursos que enumera varios libros y cursos de capacitación de Node.js: Libros y videos para que pueda aprender fácilmente la programación de Node.js