Ya ha pasado algo más de una década desde aquel abril en el que una carta de Steve Jobs anunciaba la negativa de incluir Flash en la plataforma iOS y que desembocaría en el declive de Flash, una plataforma que para muchos era por aquel entonces la más avanzada y versátil en el contexto del desarrollo web.
No es mi intención revivir en este artículo las eternas discusiones sobre las bondades y problemas que nos presentaba esa tecnología por aquel entonces. Ya sabes… un gran poder conlleva una gran responsabilidad. Nada nuevo bajo el sol.
Lo que sí pretendo analizar y poner en perspectiva es el cambio que ha supuesto el hecho de que los principales actores del ecosistema web decidiesen cambiar el rumbo hacia otras tecnologías. Un cambio que, bajo mi punto de vista, se sustentaba sobre un argumentario que poco tenía que ver con lo que realmente motivaba esas decisiones.
Volviendo al tema, centrémonos en analizar brevemente el impacto que ese cambio ha supuesto para todos los profesionales del desarrollo web, a muchos y diferentes niveles entre los que se encuentran: tecnologías y lenguajes, nuevas API en navegadores, filosofías, estrategias y paradigmas de desarrollo, frameworks y librerías, editores de código, herramientas y servicios de publicación en línea, automatización, etc.
La primera consecuencia, y más obvia, de todas las que supone un cambio como el que se estaba iniciando por aquel entonces, era que la alternativa elegida tenía que tomar el relevo intentando que, en ese proceso, no se diera un paso atrás. La alternativa elegida fueron los estándares web y el tiempo ha ido demostrando que el camino no ha sido tan sencillo como nos quisieron vender.
El cambio fue grande y tanto si lo sufriste como si lo disfrutaste, o como si no lo experimentaste, porque llevas menos tiempo en esto…, es bueno no perder de vista la historia que nos ha llevado hasta donde nos encontramos hoy.
¿La cosa se ha puesto interesante? ¡Pues empecemos!
HTML5, CSS3, Canvas, WebGL, SVG…
Los estándares web fueron elegidos como alternativa, pero la realidad es que había mucho trabajo aún por hacer en muchas áreas para permitir mantener el nivel de las experiencias en línea, a las que los usuarios ya estaban acostumbrados.
Los que ya tenemos nuestros años y vivimos aquel cambio, recordaremos sin duda que cosas tan «triviales» hoy en día como centrar un elemento en pantalla no lo eran tanto en 2010, ya que el Flexible Box Layout que hoy nos parece incluso «antiguo», empezó a implementarse en los navegadores en torno a 2012.
Era necesaria una mejora importante en las especificaciones y capacidades que conformaban la base de este nuevo camino y así hemos ido viviendo la aparición de HTML5 y CSS3: el primero modernizando y mejorando las opciones de etiquetado semántico y el segundo dando cobertura a un sinfín de necesidades visuales que eran complejas o incluso imposibles de implementar sin hacer uso de JavaScript.
Hablando de HTML, nos tenemos que referir a Canvas para el trabajo con gráficos desde JavaScript, la inclusión de elementos audio y video para el trabajo con estos formatos sin necesidad de plugins de terceros, etiquetas picture y source para el trabajo con imágenes en multidispositivo y la API WebGL para el trabajo con contenido 3D mediante scripting son algunas de las carencias «directas» que se han tenido que ir superando para no ir atrás en el tiempo.
Por otro lado, CSS3 supuso un punto de inflexión en la capacidad de los navegadores para abordar determinados requerimientos, con un cambio de paradigma en la especificación al basarse en módulos independientes tales como el control del modelo de caja, tipografías variables, gestión avanzada de fondos y bordes, efectos de texto, transformaciones 2D y 3D, animaciones y layouts avanzados con media queries, columnas múltiples, flexbox y, más recientemente, funcionalidades tan importantes como grid, variables, mejoras en selectores (has, is y anidamiento), container queries, cascade layers, multitud de nuevas unidades, soporte a nuevos sistemas de color…
Esta mejora en los lenguajes ha generado un patrón al que Eric Meyer (uno de los referentes mundiales en cuanto a estándares web se refiere) denominó en 2017 «La complejidad decreciente», y aunque él aplicó el concepto a CSS, creo que se puede trasladar también a las otras dos patas de los estándares que rigen hoy la web: HTML y JavaScript.
Su intención era trasladar que la incorporación de las capacidades de los lenguajes para permitir simplificar tareas que antes no eran siquiera posibles implica un crecimiento, que no necesariamente tiene por qué ser sinónimo de complejidad.
Del tuit original quedó grabado en mi retina la imagen tan contundente donde se podía apreciar la evolución de CSS en los últimos tiempos. En ella se veía claramente que la última edición de su libro que por aquel entonces publicaba CSS The Definitive Guide, tenía la misma extensión que las dos ediciones anteriores juntas.
Lo mismo ha ocurrido con SVG. Algo aparentemente tan simple como un formato de archivo de imagen del que se pueden encontrar libros de más de 300 páginas dedicados en exclusiva a él, o incluso libros sobre técnicas específicas para su uso de más de 200 páginas.
JavaScript
JavaScript no solamente ha tenido que acompañar esas nuevas funcionalidades (como Canvas, WebGL, audio, video, etc.), sino mejorar como lenguaje y simplificar muchas tareas.
El lenguaje apenas había evolucionado desde 1999, pero se produjo un punto de inflexión con la llegada de ECMAScript 6 (también conocido como ES6 o ECMAScript 2015 por ser publicado en junio de ese año), que supuso una gran actualización incluyendo gran cantidad de funcionalidades esperadas en un ECMAScript 4 que nunca vio la luz.
Esta versión, además de dar un paso de gigante para mejorar el trabajo con el lenguaje, también supuso una nueva dinámica de trabajo en el estándar, con versiones periódicas anuales a través de las cuales se introducen continuamente mejoras en el lenguaje, algo totalmente necesario si se quiere mantener el pulso con los avances tecnológicos actuales y demandas de los usuarios (dispositivos, hardware, software, sensores, capacidades…).
No podemos entrar en detalle de todo lo que ha dado de sí JavaScript en estos años, pero simplemente consultando la lista de nuevas APIs soportadas nos podemos hacer una idea de la envergadura del cambio: Fetch, Web Components, Web Workers, Storage, File, Push, Clipboard, History, Keyboard, Gamepad, Geolocation, Canvas, WebGL, WebRTC, GraphQL…
Y llegados a este punto, debo hablar también de TypeScript, un lenguaje sacado a la luz por Microsoft en 2012, tipado, transpilado a JavaScript y que ha adquirido una notoriedad más que evidente en el desarrollo frontend, ofreciendo algunas ventajas muy interesantes para según qué tipo de proyectos y siendo adoptado por la casi totalidad de los principales frameworks actuales.
Casi nada.
Y eso que no he mencionado que en 2009 node.js irrumpió en nuestro mundo para cambiarlo por completo, corriendo JavaScript fuera del navegador (principalmente en el servidor) gracias a las posibilidades que ofreció el motor de JavaScript V8 que supuso otro punto de inflexión a muchos niveles.
Navegadores
Todo lo que hemos visto no puede bajar a la tierra si los navegadores no dan el soporte necesario, y además haciéndolo de la forma más consistente y unificada posible.
A lo largo de mi trayectoria me han preguntado en muchas ocasiones dónde creía que residía el éxito de tecnologías como Flash, o incluso librerías como jQuery. Yo siempre vi clara la respuesta. Todas ellas nacieron con el objetivo de solucionar uno de los grandes problemas que existían en el desarrollo web: la inconsistencia de los navegadores, tanto con carencias para soportar determinados contenidos como con las diferencias que generaban a la hora de implementar dicho soporte.
Cuando hablo de soporte no solamente quiero hacer alusión a que los navegadores sean capaces de mostrar esas mejoras, sino que aporten herramientas que permitan una mejor experiencia en el desarrollo con estas. En mi opinión, algo totalmente necesario para abordar las necesidades y nivel de profesionalización actuales.
Por fortuna, las herramientas para desarrolladores que los principales navegadores (Chrome, Safari y Firefox) han ido incorporando y mejorando, han sido claves para poder abordar la actual complejidad y profesionalización existente en el desarrollo web.
En este sentido, creo que nos encontramos en una de las mejores épocas del desarrollo web, aunque no exentos de algunas inconsistencias y carencias de soporte que difícilmente se podrían solucionar por completo mientras los navegadores dependan de empresas (en muchos casos muy poderosas) con sus propios intereses y hojas de ruta.
Sobre filosofías, estrategias y paradigmas de desarrollo
He de reconocer que me ha costado poner un encabezado a este apartado, porque en él pretendo incluir aspectos no tan tangibles como pueden ser los vistos hasta ahora.
El mundo ha cambiado, lo sigue haciendo muy rápidamente y la tecnología ha sido uno de los principales detonantes de esos cambios… Por si fuera poco, internet es uno de los protagonistas donde todo esto está sucediendo, y eso, como profesionales que trabajamos en y para ese medio, nos impacta de lleno.
Hemos pasado de diseñar y desarrollar para una resolución casi única a ser prácticamente imposible elaborar un listado de las resoluciones donde nuestros proyectos cobrarán vida. De disponer de una conexión generalmente lenta, a enfrentarnos a todo tipo de conexiones. De trabajar con un servidor, a combinar nuestro contenido desde multitud de servicios especializados, como por ejemplo CDNs. De mostrar contenido prácticamente estático, a dar información en tiempo real con notificaciones, consulta constante de datos, etc.
Todo esto nos ha llevado a replantearnos multitud de aspectos que antes eran más sencillos por naturaleza, y ha requerido poner sobre la mesa nuevas filosofías de desarrollo, arquitecturas y paradigmas como el archiconocido Responsive Web Design en 2010, de Ethan Marcotte (renegando del término responsivo como traducción, ya que es un golpe bajo a la RAE), Mobile First en 2009 del genial Luke Wroblewski que posteriormente se convertiría en un libro, ITCSS en 2016 de Harry Roberts (muy alineado con las nuevas cascade layers de CSS) y una gran multitud de estrategias de desarrollo como: Single Page Applications (SPAs), Server Side Rendering (SSR), Static Sites Generators (SSGs), Progressive Web Applications (PWAs), arquitectura Jamstack, etc.
Un sinfín de posibilidades (no necesariamente excluyentes) a la hora de abordar nuestros proyectos, con sus pros y sus contras, pero que nos han traído de la mano una multitud de frameworks de desarrollo como los omnipresentes: Angular, React y Vue.
Herramientas y servicios
Y no podíamos dejar de hablar de las herramientas, más allá de los navegadores de los que ya hemos dicho que son pieza clave en este apartado.
Aquí tenemos un monstruo de múltiples cabezas cuyo crecimiento y avance ha cambiado en varias ocasiones la forma en la que desarrollamos nuestros proyectos, porque no hablamos solamente de editores de código (posiblemente liderados hoy por Visual Studio Code), sino que hay que abarcar multitud de herramientas que son y han sido claves en este camino (muchas de ellas en torno al ecosistema creado por node.js):
- Plataformas como Github, GitLab, Bitbucket para el desarrollo colaborativo y versionado de código.
- Package managers como npm o yarn.
- Preprocesadores CSS como Sass y LESS o herramientas como PostCSS.
- Linters, especialmente para JS como son JSLint, ESLint o JSHint.
- Task runners como Grunt y Gulp.
- Build systems como WebPack, ESbuild, Vite…
- Herramientas DevOps y de despliegue continuo con plataformas como Docker, Kubernetes y servicios en la nube como AWS de Amazon, Azure o Google Cloud.
- Servicios para proyectos Jamstack que simplifican algunas tareas en el desarrollo y publicación a niveles asombrosos, como son el caso de Netlify y Vercel.
- Plataformas completas específicas para diferentes tipos de proyectos como Shopify, Squarespace…
Y aún me quedarían muchos frentes por abordar, como, por ejemplo, todas las herramientas de optimización, nuevos protocolos de compresión o la irrupción de la IA en muchas de estas herramientas para ir un paso más allá, como es el caso del asistente Copilot para la escritura de código o la locura con la IA generativa en el campo de la creación de contenido.
¿Y ahora qué?
En mi caso personal, las sensaciones que experimento cuando hago retrospectiva de todo lo que está sucediendo en el desarrollo web son una mezcla de asombro, emoción y congoja.
Asombro por la velocidad a la que todo se está sucediendo. Emoción, por las nuevas posibilidades que se abren. Y congoja porque no puedo negar que implica, al menos en mi caso, un factor de angustia y fatiga.
Por suerte, soy de los que piensan que la clave del éxito no se encuentra en la tecnología ni en las herramientas (aunque siempre he defendido que sí son muy importantes y tienen un impacto evidente en nuestro trabajo), sino en las personas, en las ideas y en la fuerza de los mensajes que somos capaces de dirigir a los fundamentos que mueven al ser humano (donde la evolución en el conocimiento y estudio de la experiencia de usuario ha sido otro gran paso en estos últimos años).
Y es que solamente tengo que mirar a mi alrededor para comprobar que la inmensa mayoría de aquellos talentosos creativos, diseñadores y desarrolladores que triunfaban con Flash siguen triunfando (e incluso más) tras sobrevivir a este huracán en el que se ha convertido nuestra profesión.
Algo tendrá que significar.
Referencias / Enlaces relacionados
https://en.wikipedia.org/wiki/Thoughts_on_Flash
https://caniuse.com/?search=flex
https://meyerweb.com/eric/thoughts/2017/11/14/declining-complexity-in-css/
https://medium.com/codeburst/declining-complexity-in-css-ca65c4d606e4
https://www.oreilly.com/library/view/css-the-definitive/9781098117603/
https://en.wikipedia.org/wiki/ECMAScript_version_history
https://developer.mozilla.org/en-US/docs/Web/API
https://developer.chrome.com/docs/devtools?hl=es-419
https://developer.apple.com/safari/tools/
https://alistapart.com/article/responsive-web-design/
https://www.lukew.com/ff/entry.asp?933
https://www.lukew.com/resources/mobile_first.asp
https://csswizardry.com/2018/11/itcss-and-skillshare/
https://es.wikipedia.org/wiki/Single-page_application
https://en.wikipedia.org/wiki/Server-side_scripting#Server-side_rendering
https://en.wikipedia.org/wiki/Static_site_generator
https://en.wikipedia.org/wiki/Jamstack
Cita recomendada: GONZÁLEZ SANCHO, Juan Marcos. Regreso al futuro. Mosaic [en línea], diciembre 2024, no. 202. ISSN: 1696-3296. DOI: https://doi.org/10.7238/m.n202.2408
Deja un comentario