domingo, 14 de octubre de 2007

Qué tan bueno es el Ajax...?

Como dijo Carlos Zumbado en la última reunión del Grupo de Usuarios de Flash en Costa Rica: "Ajax funciona excelentemente para limpiar baños y lavatorios... :-)"
Ya en lo serio, AJAX ha ganado mucha fama ultimamente y en lo personal pienso que debido a la gran cantidad de desarrolladores o diseñadores que por ver un nombre en una revista piensan que será la Panacea para todos sus proyectos.
Si bien es cierto se han desarrollado cosas muy interesantes como los mapas de Google, Google Suggest y mi favorito: Gmail que tienen sus interfaces completamente basadas en la funcionalidad que provee AJAX, no funcionan completamente bien con todos los browsers. Ejemplo de eso es la funcionalidad de Gmail en Safari, que es completamente reducida para los usuarios del browser de la Mac (o por lo menos en la mia...aunque usando Safari en Win tampoco funciona)
Veamos un poco del transfondo de AJAX: su nombre viene de Asynchronous JavaScript and XML y su mayor fortaleza es la de poder intercambiar informacion con un servidor desde un codigo en Javascript sin tener que refrescar la pagina y sin que el cliente se de cuenta, haciendo que la experiencia que viva el cliente sea en tiempo real. Todo esto por medio del objeto XMLHttpRequest que es el encargado de realizar el intercambio de informacion entre la aplicacion y el servidor y como dije anteriormente sin refrescar la página completamente.
El Ajax en sí no es ningún lenguaje de programación definido, sino una serie de tecnicas (como el llamado de XML dinamico, DHTML, etc) y que utiliza el "lenguaje" Javascript, que en lo personal no me agrada mucho por varias razones entre las que puedo citar que no es compilado sino interpretado, no es fuerte con los tipos de datos, no hay un estándar de definición como con otros lenguajes, etc.
Como programador en ambiente web he escuchado y he experimentado que muchas veces como cierto código de Javascript funciona bien para X browser, pero no funcione igual para Y browser. Y eso - que a mi gusto es la mayor debilidad de esta tecnología- es debido a que los distintos fabricantes de browsers no han podido ponerse de acuerdo y formalizar un API de objetos y funciones accesibles al programador, que esté estandarizado e implementado en todos los browsers y que faciliten al programador el desarrollo de codigos sin tener que preocuparse si funcionara en cada uno de los browsers o no.
Este mismo problema se presenta a la hora de trabajar con AJAX. Siempre se presentaran problemas de funcionamiento entre las distintas plataformas que obligan al programador
escribir mas lineas de codigo para validar el tipo de browser y revisar si un metodo existe o no existe para un browser especifico.
Parece que el equipo de trabajo de Google pasó por este problema y decidió hacerle la vida más facil, sobre todo a los programadores de JAVA. Lanzó hace unos varios meses un Toolkit con un API con métodos y controles o widgets, que ofrece a los desarrolladores familiarizados con Java, la escritura de algún codigo en java y posteriormente su traducción al javascript y la correcta validación para que corra en la mayoría de browsers. Desde clases de java, se hara la creación de los distintos widgets o controles y su respectiva interacción con el cliente. Tambien se harán el llamado a recursos del servidor, que en un principio serán logrados por RCP y que posteriormente serán traducidos por el mismo toolkit al javascript listo para ser usado.
Su integracion con los IDEs mas usados como Eclipse es sencilla y permite probar las aplicaciones de dos formas, desde el IDE o en desde un browser con un mecanismo que levanta la aplicacion como si fuera una verdadera aplicación web hosteada en un servidor web.
Lo mas interesante de todo, es que el Toolkit al final generará codigo javascript que podrá ser utilizado (según dicen) en cualquier browser, sin necesidad de que el desarrollador meta mano en ello ni se reviente la cabeza en buscar metodos que sean utilizables y aceptados por todos los browsers porque el toolkit lo hara automaticamente.
Para los no "javeros", existen muchos otras herramientas que facilitan el uso del Ajax sin necesidad de usar el Toolkit de Google y sin saber Java, entre ellos Backbase que por cierto ya he usado y ofrece algunas cosas interesantes.
Sin embargo queda en mi la duda de que tan bueno será todo esto... Las aplicaciones desarrolladas, especialmente por Google son fantásticas pero aún queda algo en mí que no me permite aceptar esta tendencia al 100%, porque aunque es muy útil (porque verdaderamente lo es...) no es tan fácil de desarrollar como se quisiera.
En cambio, hace unos meses ingrese al mundo del Flex de Adobe, y aunque no soy un experto como algunos que hay por aquí (y Dios sabe que quisiera llegar al nivel de ellos) lo poco que he visto y que he aprendido y utilizado ha hecho que me entren de nuevo las ganas de programar...
Ya estaba cansado de aplicaciones WEB planas, cansado de añadir y añadir capas y capas entre las aplicaciones, cansado de crear aplicaciones en el server o herramientas de desktop en el super rígido Swing y mucho más de las aplicaciones de líneas de comando.
Flex vino a traerme buenos recuerdos de mi época con Visual Basic 6.0, el manejo de eventos, añadir botones, imagenes a un formulario, integrar eventos con objetos, dibujar una pantalla en un papel y que la gente te diga si le gusta o no... Además cuenta con un gran lenguaje para programar en el, como lo es el Actionscript 3.0 que ya es un lenguaje robusto, bien orientado a objetos, con excelente manejo del XML, expresiones regulares y cuanta cosa uno se pueda imaginar en un lenguaje de verdad, este lo tiene. Además se integra excelente con el MXML (para diseño más fácil de la parte gráfica) y el Flex es open source, lo cual permite meterse hasta lo mas profundo del lenguaje, ver definiciones y hasta si se es muy bicho modificarlo...
Otras cosas que me gustan son: el IDE para desarrollo está basado en Eclipse, lo cual es un plus si se es un desarrollador en Java que ha utilizado el IDE ya que estas completamente familiarizado. También el llamado de procedimientos remotos, por medio de Remote Objects, Data Services, Web Services o Servicios tipo Rest. Esto último es demasiado útil, sobretodo si se desarrolla un backend en el lenguaje favorito (en mi caso Java, pero sirve con PHP, Cold Fusion y hasta .Net) y el front-end es una aplicación fresa y dinámica en Flex y sobre todo eso y para rematar, las aplicaciones corren sobre el Flash player, algo estandarizado, no andan varias versiones del player hechas por distintas empresas por ahi y que implementen ciertos métodos en unas y otros en otras. Es algo más estable y serio, además que la penetración del Flash Player es demasiado alta, casi en un 93% de las computadoras del mundo...
Pero a pesar de todo lo que el Flex pueda proveer o lo que AJAX pueda ofrecer, lo más importante para el desarrollo de un buen sitio web, no será el lenguaje en que se implemente (aunque definitivamente ayudará), sino el diseño(y no me refiero solo al diseño gráfico) que se haga previamente. Como dice Alan Cooper en su libro About Face 3.0, "diseñar un producto que vaya a cumplir con las metas del usuario final, ni más cosas ni menos cosas..." (palabras más, palabras menos)

No hay comentarios: