Capítulo 1 - JavaScript de hace 10 minutos
Batallitas del abuelo
En este capítulo hablaré de la historía de nuestra industria y como hemos llegado hasta donde estamos. Algunos lectores ya estareís familiarizados con esto y no necesitaís repasar nuestra historia. En tal caso... simplemente pasad al siguiente capítulo.
Voy a contarte una historia que narra el sacrificio y la lucha diaria de un grupo inmenso de personas por todo el mundo que creyeron, que una idea tan genial como interconectar ordenadores podría llegar a ser la mejor forma de compartir el conocimiento de la humanidad, convirtiendo Internet en una maravillosa y muy valiosa herramienta para la humanidad.
Para llegar hasta donde estamos hoy... mucha sangre de unicornio se ha derramado.
Y ahora nos pondremos serios para hablar de nuestra industria.
La historia de nuestra industria
Lecturas recomendadas
La Evolución de la web desarrollada por el equipo de Google Chrome es un portal que nos permite visualizar los hitos más importantes en la historia de la web desde 1991 hasta 2013.
1991 - 1993
Los primeros años de la web pasan en mucha calma. Se crea HTTP y HTML1 dando el pistoletazo de salida para que empezara el mundo web. El primer navegador web gráfico, Mosaic.
1994 - 1995
Surgen los tres navegadores principales de la época; Netscape Navigator, Opera e Internet Explorer. Se oficializa HTML2 y rápidamente es sustituido por HTML3.
Por primera vez se pueden usar cookies, pero aún estábamos muy lejos de tener que poner disclaimers, claro que por aquel entonces, internet era mucho más salvaje y menos regulado. En un intento firme para hacer la web más segura, y permitir cosas tan futuristas por aquel entonces como el comercio electrónico, se implementa la capa SSL y asi se crea el HTTPS, IMAPS, POP3S, SMTPS, FTPS, etc...
Corría el año 1995, cuando Brendan Eich creo Mocha, a petición de Netscape con la idea de tener algún lenguaje de programación disponible en la web (lado de cliente). Luego se renombraría como LiveScript, para finalmente ser JavaScript. Una estrategia de marketing dudosa, que sigue hoy en día sembrando dudas planteando que Java y JavaScript son cercanos o iguales, lo que es completamente falso.
Además a lo largo de ese año, comienza una escalada de problemas para todos los desarrolladores del mundo, conocido como "Browser Wars" que hasta hoy en día, seguimos sufriendo sus efectos.
Básicamente, cada navegador decide hacer las implementaciones de los distintos componentes que vendrán en los años venideros de manera diferente, lo que obligaba a los webmasters a tener que hacer su código compatible para todos los navegadores al mismo tiempo, replicando esfuerzos y entorpeciendo el trabajo diario. Si a esto le sumamos que por aquel entonces los navegadores no se autoactualizaban, llegamos así a una situación realmente compleja y atípica que podría haberse evitado... pero por aquel entonces Internet era tan solo un producto novedoso con el que no se sabía muy bien como se monetizaría nada.
Para intentar recordar un poco como era navegar entonces, algunos nostálgicos recordarán la usabilidad de la web en aquella época, con contadores de visitas, gifs animados, fotografías pixeladas y mezclas de color únicas. Era la infancia de la web, y aún se puede recordar en sitios como The world's Worst Website Ever.
Dejamos esta época de internet con 39,14 Millones de usuarios.
1996 - 1998
Arrancó esta época con un número inicial de usuarios de 100 millones, para terminar con 183,91 millones.
Internet Explorer introduce una nueva etiqueta html iframe, que permite la carga de una página web dentro de otra.
En esta época, todavía se maquetaban las paginas web dentro de tablas. Conceptos como hojas de estilos estaban muy lejos de ser viables. Van surgiendo tecnologías claves para suplir carencias básicas de interacción, interconectividad y visualización.
En esta época surgen tecnologías como los Applets de Java, Flash, etc...
XML se convierte en el formato de intercambio de datos más extendido.
En cuanto a HTML, sigue evolucionando, pasando rápidamente a la version 3.1 y 4, permitiendo la separación de la parte visual con CSS2. Por primera vez contenido y disposición gráfica de la información se separan.
Empieza la era dorada de Flash. Por el momento CSS solo es un chiste comparado con las capacidades de Flash.
Mosaic muere en su versión 2.1, Internet empieza a ser un mercado potencial. Se crean los primitivos sitios web de Google, Yahoo!, Altavista y Amazon.
1999 - 2007
Fueron tiempos locos... con el cambio de siglo, Internet se consolido creando la famosa "Burbuja puntocom" que empezó a cocinarse entorno a 1997, pero que termino de explotar en 2001-2002.
Sobrevivimos al efecto 2000, con 305,09 millones de usuarios.
Internet Explorer introduce ActiveX en la web. Se introducen los primero borradores de Ajax. En 2006 se introduce en los navegadores XMLHTTPRequest2 y empieza la navegación asíncrona, lo que permite crear webs realmente dinámicas, que no necesitan una gran renderización en el lado del servidor.
Esto hace posible la mejora en el desarrollo de las primeras plataformas de redes sociales (Web 2.0). Poco a poco en esta época, el peso de JavaScript va creciendo, ya que gran parte del procesamiento pronto se hará en el lado del cliente.
En la parte más visual se empieza a introducir de manera experimental conceptos como SVG y Canvas.
Aparecen en escena Facebook, Twitter, Linkedin, Youtube, etc... creando el embrión de lo que luego serían otras redes sociales.
Aparece JQuery, una librería para JavaScript que cambió para siempre la forma de interactuar entre JavaScript y HTML/CSS. En los años venideros, muchos maquetadores utilizarán esta librería como puerta de entrada a JavaScript.
La época dorada del PHP (pre-Wordpress), como motor de innovación para la web con proyectos como PHPBB, llegará a su fin.
Con la llegada de Wordpress (2003), Joomla (2005), etc... la web sufrirá en años sucesivos un cambio drástico.
Los proyectos se dividirán en aquellos que puedan ser realizados con un CMS (principalmente en PHP) y otros que necesitarán de un trabajo a medida.
El mítico Netscape se despide para siempre con la versión 9 y nace Firefox.
Termina 2007 con 1.500 millones de usuarios en Internet.
Web Archive
2008 en adelante...
Empieza una nueva era... lo nativo va poco a poco desterrando las soluciones arcaicas y obsoletas como Applets, Flash, ActiveX...
HTML5 y CSS3 dan el empujón que hacía falta para que la web despegara. Chrome nace justo aprovechando estos cambios de paradigma.
Todo aquello que podia hacerse con Flash, ahora podrá hacerse mejor y más rápido de manera nativa juntando las tres fuerzas más imponentes de la web, CSS3, HTML5 y JavaScript.
Se abre el desarrollo hacia una web mucho más semántica con filosofías responsive, y empieza la era del "Internet en la palma de la mano" con los smartphones.
La popularidad y capacidad de la nueva Internet ocasionarán un cambio de paradigma que trastocará todo. Poco a poco, las aplicaciones de escritorio serán sustituidas por aplicaciones web, ocasionando una migración masiva de desarrolladores hacia el trio de la web (HTML, CSS y JavaScript).
A lo largo de los años siguientes, serán muchas las empresas que decidan dar soporte a JavaScript en sus productos para asegurarse acceder a una masa crítica de programadores, este es el caso de los scripts para Photoshop, Unity, etc...
También veremos que la complejidad de conseguir desarrolladores de APPs Nativas (Java, Swift y Objetive-c) forzará a que lleguen los sistemas híbridos, donde JavaScript, HTML y CSS serán todo el conocimiento necesario para entrar en el mundo de los smartphones, gracias a soluciones como PhoneGap.
La fiebre por extender JavaScript, irá mucho más allá de lo imaginado y encontrará en Node.js la pieza que faltaba para encajar en ciertos entornos como las aplicaciones de escritorio, o la gestión de redes.
Todo ello, permite que JavaScript deje de ser un lenguaje exclusivo de la web para ir mucho más allá, adentrándose incluso en el desarrollo del Internet of Things (IoT) y la Robótica con librerías como Cyclon.js, J5, etc...
Internet de alta velocidad y la fibra óptica supusieron una gran mejora en las comunicaciones, lo que ayudó a crear una Internet mucho más rica en contenido. En 2011 ya se manejaban 27.483 PB/mes, frente a los 10.000 PB/mes de 2007. La logística y las telecomunicaciones jugarán un papel importantisimo en el futuro desarrollo de nuestro planeta.
Web Archive
El largo camino del Developer
Este esquemático mapa mental, puede ayudaros a visualizar lo que está ocurriendo hoy en día en la web, y comprender como los profesionales de la industria, hemos ido migrando de nombres y funciones hasta donde estamos ahora mismo, que no es definitivo y lógicamente seguirá evolucionando.
Una historia de evolución
Muy lejos quedan los tiempos en los que ser Webmaster era suficiente para gestionar todo lo que tenia que ver con la web, desde programación a gestión de los usuarios, pasando por el primitivo Marketing de la época.
La web fue evolucionando rápidamente a nivel de desarrollo, aquel webmaster multiusos, paso a dividirse en dos grandes y muy diferenciados roles:
Diseño
Encargado de hacer los diseños básicos con algún programa de la suit de Adobe o similar. En ocasiones también se encargaba de la parte de Flash, para crear animaciones y transiciones.
Programación
Realizaba todas las tareas de desarrollo: JavaScript, PHP, Bases de datos, formularios, hosting, etc... Las webs de entonces no eran muy complejas, gran parte de la lógica se hacía en el servidor y el verdadero reto era lograr los objetivos con la tecnología de la época.
Aquellos eran los viejos tiempos... era como construir los primeros aviones. Materiales como la tela y madera servían para construir todo el entramado del fuselaje, un motor potente, unos controles sencillos y ya estabas volando.
A medida que la web fue evolucionando, su complejidad también creció exponencialmente, y como consecuencia inmediata, la programación se dividió en dos grandes áreas.
Diseñador/Maquetador
Antes con el diseño era suficiente. Pero poco a poco, el diseñador va asumiendo competencias básicas, para descargar de trabajo meramente estático a los programadores, que se centrarían en hacer la parte menos visual.
Ahora el diseñador tomará la iniciativa y convertirá los diseños en HTML y CSS.
Front-End developer
Algunos desarrolladores, deciden que asumirán las funciones de interacción del lado del cliente (JavaScript) y dejando el servidor. En muchas ocasiones, el diseño quedará fuera de sus competencias.
A medida que JavaScript dejó de usarse solo para interpretación y empezó a ganar fuerza frente al renderizado total de datos en el servidor, se migrará de JQuery hacia JavaScript nativo y a las librerías MV* como Angular, Backbone, Ember...
Back-End developer
El desarrollo en el servidor también sufrirá muchos cambios. Poco a poco, se migrará de proyectos web que basan la mayor parte de su programación en el renderizado de HTML, CSS y JavaScript, desde el servidor a la creación de APIs, donde prima el aislamiento del procesamiento de la información.
En cuanto a lenguajes de programación, poco a poco se irá viendo que más y más sistemas y lenguajes se esforzarán por entrar en el mundo de internet con nuevas librerías y arquitecturas. Apache logra hacer de puente para muchos, pero a la larga surgirán alternativas.
Mientras tanto, muchas iniciativas asaltan la web con ideas innovadoras como desarrollo ágil, eXtreme Programming (XP).
El software libre acabó convirtiéndose en el standard dentro del sector gracias al mítico LAMP.
Las bases de datos también evolucionarán y tendremos que convivir con dos maneras de entender el almacenaje, SQL y NoSQL. Lo que supondrá una dificultad añadida para el desarrollo de nuevos proyectos.
Otras áreas como la inteligencia artificial y Big data irán poco a poco demandando su hueco, por lo que dentro del backend iremos viendo nuevas áreas de especialización.
Full Stack Developer
Surge una nueva clase de desarrolladores, que por avatares del destino no se encasillan en el back o en el front.
Y serán capaces de adentrarse en ambos mundos y suplir las necesidades de los equipos en estos dos frentes. Cada Full Stack Developer será diferente, cada uno será especialista en unas areas, y en otras pasará de largo.
Mantenerse al día en la industria es cada vez más difícil. En cuestión de unos pocos años pasamos de construir aquellos aviones básicos con tela y madera a desarrollar cohetes capaces de surcar una galaxia.
Nuestra industria se vio totalmente superada. El crecimiento de Internet no era ni de lejos acorde a la cantidad de profesiones capaces de suplir esta demanda. Esto creó un efecto llamada que desató la llegada de muchos nuevos desarrolladores, que no sienten esta profesión con la pasión de aquellos que empezamos a construir un Internet mejor, nosotros realmente creíamos en lo que hacíamos y como lo hacíamos.
La asimilación de programadores obsoletos de otras áreas y ajenos a la industria, condicionará mucho la manera de trabajar, especialmente con JavaScript.
Básicamente podría decirse que esta industria se divide entre artesanos y mercenarios.
Una realidad caótica.
A medida que esto crece, las barreras para entrar en la industria o cambiar de rol dentro de ella, aumentan.
Para hacernos una ligera idea de lo que necesitamos saber en las diversas áreas, os dejo este esquema.
Cosas que todos deberíamos saber
- Manejo de Git/Github.
- Entender como funciona HTTP y las APIs.
- Manejo básico de terminal/consola.
- Trabajar con FTP.
- Manejo de SSH.
¿Qué se espera de un Front-End Junior?
- Conocimiento bueno de HTML5.
- Conocimiento bueno de CSS3.
- Bases de testing.
- Llamadas AJAX.
- Trabajo con librerías como JQuery.
- Conocimientos básicos de alguna librería MV*.
¿Qué se espera de un Front-End Senior?
- Lo mismo que de un Junior, pero en mayor profundidad y con experiencia.
- Gestión de tareas Gulp, Grunt, etc...).
- Preprocesadores CSS.
- Trabajo con Flexbox.
- Dominio del desarrollo Responsive.
- Gestión de dependencias RequireJS, Webpack, Browsefy, etc..).
- Dominio/manejo fluido de un framework MV*.
- Conocimientos de Node.js.
- Conocimientos muy sólidos de JavaScript Patrones de diseño, ES6, etc..).
- Conocimientos avanzados sobre HTML5 APIs.
- Buenas prácticas (documentación, refactorización, etc...).
¿Qué se espera de un Back-End Junior?
- Conocimientos sólidos de programación (Algorítmia, lógica, etc...).
- Saber trabajar con bases de datos relacionales y/o no relacionales.
- Bases de una buena arquitectura (modularidad, microservicios, etc...).
- Bases de nuevas arquitecturas NoBackend, Serverless, WebSockets, etc...).
- Desarrollo de aplicaciones seguras.
- Conocimientos de protocolos como OAuth, HTTP (server side), etc..
- Al menos un lenguaje de programación con un buen nivel.
- Trabajar con fluidez con un motor de plantillas.
- Bases de HTML5 y CSS3.
¿Qué se espera de un Back-End Senior?
- Lo mismo que de un Junior, pero en mayor profundidad y con experiencia.
- Despliegue en Servidores y servicios en la nube.
- Al menos dos lenguajes de programación de Backend.
- Buen nivel de JavaScript.
- Bases de Node.js para la automatización Yeoman, Gulp, etc..).
- Bases de la Integración continua Jenkins, TravisCI, etc...).
- Experiencia con varias bases de datos diferentes.
- Gestión de cacheo Nginx, etc...).
- Creación de APIs.
- Integración con otras plataformas y servicios.
- Shell Scripting.
En el centro del huracán: JavaScript
Lecturas recomendadas
- The Deep Roots of Javascript Fatigue by Calvin French-Owen
- El estado del desarrollo Front-End en 2015 por Ashley Nolan
- How it feels to learn JavaScript in 2016 by Jose Aguinaga
- State of js
- How to avoid JavaScript fatigue and sleep well at night by Josh Mock
- The Magpie Developer
- The Sad State of Web Development
- A response to The Sad State of Web Development — Its not about Javascript really
- How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript
- Is left-pad Indicative of a Fragile JavaScript Ecosystem?
- Overcoming JavaScript Fatigue
- ¿Y si el software Open Source desapareciera?
Para los desarrolladores de JavaScript, todo ha sido complicado, ya que el crecimiento exponencial de las necesidades de todo Internet ha pasado por este lenguaje.
Al ser el único lenguaje que se puede ejecutar en el navegador, muchos desarrolladores han tenido que pasar por el aro y aprenderlo.
Otros muchos, han tenido que crear librerías y frameworks para intentar hacerlo más sencillo y ágil.
Estos y más factores, han hecho que lleguemos a un punto de no retorno que oficialmente se conoce como JavaScript Fatigue.
Durante estos años JavaScript se hace adulto de la mano de Ryan Dahl cuando se libera Nodejs.
Node.js supone un antes y un después en toda la industria. No solo para los desarrolladores de JavaScript, ya que Node.js no es únicamente un entorno para desarrollar servidores de internet clásicos (Http). Ya que su fuerte está en los nuevos paradigmas que maneja.
Cosas como la asincronía, la orientación a eventos y el paralelismo... lo convierten rápidamente en uno de los entornos de desarrollo más rápido.
Que fuera multiplataforma, se basará en el motor V8 de Google e incluyera un gestor de paquetes tan evolucionado como NPM, hacen de Node.js una herramienta ideal para hacer cosas tan diversas como aplicaciones de red, automatización de tareas, etc...
Y no tardaron mucho en llegar los #jsDramas cuando la comunidad de Nodejs decide separarse en dos, IO .JS y Nodejs.
Creando una brecha que muchos consideraron insalvable. Al final Node.js reabsorbe a IO.js y acepta todos los cambios y la evolución que se deseaba originalmente. Mas información...
A su vez, Node.js crea un peculiar efecto de absorción y fusionamiento de roles entre el frontEnd y backEnd, ya que ahora no existe una barrera de lenguaje real entre el back y el front. Solo es necesario aprender Node.js para entrar en el mundo del back.
Como consecuencia se crean nuevos developers de JavaScript, a los que cada vez más, se les exige conocer y manejarse con Node.js.
Revolución... ¡Revolución!
Lecturas recomendadas
A lo largo de estos años, muchas cosas han cambiado en el mundo del desarrollo del software.
Para empezar se crearon nuevas maneras de entender el entorno de desarrollo. Ya no solo basta con crear nuestro código y subirlo al servidor vía FTP sin más.
Ahora es importante seguir una filosofía de desarrollo más compleja, donde debemos usar un control de versiones como Git.
Nuestro entorno local ya no se conectará directamente al servidor de producción para subir los cambios en los proyectos, pasaremos primero por el entorno de testing, y una vez sepamos que todo funciona como debería, será subido a producción.
Las subidas a producción, deberán de ser frecuentes, ya no será necesario tener una release completa para hacer subidas a producción.
Entramos en la era del desarrollo ágil, la programación extrema y la computación en la nube. El tener servidores físicos en los sótanos de la empresa, se eliminará a favor de sistemas como Google Cloud, Amazon Web Services, Heroku u otros proveedores.
Todo será mucho más modular y escalable, todo estará mucho más interconectado, el login social cambiará la manera de autentificarnos.
Ya no reinventaremos la rueda tan a menudo y dependeremos mucho más de APIs y sistemas de terceros.
El software libre dejó de sonar a cosa rara.
La mayor parte de los servidores de internet montarán distribuciones Linux. La colaboración entre desarrolladores de manera altruista bajo el sistema del software libre, creará algunos de los lenguajes, librerías y sistemas más sólidos.
Esta idea de libertad, se extiende como la pólvora y da pie a extender estas filosofías a otras áreas como a la cultura con licencias Creative Commons o al mundo del hardware con el Hardware libre
Al tener un entorno libre del que nutrirse muchos desarrolladores empiezan a innovar. Rápidamente la comunidad les sigue, se van constituyendo nuevos ciclos y formatos de innovación.
Algunas empresas, poco a poco, verán este valor y migrarán de un modelo más tradicional de software privativo a uno más abierto y libre.
Cambiarán muchas cosas, XML será destronado y JSON será el nuevo rey. Se idearán nuevas maneras de gestionar el tiempo real como WebSockets.
Surgirán iniciativas con ideas tan potentes como Nobackend, que plantearán nuevos paradigmas, pero sobretodo la innovación y la creatividad empujarán sobre manera -como nunca antes- el mundo del software.
Precisamente la innovación pasará a formar parte del ADN de nuevos tipos de empresas como las Startups. El MVP y el prototipado serán un concepto mainstream al igual que la metodología Lean Startup.