10 razones por las que aprender Javascript

Todavía recuerdo cuando en 2003 daba mis primeros pasos en el mundo del desarrollo web. En aquel entonces Javascript para mí era un lenguaje incómodo que se usaba para poco más que validar formularios web. Era orientado a objetos pero sin clases ¡qué sacrilegio!, no había que compilar con lo que los errores de sintaxis saltaban en tiempo de ejecución y las herramientas de edición hacían poco más que colorear. No era el único lenguaje para programar en cliente, Internet Explorer, que era el navegador más usado, permitía el uso de VBScript además de Javascript. Todo esto iba a cambiar …

La web fue creciendo y surgieron tecnologías complementarias que requerían la instalación de plugins para saltarnos las muchas limitaciones que tenía HTML y los navegadores: los prehistóricos applets de Java; Flash de Macromedia Adobe con su lenguaje ActionScript y su monopolio en la reproducción de audio/vídeo; Silverlight de Microsoft …  llegaron y después de pasar unos años con nosotros se fueron, mucho tuvo que ver HTML5 que aumentó la cantidad y expresividad de las cosas que se podía hacer de forma nativa en nuestros navegadores, surgió CSS3 y nuevas especificaciones de Javascript. En este tiempo Internet Explorer ya había sido destronado por navegadores como Chrome, Firefox y Safari. Javascript era el único lenguaje de programación para la web, y la web lo era casi todo.

Finalmente resultó que ser un lenguaje dinámico, orientado a objetos y no a clases resultaba en algo muy potente, práctico y mucho más cómodo para gran cantidad de desarrolladores. Así que se propagó más allá de la web para todo tipo de usos y plataformas. Con ello surgieron multitud de herramientas que facilitan y mejoran la experiencia de programar.

Todo esto explica que a fecha en la que escribo este artículo, Javascript es de los lenguajes de programación más utilizados y populares. Está en la 6ª posición en el índice Tiobe y creciendo más rápido que sus competidores en popularidad: http://www.tiobe.com/tiobe-index/

Y no me enrollo más, ahí van 10 razones por las que aprender Javascript:

1. DESARROLLO FRONTEND
Como es bien sabido es el único lenguaje de programación soportado por todos los navegadores modernos (y no tan modernos). Tanto para hacer una página web sencilla como complicadas aplicaciones web, es imprescindible conocerlo de menos a más profundidad. Hoy en día se hacen aplicaciones web que en frontend tienen tanta funcionalidad o más que muchas aplicaciones de escritorio. Para ayudarnos a desarrollarlas y para no reinventar la rueda constantemente, han surgido centenares de frameworks entre los que a día de hoy reinan Angular/Angular2 de Google y React de Facebook.

2. DESARROLLO BACKEND O SERVIDOR
Tecnologías como NodeJS nos permiten llevar Javascript al servidor. Muy conveniente ya que además de aprovechar más nuestros conocimientos de Javascript en un lugar donde tradicionalmente cambiábamos de lenguaje, nos permite reutilizar librerías de código entre cliente y servidor, lo que implica minimizar la duplicidad de código y que nuestras aplicaciones sean más mantenibles. Esto es a lo que hoy en día llamamos arquitecturas isomórficas.

3. DESARROLLO DE VIDEOJUEGOS
HTML5 jubiló a Flash. Con el Canvas de HTML5 y con el uso de WebGL para aprovechar la aceleración gráfica de nuestras tarjetas, ya no hay excusas. Ahora los portales de juegos para navegadores ofrecen todo su repertorio en este estándar. Y es que si eres capaz de realizar un juego con HTML y Javascript, tu cantidad de jugadores potenciales será tanta como gente exista navegando en Internet desde cualquier dispositivo. Puedes hacer un juego desde cero usando sólo Javascript y HTML, por ejemplo yo estoy implementando uno: (clon de Doodle Jump juego y código fuente) para probar el Canvas de HTML5 y la última versión de Javascript. También puedes usar potentes librerías gráficas como pixi.js o incluso motores de videojuegos que te llevarán al siguiente nivel: phaser.io o easel.js.

4. BASES DE DATOS NO RELACIONES
Los años del Big Data nos han recordado que no todas las bases de datos son relacionales, y que las bases de datos no relacionales tienen muchas ventajas. Muchas de estas bases de datos no relacionales, como en el caso de MongoDB, se basan en almacenar e intercambiar la información mediante estructuras JSON que son formadas igual que los objetos en Javascript y por tanto son directamente asignables a estos. Esto es lo que se denomina baja impedencia y nos realiza la vida más fácil y bonita. Para aprovechar esta ventaja han surgido stacks de desarrollo que incorporan Javascript como lenguaje de servidor y MongoDB como base de datos: MEAN o MERN.

5. DESARROLLO PARA MÓVILES
Hoy en día las apps móviles se reparten con las aplicaciones web la mayor parte del pastel. Con Javascript podemos realizar aplicaciones móviles.

Conviente matizar que hay 2 tipos de aplicaciones móviles.
– Aplicaciones híbridas: Simplificando consiste en embeber un navegador web en una aplicación móvil y cargar contenido web (HTML + CSS + JAVASCRIPT) en ese navegador. Es una forma rápida y cómoda de crear una app para publicarla en las stores de Google o Apple, o instalarla directamente en un smartphone/tablet/etc. Para esto podemos utilizar frameworks y librerías como: PhoneGap, Apache Cordova, Ionic entre otras. La principal desventaja es que no tienen el poder ni rendimiento que las aplicaciones nativas y la mayor ventaja es que podremos reutilizar casi el 100% de nuestro código para publicar en las distintas plataformas móviles.

– Aplicaciones nativas: Son aquellas que se transforman en código nativo de la plataforma en la que vamos a ejecutarlas. Esto además de ofrecernos un mayor rendimiento y mejor experiencia de usuario permite acceder a algunos recursos del sistema en el que se ejecutan que no se pueden acceder desde las aplicaciones híbridas. Para desarrollar aplicaciones nativas para Android ya no hace falta saber C++ o JAVA y para IOS Objective-C o Swift. Existen frameworks como NativeScript o ReactNative para hacerlo en Javascript. Muy conveniente para desarrollar aplicaciones móviles sin tener que aprender otro stack de tecnologías, pero esta vez a cambio de ganar poder y rendimiento hemos perdido algo de reutilización, necesitaremos tener dos versiones de nuestro código una para IOS y otra para Android, por ejemplo.

6. DESARROLLO MULTIPLATAFORMA DE ESCRITORIO
Al igual que existen frameworks para realizar aplicaciones en Javascript para dispositivos móviles, existen frameworks para realizar aplicaciones de escritorio multiplataforma que puedan utilizarse en Windows, IOS, Linux …

Para mí el vencedor por goleadas es Electron. Creado para desarrollar el editor Atom y utilizado después en aplicaciones muy importantes como Visual Studio Code de Microsoft, o el famoso chat Slack o la aplicación de escritorio de WordPress.

7. TYPESCRIPT Y SUPERSETS DE JAVASCRIPT
Hay muchos lenguajes que compilan a código Javascript y que podremos utilizar si nos gustan más que programar directamente en Javascript:

Aquí os dejo una amplia lista: List of languages that compile to js.

Entre todos ellos, por ser creado por Google y Microsoft y sobre todo por ser recomendado para el desarrollo en Angular2 está ganando mucha popularidad Typescript. Gran parte de este éxito también se debe a que es un superconjunto de Javascript: cualquier código válido en Javascript es código válido en Typescript, “simplemente” lo que añade es el poder tipar variables y parámetros de forma que conseguimos chequeo de tipos en tiempo de desarrollo. Muy conveniente para hacernos la vida más fácil, eso sí, perdiendo algo de flexibilidad por el camino.

8. HERRAMIENTAS Y EXPERIENCIA DE DESARROLLO
Hoy en día hay muchos entornos de desarrollo y gran cantidad de herramientas para ayudarnos como desarrolladores. Por ejemplo con editores como Sublime, Visual Studio Code o Atom, podremos disfrutar de “code completion”, “debugging” y mucho más, en algunos de forma nativa y otros mediante la instalación de algún plugin.

javascript_javascript_intellisense

Herramientas como JSLint y JSHint fueron las precursoras, con ellas podemos analizar el código en busca de errores de sintaxis “errores de compilación” y warnings.

Integrar todo esto en nuestro IDE de desarrollo hará que olvidemos algunas de las ventajas en tiempo de desarrollo de utilizar lenguajes compilados y/o fuertemente tipados. Minimizaremos el tiempo buscando errores.

9. NPM: EL GESTOR DE PAQUETES CON MÁS LIBRERÍAS QUE EXISTE
El gestor de paquetes con más librerías que existe, alrededor de 300.000 según su página web. Librerías y código que podremos reutilizar para todo aquello que imaginemos. Algunas de cliente, algunas de servidor y otras para ambos. NPM además de alojar todas estas librerías permite que las definamos como dependencias de nuestra aplicación sin tener que incluirlas como parte del código. Descargándose e instalándose cuando se instale nuestro código.

Es raro encontrar proyectos actuales con Javascript que no lo utilicen.

10. MICROSERVICIOS
Las arquitecturas basadas en microservicios están demostrando su eficacia, que resuelven muchos problemas actuales y cada vez tienen más popularidad. Por supuesto una de las ventajas que tienen los microservicios es que puedes usar las tecnologías que quieras para desarrollarlos. Aunque parece que por su filosofía de agilidad y de ser ligeros, encaja más utilizar unos lenguajes y tecnologías que otros. En este caso por la sencillez y ligereza de desplegar un servicio en node.js exponiendo un API para comunicarse con otros servicios, Javascript obtiene muchos puntos para ser uno de los lenguajes más utilizados en este tipo de arquitecturas.

Os dejo uno de mis artículos preferidos para introduciros a los microservicios a quienes todavía no los conozcáis: https://blog.risingstack.com/why-you-should-start-using-microservices/


BONUS. IoT – Internet of Things

Parece ser que Javascript también será si no lo está siendo ya, el lenguaje de programación para “el internet de las cosas”. Al final Internet of Things no deja de ser una ampliación de lo que ya tenemos: máquinas publicando apis en la red, para ejecutar acciones y/o arrojar resultados, que en este caso serán consumidos por otras máquinas en lugar de por personas. La facilidad y ligereza para instalar node.js en una máquina, dotándola de un interfaz web de comunicación, facilitando el real time y unido a la gran comunidad de desarrolladores y cantidad de código disponible, hacen que de nuevo Javascript juegue un papel protagonista. Un ejemplo es el framework Cyclon.js y mi opinión es que lo mejor está por llegar.