Hace ya más de 30 años desde que Tim Berners-Lee inventó la world wide web, y no sería una subestimación decir que ha cambiado un poco del diseño original en este tiempo. El diseño original de internet tenía como objetivo facilitar y agilizar el proceso de publicación de trabajos académicos a los científicos, y consistía en una red global de documentos identificables y accesibles desde cualquier ordenador. Para ello Berners-Lee inventó tres tecnologías clave. HTTP, el protocolo que permite a dos ordenadores intercambiar hipertexto; HTML, el formato de hipertexto en el cual se escribían los documentos, y las URLs, que permitían identificar y solicitar de forma uniforme cualquier documento remoto desde cualquier ordenador. La clave está en que aquellas primeras páginas web eran páginas en el sentido más estricto, eran documentos que mayormente contenían información. El principal propósito de HTML era poder aunar en un documento texto con formato, imágenes y sobre todo enlaces a otros documentos.
La cosa cambia bastante cuando en 1995 Brendan Eich inventa JavaScript como parte de un proyecto de Netscape de añadir un lenguaje de programación a su navegador, y sobre todo con la burbuja de las punto com a finales de los 90 y principios de los 2000, momento en el que una ola de nuevas empresas se lanza a explotar las posibilidades de las páginas web como forma de negocio y de la que surgen Amazon, el buscador de Google o Netflix. JavaScript permite hacer que el documento sea interactivo. Responder a los controles del usuario y actualizar el HTML que se muestra en pantalla. Con el tiempo, también se han ido añadiendo más funciones que permiten a las páginas web enviar y recibir datos por internet, almacenar información en el ordenador local o reproducir vídeo y sonido, por poner unos pocos ejemplos. A partir de este momento, las páginas web paulatinamente se van convirtiendo en más interactivas, más parecidas a programas que a documentos.
Y llegamos a hoy en día, donde esa situación se ha llevado al extremo y las páginas web son programas en toda regla. Los lenguajes de programación en los que se desarrollan se han sofisticado, la producción de páginas web es el sector más grande y lucrativo de la producción de software e incluso existe tecnología para poder desarrollar programas de escritorio y aplicaciones de móvil con la misma tecnología con la que se hacen páginas web. Sin embargo, aunque el panorama ha cambiado totalmente, la base de la web sigue siendo la misma: ordenadores que comparten documentos mediante un protocolo de transferencia de hipertexto. Un diseño de 1989 para un problema y unos casos de uso totalmente distintos.
HTML es un lenguaje bastante conveniente cuando la proporción de información a formato está ampliamente dominada por la información. HTML permite fácilmente destacar una palabra con negrita, cambiar fuente y tamaño, enlazar otra página o insertar una imagen en un documento consistente principalmente de texto. Es decir, es útil cuando lo que se va a dibujar en la pantalla se parece mucho a la información que está siendo enviada. Cuando la proporción entre lógica de dibujado e información cambia, el formato se va volviendo menos y menos conveniente, y se va volviendo mejor idea el separar la lógica de dibujado de la información. La mayoría de páginas hoy en día tienen en realidad un número muy pequeño de páginas, mientras pueden tener terabytes de información. Pensemos en Twitter, por ejemplo. Twitter tiene una elaborada interfaz con la información del perfil, los últimos tuits de la persona, tendencias del momento… La disposición de la información es la misma independientemente del perfil que se esté visitando, del contenido de sus tuits y de lo que sea trending topic ahora mismo. Entrelazar la información de la página (el texto de los tuits, las fotos de perfil, los hashtags de moda del momento…) con su disposición espacial en la pantalla del usuario sería enormemente ineficiente tanto en términos de memoria transferida al descargar la página como en el coste de crear, almacenar y actualizar esa información en los servidores de la empresa. En su lugar, Twitter quiere hacer una distinción entre el programa que usa para dibujar la página en la pantalla del usuario y la información concreta que va a mostrar en un momento dado. Y eso es lo que hace. Cuando uno visita twitter.com, está descargando el código del programa que se comunica con el navegador para dibujar la página. Luego, ese programa usa la interfaz ReST del servidor de Twitter para descargar los datos necesarios del perfil a mostrar. Lo que el servidor devuelve es información pura, sin ningún formato. El programa entonces usa esta información para dibujarla en la pantalla, añadiendo el formato. Este diseño no es una particularidad de Twitter. La mayoría de páginas hoy en día funcionan así. YouTube, Spotify, Amazon, Netflix, Instagram… Lo hacen porque el diseño tiene muchas ventajas. Por un lado, es mucho más eficiente. No mezclar el código con los datos permite que, retomando el ejemplo anterior, si ahora el usuario quiere ver otro perfil de Twitter distinto, no hace falta volver a descargar el programa, sólo los datos del nuevo perfil. Toda la información de formato sigue siendo la misma. También es más fácil de implementar y permite separar el desarrollo de páginas web en equipos, donde un equipo se encarga de los datos y otro de dibujarlos. Por último, al no atar los datos a una forma específica de dibujarlos, permite desarrollar diferentes formas de visualizar la misma información, lo cual puede ser muy valioso también.
Esta separación entre programa y datos la estamos viendo también cada vez más en las herramientas de desarrollo de páginas web. Es destacable el ejemplo de Elm, un lenguaje de programación para páginas web que permite desarrollar interfaces sin saber un ápice de HTML gracias a su biblioteca elm-ui. También es llamativo el caso de WebAssembly, el conjunto de instrucciones de bajo nivel que emula las instrucciones de la CPU pero usa el navegador como plataforma y en el que, gracias a LLVM, se pueden escribir programas en multitud de lenguajes de programación.
Conforme las páginas web se van volviendo cada vez más programa y menos documento, el formato original en el que se escribían se va volviendo cada vez más anacrónico. Desarrollar interfaces en HTML es tedioso y propenso a errores, porque un lenguaje de marcado de hipertexto no es la herramienta idónea para escribir programas ni describir interfaces visuales complejas. Cada vez existen más herramientas que permiten desarrollar páginas web de una forma más similar al desarrollo de aplicaciones convencional. Hoy en día, la mayoría consisten en traductores que convierten los formatos en los que es más cómodo trabajar en los formatos que el navegador espera (por ejemplo un compilador que convierte TypeScript o Elm en JavaScript y HTML), pero empiezan a aparecer tecnologías como WebAssembly que sustituyen los formatos nativos existentes por otros más naturales para los problemas a los que se enfrenta el desarrollo web contemporáneo. Es cuestión de tiempo que a HTML le surja una alternativa más adecuada para lo que en 2022 es una página web y que se parece más bien poco a lo que en 1989 era una página web.