JavaScript & Node.js

  • Trabajo con JavaScript desde últimos 4 años y con Node.js los últimos 2
  • Coordinador de los cursos Fullstack y Node.js en Coderhouse
  • Organizador de NodeSchoolBA y BANode.js
  • Veo muchas series (Daredevil alguien?)

Quién soy

En el principio de los tiempos, Tim creó HTML...

  • HTML fué inventado por Tim Berners-Lee en 1991
  • En 1995 se incorporó el concepto de CSS
  • En 1995 Brendan Eich inventa JavaScript

Browser wars: Episode I

Browser wars: Episode II

Una nueva era

HTML5, CSS3 y Node.js

  • El primer draft de CSS3 se presentó en el 2001
  • El primer draft de HTML5 se presentó en el 2008
  • La primera versión de Node.js se crea en el 2009

JavaScript: características

  • Tipado dinámico
  • Herencia prototipada
  • Funciones de órden superior

Asincronismo

alert("esto es bloqueante");

Demos

JavaScript & Paradigmas

Imperativo

Funcional

Orientado a objetos

¿Por que Programación Funcional?

Escalabilidad

Semántica sobre explicitud

Menos código

Inmutabilidad

Abstracción

Menos foco en la data

Algunos conceptos de Programacion Funcional

Aplicación parcial de funciones

Scope léxico

Funciones de órden superior

Composición de funciones

Demo

Dado una cadena de caracteres, buscar las palabras que contengan la letra recibida por parámetro

Paradigma imperativo

function contarPalabras(str, letra) {
    var palabras = str.split(' ');
    var resultado = [];
    for (var i = 0; i < palabras.length; i++) {
        for (var j = 0; j < palabras[i].length; j++) {
            if (palabras[i][j] === letra) {
                resultado.push(palabras[i]);
                break;
            }
        }
    }
    return resultado;
}

Qué NO es Node.js

No es:

  • Un lenguaje de programación
  • Un servidor
  • Un framework
  • Una aplicación para hacer páginas web
  • Una libreria

Node.js

"Node.js es una plataforma construida sobre el JavaScript runtime de Chrome. Node.js usa un modelo dirigido por eventos basado en I/O."

https://nodejs.org

Simplificando un poco...

Node.js provee una forma de ejecutar código JavaScript fuera del browser.

Motivaciones

Motivaciones

  • Red
  • Sistema de archivos
  • Sistema Operativo
  • Bases de datos

Módulos internos

fs

http

stream

util

child process

os

crypto

y muchos otros...

net

Características

  • Es un proyecto Open Source
  • Cross-plataforma
  • Generalmente, debido a su naturaleza asincrónica, los servidores web construidos con Node.js terminan logrando mejor performance contra otras tecnologías (PHP + Apache, .Net + IIS, etc).
  • Escalable a requerimientos de grandes cantidades de tráfico

Ecosistema

  • Es impulsado por la comunidad Open Source
  • Utiliza npm cómo manejador de paquetes, siendo npm el manejador de paquetes más grande del mundo.
  • Adopta la filosofía Unix:

"Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface."

Quienes lo usan

Disclaimers

  • No es un reemplazo de la tecnología X
  • No es la solución óptima para todos los problemas (procesamiento de imágenes o video, por ejemplo)
  • Si bien hay buena cantidad de recusos sobre JavaScript en español, no es tan así con recursos sobre Node.js

Otros usos

Ok. ¿Cómo aprendo?

Ok. ¿Cómo aprendo?

Participá

"Always bet on javascript"

¿Preguntas?

Mirá esta charla en 

bit.ly/js-y-node

@a0viedo

Made with Slides.com