Que debo de usar para mi aplicación web

Hola amigos, casi no he tenido tiempo para poder escribir algo en mi blog, por lo que mejor es ir soltando pequeñas cosas que voy encontrando.

Lenguajes dinámicos o estático?

Tengo un tiempo con querer crear una aplicación personal web, pero tenia que elegir las tecnologías, fue todo un tema, especialmente para la parte de frontend. Yo eh trabajado con php, python, java y ahora scala.

Por el lado de php no le eh dado más vuelta, aunque me parece genial el poder usar alguna aplicación ya echa de las muchas de hay echas en php, no es un lenguaje que elegiría para comenzar una aplicación de cero. Python es un lenguaje que me encanta y existe buenos frameworks, pero por esta vez prefiero optar por un lenguaje que tenga mejor performance, por lo que opte por ver lenguajes con JIT.

Frameworks

Comencé a ver frameworks agiles, pues aunque trabajo a diario con java y spring, spring no es un framework que se destaque por ser un framework agil, no como RubyOnRails, DJango, pylons, etc, a pesar que ahora esta tratando de cambiar su imagen.

Entonces comencé a buscar alguno que se adapte a mi, ya que vengo del mundo python, y ver como RubyOnRails se ha echo su fama, busque algo similar, y felizmente lo encontré y se llama Play Framework, es un framework, que corre en la JVM, tiene api, para java, para scala, no es el clásico JEE, en cambio usa como base el servidor Netty, los cambios son inmediatos, sin tener que redeployar, y muchas cosas más.

El Lenguaje, Java o Scala

Ya elegido el framework y debido a que soporta nativamente tanto java como scala, tengo la opción de elegir para mi desarrollo cual seria mi lenguaje por defecto, tengo un tiempo desarrollando pequeñas herramientas para mi trabajo diario, y cosas en mi casa, por otro lado vengo trabajando con java como lenguaje oficial en mi trabajo, por lo que se cuales son la ventajas de cada lenguaje, esto esta muy claro para mi, Scala sería mi lenguaje por defecto.

Frontend

Aunque al principio estaba claro que usaría las herramientas que brinda Play Framework, mirando a futuro, decidí investigar diferentes opciones, teniendo claro que usaría en el backend, scala+playframework, aunque me encantaría usar scala.js como lenguaje para el frontend, y mantener una sola linea, siendo realista, este proyecto es realmente nuevo, por lo que me di una vuelta por internet y me encontre con diferentes opciones, el mismo coffescript que trae play, y aunque me parece un avance sobre javascript, no es lo suficientemente extendido, o con soporte, si lo probé, me di unos encontronazos usandolo, pero no me termino de convencer, por lo que retorne a javascript, investigando me encontré que web con alto trafico como linkedin, usan javascript y llevando las plantillas que normalmente las tenemos en el lado del backend como jsp, templates de python, o cosas por el estilo, lo pasan a html+javascript, y existen varias opciones.

Una opción que esta dando bastante que hablar es AngularJs, un framework para javascript, pero aunque es una mejora aún persistía el problema del lenguaje, javascript no escala, claro desde mi punto de visto, y lo digo por el lado de desarrollo, darle mantenibilidad, crecer o refactorizar es toda una odisea, sin importar si usas jquery, sencha, angular, etc. así que decidí seguir buscando y me encontré con angular.dart, realmente interesante, de los mismos creadores de GWT, donde GWT es toda una plataforma, compilador, lenguaje, frameworks para UI, etc. claro no prospero por el lenguaje, java es muy cuadriculado para estos menesteres.

Pensé que encontré la solución, pero aunque Angular.js seguía avanzando no lo hacia de la misma forma su contraparte en dart, no leía noticias nuevas, lo cual nunca es un buen sigo, así que me puse a buscar de nuevo porque pasaba esto, y me encuentro que aunque angular también se encubó dentro de google, google decidió evolucionar junto con html5 y nació Polymer, un framework para componentes web, el cual anda muy bien de salud, y para mi es el futuro, el detalle de nuevo era que originalmente es javascript, pero, y aquí viene el gol, existe Polymer para Dart, y se integran muy bien.

Porque Dart + Polymer?

Ni que hablar de Polymer, me parece que es la decisión acertada, es el futuro, usar webcomponentes es muy muy sencillo, polymer nos ayudar a crearlos.

Por otro lado esta Dart, el lenguaje, bueno esto puede ser cuestionable, google quiere imponer este lenguaje, integrarlo con la vm de su browser al igual que lo hace con javascript, pero esto es todo un tema, pues aunque al tener la capacidad de tener variables tanto de tipo dinámico como de tipo estático, tiene mejor performance, el problema es que también tendría que convencer a firefox y todos los demás navegadores, de implementar. Por lo que actualmente también compila a javascript, algo similar a GWT, pues es un lenguaje, tiene su propio ide, y herramientas al rededor de dart, claro todo no es completamente color de rosa, cosa que comentare en otro post, sus ventajas son muchos más que las cosas que pueden ser desfavorables, es la mejor solución que encontré hasta ahora.

Conclusión

Dividir la aplicación en dos partes, una backend, y otra frontend, donde el backend solo son webservices, así si en algún momento necesito cambiar la implementación no pegue contra toda la ui ya construida, el tiempo de renderizado ya no es asumido por el servidor, por lo que el servidor puede atender más clientes, todo esto solo por mencionar algunas ventajas, y para no cansar más pues este post resulto siendo más largo de que lo pensaba, las cosas quedan así, Play Framework con Scala para el backend, y Polymer (web components) + Dart, para el frontend.

Originally published at miuler.tumblr.com.