Hola chicos, en este artículo vamos a comparar Node.js vs Ruby on Rails para el desarrollo web. La razón principal por la que escribí este artículo es que a nuestro equipo le preguntan constantemente qué lenguaje o qué framework es mejor para aprender. De todos modos, nunca damos una respuesta sencilla porque no son la respuesta clara. Así que creo que la siguiente mejor opción es mirar todos los hechos y estadísticas. Vamos a echar un vistazo a algunas de las ventajas y algunas de las desventajas tanto de Node.js como de Ruby on Rails para las tecnologías del lado del servidor. Antes de empezar, me gustaría hacer un par de observaciones. Ya podemos oír a los críticos diciendo que cómo vas a comparar Node.js, que es un tiempo de ejecución, con Ruby on Rails, que es un marco de trabajo. Entiendo el argumento, pero lo que voy a comparar son las dos tecnologías del lado del servidor y las pilas web. Ahora vamos a aclarar qué es mejor aprender ahora mismo y qué es mejor implementar para un negocio. No estoy diciendo que se comparen directamente las características de Ruby on Rails con las de Node.js, por si te hace sentir mejor sustituir Node.js por algo como Express o algún otro framework basado en Node. De todos modos, comparamos estructuras y pilas de backend, no la tecnología individual. Nuestro equipo ha trabajado con ambas tecnologías y a algunos de nosotros nos gustan ambas tecnologías. No estoy promoviendo una sobre la otra. También es importante entender que lo que funciona para nosotros puede no funcionar para ti y viceversa. Además, hay que recordar que el cerebro de cada persona es diferente. No hay una respuesta única para esta pregunta.

Comencemos por ver algunas de las similitudes entre ambas tecnologías.

  • Tecnologías populares del lado del servidor.
  • Bastante fácil de aprender.
  • Alto rendimiento.
  • Usadas por los mejores sitios web/aplicaciones.
  • Fuerte comunidad.
  • Estructura similar basada en MVC.
  • Desarrollo rápido.

Tanto Node.js como Rails son tecnologías del lado del servidor muy respetadas y populares que pueden hacer muchas cosas diferentes. Pueden trabajar con muchas pilas y bases de datos diferentes, etc. Ambas son bastante fáciles de aprender. Node utiliza JavaScript y Rails utiliza Ruby. Pero Ruby y JavaScript son más fáciles de aprender que algo como Java, C# o algunos de esos lenguajes de alto nivel. Ambos son lenguajes bastante indulgentes y hay un montón de recursos para aprenderlos. Node.js y Ruby on Rails funcionan realmente bien y hablaremos del nivel de rendimiento. Hay muchos ejemplos de sitios web populares que utilizan ambas tecnologías. Node y Rails tienen comunidades muy fuertes y con muchas opiniones.

Rails lleva un poco más de tiempo y tiene más veteranos. Pero Node es cada día más popular. Ahora MVC o Modelo-Vista-Controlador es un patrón diseñado. Y Ruby on Rails tiene MVC duro. Tienes una carpeta para tus modelos, tus controladores y tus vistas. MVC es posible con ciertos frameworks en Node como Express. Sin embargo Express es mucho más flexible en su estructura que Rails. Sólo puedes tomar ciertos aspectos del MVC. No es la única estructura posible. Node y Rails se utilizan para el desarrollo rápido y la creación de prototipos. Rails tiene una función de plegado impresionante y Express tiene generadores y herramientas de línea de comandos también.

Ventajas de Rails

  • Estructura consistente.
  • Muy opinable.
  • Migraciones de bases de datos.
  • Velocidad de desarrollo.
  • Ruby es un gran lenguaje.
  • Gemas de Ruby.
  • Madurez y comunidad respetada.

Primero vamos a ver las ventajas de Ruby on Rails y luego las desventajas. Como he dicho, Rails tiene una estructura MVC muy fuerte. La mayoría de las aplicaciones Rails van a ser muy similares en cuanto a los archivos y carpetas del núcleo. Tienes esa sólida base y luego construyes sobre ella con gemas y paquetes y bibliotecas personalizadas. Además, Rails es muy obstinado, lo que significa que te obliga a adherirte a su forma de hacer las cosas. Rails asume que vas a escribir código de una manera determinada y algunas personas pueden decir que eso es un poco restrictivo. Pero también hace que el código sea más fácil, mucho más limpio y también hace más difícil crear errores y problemas. No es restrictivo en el sentido de que no puedas crear lo que quieres, sino sólo la forma en que vas a llegar allí. Si lo haces de la forma correcta lo más probable es que sea el camino más fácil.

Rails también tiene una funcionalidad de migración de bases de datos realmente buena. Nos permiten hacer cosas como crear y editar tablas y columnas en nuestra base de datos sin tener que entrar manualmente y añadir o cambiar cosas. También te da un pequeño registro o ruta que puedes seguir para ver exactamente lo que se ha hecho a la estructura de tu base de datos.

Ahora a Node. Hay algunos paquetes o módulos para migraciones como DB-migrate que pueden funcionar realmente bien, pero no es tan profundo y fácil de usar como el sistema de migración de acordes de Rails. Cuando se trata de creación de prototipos y desarrollo rápido no hay muchas tecnologías por ahí que puedan superar a Rails. Así, con algo de configuración básica y un par de comandos de andamiaje tienes una aplicación CRUD en pleno funcionamiento. Las migraciones de bases de datos se suman a esa velocidad. Node.js y Express son bastante buenos con el desarrollo rápido si utilizas herramientas y módulos de terceros. Pero Rails tiene todas esas cosas desde el principio.

Hay algunos pros y contras en el lenguaje Ruby, pero en su mayor parte, es bien respetado y es muy limpio. Ruby es un lenguaje multiparadigma, puedes hacer código procedimental funcional, pero en su mayor parte, está orientado a objetos. Todo puede ser visto como un objeto. RubyGems es un gestor de paquetes para Ruby on Rails y se utiliza para extender la funcionalidad principal del framework. Es similar a npm para Node.js. Todas las aplicaciones Rails tienen un archivo de gemas donde puedes especificar tus gemas. Luego puedes ejecutar un comando bundler para instalarlas todas, de forma similar a npm install con Node.js.

Otra cosa buena de Ruby on Rails es que lleva tiempo funcionando y tiene una comunidad muy respetada e inteligente. Los desarrolladores que mantienen Ruby on Rails son extremadamente inteligentes y muy apasionados por el framework. Hay una gran cantidad de recursos en el núcleo del framework, incluyendo foros, blogs y documentación para ayudarte si te quedas atascado. Estas son algunas de las grandes ventajas de Ruby on Rails.

Desventajas de Rails

  • Rendimiento
  • Demasiado simple
  • Popularidad
  • Falta de documentación

Hablemos de algunas de las desventajas. Algunas de las mayores quejas que hemos escuchado sobre Ruby on Rails es que es relativamente lento. Rails es un gran framework con muchas características en su núcleo. Al igual que algunos de los frameworks más ligeros, también hay que tener en cuenta las dependencias de gemas y archivos de aplicación. Hay tanta automatización y andamiaje que el desarrollador no aprende mucho sobre el funcionamiento del framework Rails. Puede que conozca el lenguaje Ruby, la sintaxis o la estructura de su aplicación, pero para alguien que realmente entienda cómo funciona Rails, esto es genial por su rápido desarrollo. Por otro lado, algunos de los desarrolladores tienen que ir más allá para entender realmente ciertas cosas. Rails también es mucho más difícil para proyectos grandes que para aplicaciones pequeñas. También puede tener algunos problemas de escalabilidad.

Otra desventaja es que Rails no es tan popular como Node.js. En este momento, Node.js está en la vanguardia del desarrollo web y el entusiasmo por Rails realmente ha bajado. En nuestra opinión, si estás buscando un trabajo, definitivamente diríamos que aprendas Node y probablemente Express. Hay más empresas que contratan desarrolladores de JS que de cualquier otro lenguaje. Si esto fuera hace cinco años, Rails o Ruby sería uno de los tres principales lenguajes a aprender. Pero hoy en día no es tan popular. Por eso mencioné brevemente antes que el núcleo del framework Rails tiene muy buena documentación y ejemplos, que permiten aprender comandos sencillos de andamiaje y migración de bases de datos. Todo eso está muy bien. Sin embargo, cuando tratas de aprender programación más avanzada y tratas de aprender sobre gemas específicas, a veces se siente como buscar una aguja de Newton en un pajar.

Algunos nombres bastante grandes han utilizado o utilizan Ruby on Rails en su plataforma. No creo que se pueda ser mucho más grande que Twitter. Además, han trasladado muchos de sus servicios de backend a Scala y Java debido a algunos problemas de escalado. Pero utilizaron Rails durante mucho tiempo y estoy bastante seguro de que todavía lo utilizan en otros aspectos de su plataforma, como su asociación con Shopify. Además, Basecamp, que es una solución de gestión de proyectos, ha dicho que Rails es el corazón y el alma de su proyecto. El software que ejecuta GitHub se construyó sobre Rails. Soundcloud y Hulu, que es un popular servicio de streaming, se construyeron sobre Rails. Desde el principio, Groupon y LivingSocial, SlideShare y Urban Dictionary han utilizado Rails en su desarrollo.

Ventajas de Node.js

  • Extremadamente popular.
  • Alto rendimiento.
  • Asíncrono.
  • Muy escalable.
  • JavaScript front y backend.
  • Estructura de archivos flexible.
  • Npm y módulos.

Ahora que hemos visto Rails, vamos a empezar a ver Node.js. Empezaremos con las ventajas. Una gran ventaja de Node.js es su extrema popularidad. Es básicamente la nueva tecnología de vanguardia en el desarrollo web. Hay una gran demanda en el mercado. Es extremadamente popular para las startups. Hay una floreciente comunidad de código abierto en torno a Node y al framework Express. Hay muchos módulos bien desarrollados en npm y, en lo que respecta a la velocidad y el rendimiento, Node supera a Rails. En realidad, no tiene nada que envidiar a Rails. Se ejecuta en el motor JavaScript de Google, que es rapidísimo. Node se utiliza para construir aplicaciones web en tiempo real que casi se sienten como aplicaciones de escritorio.

Además, Node.js también es asíncrono. Esto significa que cuando un programa envía una solicitud al servidor, no tiene que esperar la respuesta. Puede continuar la ejecución. Node se ejecuta en un solo hilo a diferencia de otros lenguajes que envían la petición. Esperan hasta que esa petición se hace, luego envían la siguiente y así sucesivamente. Así que Node.js es también muy escalable y estar en un solo hilo juega un papel importante en eso. Node también funciona muy bien con bases de datos NoSQL como MongoDB, que es mucho más escalable que las bases de datos relacionales tradicionales como MySQL. Casi todas las grandes empresas sobre las que he leído han cambiado a Node.js, y han reportado al menos un aumento decente en la productividad.

Otra gran ventaja de Node es que utiliza JavaScript, que es ampliamente utilizado con muchas pilas web. Muchas veces, el lenguaje en el front-end es diferente del back-end, pero ese no es el caso cuando se utiliza Node.js. Estamos usando JavaScript en el front-end y en el back-end. Hay un montón de frameworks del lado del cliente que están dominando la industria – React, Angular, Vue.js. Así que eso es una gran ventaja para Node.js. Obviamente, JavaScript también funciona bien con las APIs JSON, que son muy populares.

Node.js, Express, o Happy.js, cualquiera de estos frameworks tienen una estructura de archivos realmente flexible. Te permiten construir tus aplicaciones como quieras. Puedes meter todo en un solo archivo JS de la aplicación. Si quieres tener una estructura MVC más tradicional, creo que hay aspectos buenos y malos en esto. Pero en su mayor parte, si sabes lo que estás haciendo y eres un buen programador, la flexibilidad es algo bueno. Al igual que las gemas de Ruby, Node también tiene su propio gestor de paquetes llamado npm, o gestor de paquetes de Node. La mayor diferencia entre npm y las gemas de Ruby es la forma en que se gestionan las dependencias. Con Ruby, las dependencias se instalan globalmente. Así que tienes que usar un bundler y tener que gestionarlas por tu cuenta. npm se encarga de todo eso para tus módulos. Se ponen en la carpeta de módulos de Node. Entonces esos módulos también pueden tener su propia carpeta de módulos Node con sus propias dependencias. Los módulos npm también parecen tener mejor documentación, al menos en mi experiencia.

Node.js Desventajas

  • Es una mierda para las tareas intensivas de la CPU.
  • Inconsistencia.
  • Tecnología más nueva.
  • El infierno de las devoluciones.
  • Demasiado modular.

Así que hemos visto los aspectos positivos y las ventajas de Node.js. Ahora veamos algunas desventajas. Por muy bueno que sea Node para muchas aplicaciones de estilo CRUD, es absolutamente una mierda para las aplicaciones que hacen un uso intensivo de la CPU. La razón de esto es que cada vez que hace algo que toma un tiempo como la operación de la CPU, pondrá en cola todas las solicitudes entrantes porque se ejecuta en un solo hilo. Algo como Apache, que tiene más hilos disponibles, repartirá ese tiempo de CPU entre ellos. Y sólo las operaciones IO son paralelas porque se ejecutan de forma asíncrona. Un ejemplo de una tarea intensiva de la CPU es algo como renderización 3d, codificación de vídeo, modelado científico, etc.

Otra queja sobre Node es que puede ser un poco inconsistente. Algunos sienten que la API sigue cambiando a intervalos frecuentes. A veces no es muy compatible con las versiones anteriores. No sólo eso, sino que la estructura de una aplicación Express, en general, es muy libre y flexible. A veces puede dar a los desarrolladores suficiente cuerda para ahorcarse.

Rails es muy estricto, por lo que es más difícil escribir mal código. Como Node es asíncrono vas a tener que lidiar con un montón de funciones de devolución de llamada y a menudo pueden burbujear y entrar en lo que se llama el infierno de las devoluciones de llamada. Hay soluciones para esto, como las utilidades asíncronas y el uso de promesas. Hay algunas cosas que puedes hacer para prevenir esto. Esto personalmente no me molesta, pero sé que algunos desarrolladores que no están acostumbrados a la programación asíncrona tienen un problema con un montón de callbacks.

Como puedes ver ambas opciones de backend tienen sus pros y sus contras, pero ambas son tecnologías fantásticas. Todo debe ser siempre evaluado caso por caso en lugar de decir simplemente que uno es mejor que el otro en todas las situaciones.

Articles

Deja una respuesta

Tu dirección de correo electrónico no será publicada.