domingo, 20 de noviembre de 2011

RIP Javascript


Si haces aplicaciones web, es probable que programes en Java, en .Net, en PHP, perl o cualquiera de los otros muchos lenguajes de programación disponibles, pero en la capa vista, en el interfaz, sólo puedes usar una cosa: Javascript.
Casi me atrevería a decir que hoy, practicamente todos los programadores saben más o menos de Javascript. Salvando las cuatro cositas hechas en flash, el resto de interfaces web usan Javascript intensivamente. Vaya, eso una responsabilidad muy grande a los hombros del Javascript... ¿está preparado para ello?
Pues mi opinión es que no. No se diseñó con esa idea en mente, pero con la llegada del ajax inició una época dorada que se encuentra en su pleno apogeo hoy día. Sin embargo son cada vez más la voces que nos alertan sobre el peligro del Javascript.

Os las voy a resumir con una analogía. El javascript es como el petróleo, es insostenible. Lo del petróleo lo tenemos claro. Todos sabemos que cada vez más gente va a poder comprar un coche, pero si seguimos haciendo motores que utilizan combustibles fósiles, al margen de que hayamos rebasado o no el pico petróleo, vamos a morir todos envenenados por los excesos de contaminación. El mundo empezaría a agonizar si no lo frenamos... y si no lo hacemos ya lo hará la propia naturaleza en forma de huracanes, sequías y terremotos como profetizan los acérrimos defensores de la naturaleza.

Con el javascript pasa algo similar en el mundo on-line. En su día vino muy bien, como vino bien el petróleo, pero ultimamente estamos abusando de su uso, sobre todo porque es tóxico.
Si habéis hecho una aplicación web grande en los últimos 2 años, seguro que habéis usado bien de Javascript. O mejor dicho, seguro que habéis picado buenas retailas de sentencias jquery. Porque, la verdad, parece que no haya vida más allá de Jquery.

Jquery, gracias a su increíblemente llana curva de aprendizaje, junto a su facilidad para extenderlo se ha convertido en el estándar de facto para gestionar el interfaz de uso en las aplicaciones web.
¿Y cual es el problema de esto? os estaréis preguntando muchos, pensando que a priori no tiene nada de malo, sino todo lo contrario. Pues como anunciaba al principio, que Javascript no está diseñado para esto. Aunar a la comunidad de desarrolladores en torno a un único lenguaje es sin duda algo grandioso. Pero deja mucho que desear comparado con los modernos lenguajes de programación. Su refactorización, así como su testing es pésimo, y un lenguaje para hacer software, para facilitarnos la gestión del cambio, que no es capaz de gestionar el cambio en su fuero interno, es que no cumple bien su misión.
Si queremos que el mundo on-line siga simplificándonos la vida, evolucionando hacia nuevas y más gratificantes experiencias, no podemos arrastrar ese lastre. Igual que el mundo off-line no puede permitirse seguir quemando (o vertiendo) derivados del petróleo.

En ese sentido hay un debate en la comunidad de desarrolladores sobre si hay que mejorar el javascript, lijando sus imperfecciones, o desarrollar algo nuevo de cero.
Yo soy partidario de la segunda opción. La primera me parece como los motores diesel de bajo consumo y bajas emisiones... un parche... pan para hoy y hambre para mañana.
Igual que la industria del off-line parece que ya lo ha asumido y empiezan a sacar coches eléctricos (rompiendo por completo con el petróleo), el mundo on-line debería tomar ejemplo, romper con el Javascritp y sacar un lenguaje nuevo, desde cero, que sea ideal para el desarrollo de la capa vista.
Hay varias alternativas interesantes para la primera opción (mejorar Javascript) como CoffeScript o BackBoneJS. Pero insisto, eso es meter la basura debajo de la alfombra: algún día te acabas arrepintiendo. Las deudas técnicas hay que pagarlas, dice otro de los grandes principios de la arquitectura software.
Parece ser que Google (yo estoy de acuerdo) tiene claro que el futuro es web, el futuro es del HTML. Pero no del Javascript. Y por eso, pensando en la segunda opción, están desarrollando DART, un lenguaje nuevo, con sintaxis similar al C y al Java (y a cualquier lenguaje orientado a objetos moderno). Vamos, que no costará mucho aprender a los programadores con callos en las yemas.
Estoy seguro de que el lenguaje será excepcional, pero, ¿cristalizará en la comunidad?
Pues no lo tiene fácil. Por muy abierto que lo ofrezcan, el resto de navegadores tendrían que soportarlo de forma nativa, y claro, no todos los navegadores tiene el presupuesto ni la fuerza de desarrollo que tiene Google para afrontar el cambio.

En realidad, como Google ya ha saboreado el fracaso más de una vez, están haciendo que DART pueda generar Javascript, por si los otros navegadores no quieren migrar a DART. No olvidemos que algunos de los otros navegadores son de empresas, que, bueno, no son amiguitos de Google precisamente: Apple, Microsoft. Vamos que no le van a abrir las puertas a DART. Y de hecho, Microsoft está apostando mucho por el Javascript, que lo va a meter en su IDE Visual Studio y en el Office, pero yo lo considero otro error de Microsoft que parece no acertar nunca con su estrategia en el mundo on-line.
De momento Google no ha contado mucho sobre DART; parece ser que lo hará en breve. Veremos que acogida tiene. Parece ser que se va a hacer al estilo Java y .NET, con máquinas virtuales.

Yo pienso que si no fuesen tan egoístas todos ellos, hablarían y diseñarían DART entre todos.
El único problema que le vería a eso es que, si más adelante todo el mundo sabe DART porque todos hacemos ya aplicaciones web ¿porqué mantener esa fragmentación de lenguajes en la parte del servidor? Si son capaces de consensuar a la comunidad desarrolladora en un lenguaje porqué no aprovechar el tirón y usarlo para todo?
¡Ala! olvida todo el java que sabes y ponte a aprender DART :-)
En realidad, no creo que fuese tanto problema. Lo cierto es que cada vez picamos menos código que no tenga que ver con el negocio. Es decir, todo lo relativo a las bases de datos, a comunicaciones, persistencia, cache, MVC, etc. viene cada vez más fácil de modo que sólo hay que configurar más que programar (gracias Rod Johnson ;-) ). Así que te centras en hacer el código propio de tu negocio, y eso, en general, da casi igual en qué lenguaje lo hagas.

- Venga, compro, ¿y para cuando dices?

Aaaaamigo. Obviamente no antes del 2012 :-) Aun dando por hecho que DART está casi acabado y que es genial y no tiene bugs, espero que antes de que acabe el 2012 tengamos claro si el futuro será del javascript mejorado o del DART (o análogo).

Lo que más me preocupa es que actualmente la comunidad de desarrolladores está llena de gente que apenas llevan 3 años haciendo javascript. Y si no corre sangre geek por tus venas no estás programado para abrazar el cambio como el que supone abandonar un lenguaje para aprender otro nuevo. Esa es una gripe que algunos hemos pasado tantas veces que ni nos preocupa. Entre comillas.
Ahí tenéis la respuesta a la pregunta del cuando: cuando los recién incorporados entiendan que ésta es una profesión de cambios constantes a velocidades de vértigo.
Así que os pido a los recién llegados: asumid el cambio como algo bueno y necesario o abandonad esa profesión. Sí, porque no os engañéis, no va a ser lo que diga Apple, o Microsoft o Google. Va a ser lo que digamos la mayoría. Mirad lo que le ha pasado al Flash... La mayoría no lo hemos adoptado y al final, se está quedando para hacer videojuegos y poco más (y acabará desapareciendo, por supuesto).

El mundo es cada vez más on-line como siempre digo. Cada vez más software que se desarrolla con herramientas software. No podemos asentar ese mundo on-line con cimientos que sabemos no son óptimos. Lleve el tiempo que lleve. Abandonar el javascript es un pequeño paso atrás para poder avanzar otros 50 pasos. La arquitectura del mundo on-line también necesita refactorización continua.
RIP Javascript. En su epitafio pondrá: bastante hice.