BogotáJS, grupo de usuarios Javascript de Bogotá
Hace alrededor de 3 años mientras cruzaba algunas palabras con @santiagovillega pensamos en la necesidad de tener un grupo de usuarios Javascript en nuestro país. En aquel entonces el lenguaje no tenía tanta acogida como PHP o Java, así que convocar personas interesadas era algo muy complicado ya que lo máximo que se conocía era jQuery y el cómo validar formularios.
Como antes lo he mencionado en este blog, este año las cosas han cambiado y se han comenzado a ver proyectos interesantes, los desarroladores han prestado mucha más atención a la programación al lado del cliente lo que ha generado que la industria se esté moviendo rápidamente a consumír servicios mas no que practicamente toda la aplicación dependa de un servidor.
Es por esto que el día de ayer anunciamos la primera reunión de BogotáJS. Está será realizará el día 16 de Noviembre a las 6:30 PM (lugar por confirmar). La idea es reunir desarrolladores interesados en conocer y compartir acerca de Javascript y por qué no, un posible grupo de estudio para generar investigación. En la primera sesión estará Daniel Aristizabal (@cronopio2) hablando sobre Node.js, un ambiente de programación Javascript al lado del servidor, escalable y orientado a eventos. También estaré yo hablando sobre los principales patrones utilizados en el diseño de librerías, analizaremos algunos proyectos existentes y cómo aplicar estos patrones a nuestros proyectos.
Pueden registrarse en el evento para asistir y además seguirnos en @BogotaJS para estar al tanto de cualquier actualización.
Google Dart y el estado actual de Javascript
No recuerdo ya cuanto llevo exactamente trabajando con Javascript pero siempre voy a tener presente el 2011 como el año en el que la gran mayoría de los desarrolladores web comenzaron a ver el lenguaje con respecto y asímismo a estudiarlo. Es interesante ver cuanto han cambiado las cosas estos últimos dos años. Ya vemos aplicaciones muy complejas que corren casi que en su totalidad en el navegador, ya hasta he escuchado que llaman a los navegadores: “Nuevas plataformas de juegos” lo cual suena bastante emocionante teniendo en cuenta que hasta hace 4 años si hacías que un formulario se enviara asincronamente al servidor te consideraban un dios.
Sí, los tiempos han cambiado, la tercera edición de ECMAScript fue liberada en 1999, la quinta recomendación actual) en el 2009-2010 y es gratificante saber que la siguiente versión se está desarrollando, lo cuál significa que se está prestando bastante atención a potencializar el lenguaje.
Las consecuencias de un mal diseño
Como muchas personas amo Javascript y me siento a gusto con lo que puedo hacer con él, pero seamos sinceros, es un lenguaje terriblemente mal diseñado. Tiene problemas que son muy difíciles de solucionar o “cubrir”. Durante años los desarrolladores se han quejado de su tipado, ausencia de clases, paradigma de prototipos, velocidad y así un largo etcétera. Con el desarrollo del nuevo estándar se planea solucionar varios de estos problemas pero se sigue negando a JS la capacidad de tener clases así que se están pensando alternativas que a mi manera de ver las cosas complejizan la curva de aprendizaje y la legibilidad. Esto al parecer lo ha visto Google así que para facilitarle la vida a la comunidad de desarrolladores decidió diseñar Dart que tiene la posibilidad de correr sobre una máquina virtual en Chrome (aún no implementada) o compilar el código directamente a Javascript.
Dart propone una sintaxis muy similar a Java. Incluye clases, interfaces, tipos personalizados, acceso al DOM a través del API estándar y otros comportamientos estrictos como la eliminación de la coerción de cualquier objeto a un valor booleano. Esto es, que lo único que se evalúa como verdadero es el valor booleano true. Dart también incluye interfaces como Iterable y Comparable, que para quienes vienen de lenguajes como Java les serían muy útiles.
Sí, existen otras alternativas
Para muchos desarrolladores, Javascript es ya un lenguaje complicado de entender pues no sigue los estereotipos y sintáxis que se podría considerar dentro de lo normal para un lenguaje de programación orientado a objetos. Débido a esto, se han dado a conocer varios pseudolenguajes para facilitarnos la vida.
El proyecto más conocido es CoffeeScript que si no estoy mal fue desarrollado por un miembro de la comunidad de Ruby. Al ver la sintaxis es difícil no darse cuenta que lo que se quiere es escribir poco y hacer más (cité el tagline de jQuery sin querer). A CoffeeScript se le ha trabajado duro y ha mejorado bastante con repecto a las primeras versiones. Ha sido fuertemente criticado por la comunidad de Javascript por su bajo o nulo soporte de funcionalidades existentes en versiones modernas y no estandares de Javascript como los generadores de expresiones o el modo estricto de ES5. Personalmente, no me gusta CoffeScript pues me gusta tener control sobre el lenguaje que estoy escribiendo, además de que tampoco me agrada el código que genera al compilarlo a Javascript.
Javascript++ es un proyecto que mejora las capacidades de Javascript soportando Clases, sistema de tipos de datos y otras funcionalidades sin sacrificar el hecho que la sintáxis de Javascript esté basada en C.
Una alternativa poco conocido y que fue lanzada en el último JSConf es Traceur Compiler. Lo que quisieron hacer con esto fue traer a hoy todas las funcionalidades y maravillas que se están pensando para Javascript en el futuro. Clases, modulos, generadores, valor de parámetros por defecto y una larga lista de características que han sido propuestas como estándar. Es una propuesta muy bonita y también permite compilar a Javascript.
Aplicación en proyectos reales
Considero que los proyectos en los que de verdad se debe pensar al momento de utilizar un pseudolenguaje es a los robustos. No es lo mismo un script para varios formularios o slideshows que escribir toda una aplicación al lado del cliente. Considero que tanto Dart, CoffeeScript y demás alternativas generan un lio enorme en tiempo de depuración ya que el código que en realidad se está ejecutando es compilado y reemplaza los identificadores que se escribieron en el código fuente con un diccionario que sólo el compilador conoce. Así que teniendo en cuenta los grandes bloques de código que generan estos compiladores, es fácil calcular lo complicado que será encontrar un error.
En el caso especifico de Dart, éste despliega todo su framework a Javascript para cualquier cosa que hagamos, así sea sólo una línea. Teniendo en cuenta la cantidad de características que incluye es más que natural que deba crear todo un espacio de trabajo para evitar la violación de sus reglas. Esto termina en scripts más grandes de lo esperado y por consiguiente depuración y ejecución más lenta que si lo hicieramos directamente en Javascript.
¿Qué pasa entonces con HTML5?
No pasa absolutamente nada. La W3C es la encargada de definir las recomendaciones para el API de cada nueva característica de HTML5 pero nunca dice que debe ser Javascript. Este API debe seguir intacto independientemente de la implementación. Siendo así, desde Dart se debería poder seguir usando los métodos de acceso al DOM, canvas, video, SVG, LocalStorage y demás tal como ya las conocemos.
Conclusiones
Google siempre quiere ser el super héreo que nos quiere hacer la vida fácil pero sin darse cuenta lo que a veces hace es complicarla un poco más. No les bastó con tener un proyecto ya muy adoptado como lo es GWT así que al no gustarles lo que les ofrecía Javascript decidieron diseñar su propio lenguaje. Tal vez ahora siga rediseñar Python o algo similar. Ahora que lo pienso, a mi no me gusta el sistema de transporte mi ciudad así que pensaré en diseñar uno nuevo y tal vez también quiera un cálculo más sencillo pues la matemática que tenemos es algo complicada de entender. Tal vez todos deberíamos diseñar nuestras propias cosas cuando algo de lo existente no nos guste.
01.2.112011 es el año de Javascript
Así es, y he estado esperando mucho tiempo para escribir esto. Llevo estudiando el lenguaje desde hace casi 9 inconstantes años siempre esperando que llegara el día en que el mundo estuviera listo para que fuera aceptado como un recurso muy potente.
Con el anuncio de HTML5, los demos del elemento canvas y demás cosas bonitas que vemos hoy puedo decir con seguridad que el año que nos espera a los antiguos desarrolladores Javascript va ser de mucho estudio pues la competencia (que siempre es buena y bien recibida) ha llegado por fin. En muchas compañías ya se están abriendo cargos para desarrolladores front-end lo que supone la aparición de jóvenes desarrolladores con ansias de escribir closures.
A partir de hoy escribiré en la medida de lo posible mis experiencias con el lenguaje así que espero la fiesta esté divertida