miércoles, septiembre 12, 2007

Siguiendo los Rubies

Desde hace algunos meses he estado siguiendo a un nuevo jugador en el área de desarrollo de aplicaciones para Web, ese nuevo jugador es Ruby.

Ruby es un popular lenguaje de programación interpretado de pasada-unica con características orientadas a objeto y multiplataforma. Ruby tiene ya como 10 años de que fue desarrollado, pero creo que ha ganado una gran popularidad en los últimos años debido a un framework (marco de trabajo) que permite la creación de aplicaciones web con relativa facilidad y potentes; este framework se llama Ruby On Rails (RoR).

RoR esta basado en 2 patrones primordialmente, Model-View-Controller (MVC); el cual permite realizar una separación entre el manejo de los datos, el control de flujo y la presentación o interface web, permitiendo una mejor organización y control del código de la aplicación, el otro patrón es ActiveRecord, el cual funciona como un ORM, y ayuda a realizar una "mapeo" transparente entre un objeto y una entidad relacional, ayudando a acceder a datos en una base relacional como si fueran objetos.

RoR ofrece algunas características que creo que han sido pieza clave en el éxito que tiene, una de ellas es que al hacer uso del patrón MVC ayuda a crear pruebas automáticas sobre el modelo de los datos y el controlador para asegurar que la aplicación una vez puesta en producción va a funcionar adecuadamente, ademas de ayudar a verificar que cambios introducidos en el código no van a romper funcionalidad existe, y si esto pasa, bueno al menos identificarlos por medio de las pruebas para su corrección antes de pasarlos a producción.

Otra característica interesante es el "Scaffolding", el cual es una manera de poder crear prototipos de una manera rápida en RoR, ya que se crea código de manera dinámica (código para operaciones CRUD) a partir de las entidades de la base de datos, mas tarde el "Scaffold" se puede ir reemplazando por nuestro propio código de forma gradual.

Ruby y RoR tienen una comunidad muy activa que aporta soluciones para extender la funcionalidad de ambos.

Si acaso la única desventaja (desventaja entre comillas) es que como mencione anteriormente Ruby es interpretado al momento de ejecución por un compilador de pasada única, esto implica que no se va a ejecutar tan veloz como un programa nativo (por ejemplo creado en C), pero el que el compilador sea de pasada única ayuda en que código que ya se interpreto no se va a volver a interpretar si se vuelve a ejecutar, en su lugar se va a utilizar su imagen ya interpretada.

Como mencione al principio Ruby ha llamado mi atención fuertemente, pero al parecer hay comunidades fuera del ámbito original de Ruby que también han sido atraídas por las joyas.

Una de esas comunidades, es la comunidad Java con el desarrollo de JRuby, el cual se enfoca en hacer que un programa de Ruby pueda ejecutarse dentro de la maquina virtual de Java.

Otra de las comunidades es la comunidad .NET, en donde a diferencia de Java, se ha implementado Ruby para ejecutarse en .NET, pero no por un grupo de programadores en su tiempo libre, si no que es un esfuerzo lidereado desde dentro del mismo Microsoft, el proyecto se llama IronRuby.

Lo curioso no es que Microsoft haya implementado Ruby para .NET (cuando ya existía un esfuerzo previo, por terceros para llevar a cano esta tarea Ruby.NET), lo interesante son las interpretaciones que gente como Martin Fowler, Scott Hanselman, Sam Gentile y algunos miembros del sitio Codebetter le dan a este hecho.

La realidad es que Microsoft y grupos open source no se llevan del todo, durante ya algo de tiempo han habido golpes bajos y FUD entre ambos; por su parte Microsoft parece estar empeñado a reemplazar las herramientas de desarrollo open source populares en el mundo .NET, por las suyas (por ejemplo el caso de NUnit o NAnt), lo cual es una duplicación de esfuerzo, ya que algunas de esas herramientas no superan a las ya disponibles en open source; pero por otra parte hay descontento entre algunos de los denominados "Líderes Técnicos" en el mundo .NET por la complejidad de las herramientas y tecnologías que Microsoft ha liberado en los últimos años, por ejemplo ASP.NET, cuenta con asistentes que ayudan a crear una aplicación fácilmente en minutos, el problema viene cuando hay que darle mantenimiento a esa aplicación o es necesario "crecerla" a un nivel corporativo, y en buena parte es por el modelo de ASP.NET el cual trata de llevar el paradigma de aplicaciones de escritorio a Web; otro punto es que es un tanto difícil seguirle los pasos a Microsoft en cuanto a la liberación de tecnologías, cambia el rumbo muy fácilmente, en solo un par de años por ejemplo el auge de los WebServices se extinguió y ahora existe WCF, el cual tiene otra visión; parte de este problema son también las incompatibilidades que ocasiones se crea al introducir nuevas tecnologías.

El problema que Microsoft quiere atacar con la implementación de IronRuby (desde la perspectiva de Martin y Scott), es que no esta detrás del dinero, es decir no espera obtener ganancias directas por implementar Ruby, lo que busca es que los "Líderes Técnicos" que están considerando soluciones menos complejas, como por ejemplo RoR, continúen trabajando en ellas, pero dentro de su plataforma Windows ( que ahí si es donde espera ganar dinero ) y no se migren a Linux u OSX, y junto con ellos se queden los desarrollares que siguen las opiniones de estos líderes, que a final de cuentas muchos evangelizadores de la plataforma .NET.

Solo el tiempo dirá si las cartas que se juega Microsoft son las correctas para mantener su amplia base de desarrollares.

Yo por mi parte, me interesa bastante Ruby, de hecho ya instale la plataforma en mi Mac, pero no he tenido el tiempo de experimentar con RoR; aunque tengo algunos proyectos web, el requisito hasta ahorita de mis clientes es que sea en ASP.NET, aun así he decido implementar los proyectos con MonoRail y ActiveRecord para .NET, con la finalidad de irme haciendo mas a la idea de RoR, tanto MonoRail como ActiveRecord están implementados en C#, pero con la misma filosofía del framework RoR, pero de ellos espero hablar en un siguiente post.

No hay comentarios.: