¿Porqué alguien usaría JavaScript para el backend?

Héctor BlisS
FixterGeek
Published in
7 min readJul 18, 2018

Introducción | Node.js

En el mundo del programador tocar estos temas ya casi es tabú, o motivo de persecución, últimamente me he topado con un montón de gente (que cabe mencionar respeto profundamente) que tiene un gran problema con que opines diferente, y hablando específicamente de que tecnología usas para desarrollar tus apps, cuando usas algo que ellos no, u opinas diferente sobre cierta tecnología, se ponen como religiosos rabiosos por convencerte de que el señor Python vino al mundo a salvarte, pero calma, este post no es un “riot” en contra de la religion o de los “desarrolladores pro” que usan lenguajes “para el backend”, o que son amantes de Python (a mi me fascina Python, fue el primer lenguaje moderno que disfrute), no no. Tan solo es un post para dar un par de razones de porque es buena idea utilizar JavaScript en tu servidor (entiéndase para un servidor web), siempre he sido una persona que busca diferentes puntos de vista y que gusta de forjar su propia opinion, así que el experimentar es parte de mi día a día, y experimentar en el backend no es una excepción, así que ¿listos? aquí vamos.

Nodejs joke: “Why the javascript developer is so sad? -Because he didn’t node how to express himself”…

Antes de empezar a contar quiero decir que para usar JavaScript en el servidor es necesario NodeJs, también hay que decir que Nodejs no es un lenguaje de programación tan solo un “entorno de software” que ejecuta JavaScript, básicamente es el motor V8 mezclado con ciertas librerías que permiten la entrada y salida de datos I/O, stream, soporte para el sistema de archivos así como las peticiones HTTP. De esta forma podemos usar JavaScript fuera del navegador para ejecutar tareas del backend (Gracias Ryan Dahl). Así que sin más comencemos a enlistar algunas razones no solo técnicas si no también razones de de inteligencia de negocios, si eres developer en una startup o quieres saber a que perfil de developer contratar.

1. The Event loop

Pff ¿porqué escogí el event loop cómo número 1?, no es un tema que sea fácil de explicar pero lo intentaré; Node.js no utiliza “threads” cómo los lenguajes síncronos, e incluso sistemas operativos, qué es esto?, Un “thread” o hilo es una ejecución de instrucciones que se manejan de forma independiente, Node.js utiliza el Event Loop, message dispatcher, message loop, message pump, o run loop es un constructor que espera y despacha eventos, mensajes o tareas. Node.js (JavaScript en general) es single-threaded lo cual significa que no existen multiples hilos, si no solo 1 proceso un solo flujo que hace uso de un stack. Ggracias a la naturaleza asíncrona de javascript. ¿ajá, y luego?, en palabras simples:

El Event Loop es non-blocking. Esto se refiere a que no debes esperar por procesos lentos o tareas que tomen mucho tiempo para comenzar a procesar otras, podemos simplemente seguir apilando tareas en el stack que se resolverán de manera asíncrona.

aún más simple: Con otros lenguajes una tarea muy lenta o que toma mucho tiempo dejaría colgado tu servidor sin dar una respuesta mientras que con Node.js no es así, existen herramientas que les permiten a los lenguajes síncronos emular la asíncronicidad, algo que JavaScript lleva en el adn(e sparte de su anturaleza).

Si, ya sé, no es algo fácil de entender pero aquí hay un video bien chingón si te interesa conocer más sobre el Event Loop: Philip Roberts: What the heck is the event loop anyway?

Trhead
Event Loop

2. Peticiones

Siguiendo por el mismo camino de la velocidad y las respuestas, tengo que mencionar las peticiones tanto de HTTP como de I/O, Node.js es inmensamente rápido (algo que mencionaré más adelante) no le cuesta mucho trabajo procesar estas peticiones por lo cual una sola instancia puede procesar una inmensa cantidad de peticiones con un hardware muy simple, lo cual te va ahorrar mucha lana.

3. Mismo lenguaje en el front y en el back

Sí, esto es lo más dicho y perdería el tiempo intentando convencerte de cuanto tiempo te ahorra usar 1 solo lenguaje, pero te contaré que durante más de 2 años mi equipo y yo estuvimos desarrollando en Django (framewokr web de Python) casí todo lo que vendiamos y creabamos aún cuando eran pequeñas apps, por el simple hecho de que eramos “Pythonistas” y era lo más seguro, sin tomar en cuenta a veces a los equipos que se encargarían de mantener la solucion que nosotros desarrollabamos, y les imponiamos una curva de aprendizaje enorme para entender nuestro sistema y ni hablar de que era virtualmente imposible agregar elementos fullstack al equipo con nuestro stack, Cuando un desarrollador incluso jr, conoce a fondo cuando menos 1 solo lenguaje es una enorme ventaja cuando se trata de mantenimiento y productividad en el desarrollo.

4. Reciclado de Código

Quiero seguir por la misma linea de utilizar el mismo lenguaje en los dos lados (backend, frontend) pero quiero hacer de esto un punto en si mismo y es que una vez más tengo que citar mi experiencia personal no solo desarrollando si no, trabajando con diferentes grupos de desarrolladores que, a veces son multidisciplinarios, me refiero a que conocen lenguajes diferentes, lo cual viene a ser maravilloso cuando se busca experimentar o hacer A/B testing pero no es tan productivo cuando tienes una misma linea de negocio, una misma linea de producción de productos similares (webApps por ejemplo) donde necesitas la máxima velocidad y el reciclado de cosas que en su momento te tomaron muchísimo tiempo y ahora puedes solo reutilizar, bueno, JavaScript de nuevo nos va a permitir esto de manera más sencilla no solo entre código back-front si no, entre miembros del equipo y puedo mencionar también Typescript aquí si estas muy casad@ con la estandarización y la administración del código lo cual lo hará aún más fácil.

5. Real Time

Ahora sabemos que Node.js es ligero y super rápido convirtiéndolo en un increíble servidor web esto nos permite intentar funciones exaustivas que podrían ser prácticamente imposibles para otros lenguajes, como las conexiones multiplayer para aplicaciones de colaboración o incluso videojuegos, sin mencionar que Node.js tiene librerias muy maduras para manejar este tipo de conexiones (WebSockets), herramientas incluso que han inspirado startups completas y que se han convertido en parte del set principal de Google (hablando de la base de datos en tiempo real de Firebase), herramientas como Socket.io no puedo decir que es el único que las tiene ya que también existen librerías que permiten manejar WebSockets para comunicaciones en tiempo real en Python y otros, pero si puedo decir que las de Node.js son muy fáciles de usar y no necesitan de configuraciones exaustivas.

6. Node package manager (NPM)

Definitivamente, este punto no podría faltar en cualquier post que enliste los beneficios de usar Node.js, y es que con sus más de 700,000 librerías se convierte en el manejador de paquetes más grande a comparación de los de otros lenguajes.

Piénsenlo por un momento, cuando hablamos de no reinventar la rueda y estamos en un entorno de desarrollo de Node.js, en realidad estamos hablando de no reinventar ¡CUALQUIER MALDITA COSA! claro, reinventar la rueda es genial para autoenseñarte pero no para producción, y si eres alguien que necesita un equipo de desarrollo productivo, es mejor que eches mano de NPM, y por si fuera poco, ahora también podemos usar Yarn, ¿porqué? además de porque tiene acceso a los mismos paquetes de npm + bower y otros, es más rápido y ¡hey su mascota es un gattito!

Conclusion

No puedo ser definitivo, lo ultimo que quiero es convertirme en un religioso de Node.js, o JavaScript y comenzar maldecir a quien no use esta herramienta, solo me tomé el tiempo de explicar porque YO usaría esta tecnología con mi equipo de desarrollo y personalmente, no significa que esto sea definitivo, los próximos 10 años nos pueden sorprender, es como cuando aprender Flash era la mejor día hace unos pocos años…

Hay muchas herramientas que emergen todos los días y otras que toman mucha fuerza, como Go o Elixir, que son una excelente muestra de que Node.js puede ser vencido en performance y velocidad pero que les toma tiempo crecer por el numero de su comunidad, ya el tiempo nos mostrará si JavaScript (y su comunidad quienes son los que lo hacen fuerte creando herramientas tan chingonas como Node.js) dominará el mundo o será desplazado por algún lenguaje más joven y poderoso, mientras tanto sigan experimentando, no escuchen a los haters, no se limiten a un solo lenguaje y recuerden lo que digo:

“Es una muy buena idea aprender JavaScript Fullstack de aquí a los próximos 10 años”

-BlisS

--

--

Héctor BlisS
FixterGeek

Soy de la generación que jugó con Atari, se conecto a internet con dial-up mientras mi mamá me regañaba por usar la linea, creo que soy millennial. =P