• Inicio
  • Servicios
  • ¿Groovy? ¿Grails?
  • Blog
  • Contacto

¿Groovy? ¿Grails?

Groovy es un lenguaje dinámico que se ejecuta en la JVM. Usa los mismos tipos de datos que Java y es 100% compatible con él a nivel binario, lo que le convierte en el complemento perfecto del lenguaje líder en desarrollo de software empresarial. Juntos, Groovy y Java constituyen la plataforma de nueva generación para desarrollo de software empresarial.

Situación actual en desarrollo de software JavaEE

Durante muchos años, la plataforma JavaEE ha sido líder en el desarrollo de software empresarial, desde las capas de presentación, con tecnologías como los Servlets, JSF, Swing o Java Web Start hasta las capas de infraestructura, con especificaciones como EJB, JMS y JMX. El stack de tecnologías es tan amplio, que sin salir de una misma plataforma disponemos de soluciones para prácticamente cualquier necesidad que pudiéramos tener.

Además, el modelo de negocio de Sun alrededor de Java (proporcionar las herramientas de forma gratuita y construir un ecosistema de servicios alrededor de ellas) ha permitido, por un lado, que multitud de compañías grandes y pequeñas se hayan especializado en la plataforma, realizando desarrollos a medida, dando formación y prestando servicios de consultoría, y por otro, que se hayan desarrollado multitud de proyectos libres con soluciones a los problemas más comunes. De hecho, la mayoría de las especificaciones tienen una implementación de referencia open source.

Pero seríamos muy ingenuos si, como desarrolladores de software, no reconociéramos las debilidades de la plataforma:

  • JavaEE está diseñada por expertos acostumbrados a lidiar con los problemas más complejos que puedan presentarse. Esto, que en principio es una ventaja (“si los mejores piensan que debe hacerse así, será que ésta es la mejor solución”), resulta ser un inconveniente a la hora de resolver problemas no tan complejos pero mucho más habituales. A veces lo fácil se vuelve difícil con Java y ésto es un inconveniente porque afecta a la productividad de los equipos, y por tanto a los tiempos de desarrollo y la satisfacción del cliente.
  • Existen ámbitos en los que, por su naturaleza, Java no aporta soluciones óptimas a pesar de que son parte integrante del entorno en el que nos movemos a diario. Piense en la automatización de procesos de un servidor mediante scripts de shell. ¿No sería perfecto si los programadores Java pudiesen escribir scripts para realizar tareas de mantenimiento usando las tecnologías que conocen, pero de una forma ágil que necesitase el complejo proceso escribir – compilar – ejecutar?

Afortunadamente, los desarrolladores somos gente inquieta que siempre busca mejores formas de hacer las cosas, y desde hace años existen equipos explorando distintas vías para completar la plataforma Java y conseguir un entorno más flexible y, sobre todo, ágil. Una de las vías que se han estado explorando es la incorporación de lenguajes dinámicos que se ejecuten sobre la propia Máquina Virtual Java.

Lenguajes dinámicos: beneficios y limitaciones

Cuando hablamos de lenguajes “dinámicos” nos referimos a aquellos que son capaces de hacer en tiempo de ejecución cosas que otros lenguajes (que llamamos “estáticos”) sólo pueden hacer durante la compilación. Por ejemplo, un lenguaje estático sólo me permite definir tipos de datos (clases, estructuras, etc) describiéndolos mediante el código fuente y usando un compilador para generar su representación binaria. Sólo entonces podré ejecutar una aplicación que utilice los tipos de dato que acabo de crear.

Los lenguajes dinámicos, por el contrario, me permiten crear tipos de dato, o modificar tipos existentesmientras la aplicación se está ejecutando. De esta manera podemos escribir programas cuyo comportamiento puede adaptarse a las condiciones en que estén siendo ejecutados.

La gran ventaja de los lenguajes dinámicos es que, en general, se necesita mucho menos código para realizar una determinada tarea que si la escribíesemos con un lenguaje estático. Su sintaxis suele ser mucho más expresiva y breve, lo cual redunda en una mayor productividad de los programadores y un código más fácil de comprender y mantener.

Pero los lenguajes dinámicos por sí mismos tampoco son la solución perfecta a todos los problemas. Su mayor ventaja es a la vez el origen de su mayor limitación: gran parte de lo que ocurre en un programa escrito en uno de estos lenguajes no figura por ninguna parte de su código fuente. Los tipos y funciones generados de forma dinámica no están descritos en nigún sitio, y por tanto los fallos que pueda contener son más difíciles de identificar y solucionar. Además su misma naturaleza hace que sea más difícil escibir entornos de desarrollo para este tipo de lenguajes que incluyan ayudas al desarrollo como auto-completado o depuración.

Por tanto, podemos concluir que los lenguajes estáticos aportan trazabilidad, estabilidad y robustez, lo que los hace más aptos para resolver tareas críticas ya sea por su funcionaliad o por los requisitos de rendimiento. A cambio, nos exigen más esfuerzo en forma de códigos fuentes más largos, difíciles de leer y escribir. Los lenguajes dinámicos, en cambio, nos presentan un entorno ágil en el que los problemas se resuelven con muy pocas líneas de código, y no necesitamos seguir el ciclo “escribo – compilo – ejecuto” ya que la mayoría se pueden ejecutar mediante intérpretes directamente desde el código fuente. A cambio, perdemos una parte del control sobre lo que ocurre durante la ejecución de nuestros programas, lo que puede dificultar la resolución de incidencias en algunos tipos de aplicaciones.

¿Y no sería genial si pudiéramos tener lo mejor de ambos mundos?

Groovy y Java: el siguiente paso

Groovy es un lenguaje dinámico para la máquina virtual que nace en 2003 de la mano de James Strachan y Bob McWhirter, y se estandariza en el JSR-241 un año después. Permite acceder al API estándar Java desde un enfoque diferente gracias al soporte de funcionalidades como la sobrecarga de operadores, la creación de tipos en tiempo de ejecución o las Closures. Cualquier cosa que pueda hacerse con Groovy es posible también con Java, y viceversa. La diferencia entre ambos lenguajes está en su propia naturaleza, que provoca que el código necesario para una determinada tarea en Groovy sea en promedio unas cinco veces más breve que el equivalente en Java.

Groovy nació con la misión de llevarse bien con Java, vivir en la Máquina Virtual y soportar los tipos de datos estándar, pero añadiendo características dinámicas y sintácticas presentes en otros lenguajes como Python, Smalltalk o Ruby. Así, el código fuente Groovy se compila a bytecodes igual que Java, y es posible instanciar objetos Java desde Groovy y viceversa. Lo que Groovy aporta es una sintaxis que aumenta enormemente la productividad y un entorno de ejecución que nos permite manejar los objetos de formas que en Java serían extremandamente complicado.

De esta manera, la combinación de Groovy y Java constituye la plataforma de nueva generación en el desarrollo de aplicaciones Java, al aportarnos, por fín, lo mejor de los mundos estático y dinámico:

  • Compatibilidad con todo el código heredado Java.
  • La potencia y robustez de Java en aquellas áreas en que sea necesario.
  • La posibilidad de usar Groovy para aumentar nuestra productividad en áreas como:
    • Código de integración entre componentes.
    • Código de configuración.
    • Lenguajes de dominio específico (DSLs)
    • Capa de presentación (Swing, web)
    • Automatización de tareas y desarrollo de Scripts.
    • Programación dinámica (creación y alteración de tipos de dato en tiempo de ejecución).

Aquellos equipos de desarrollo en los que se combina el uso de Groovy y Java aumentan dramáticamente la productividad de sus desarrolladores y reducen su “Time to Market” manteniendo una compatibilidad completa con todo su código heredado y librerías Java de terceros.

Ha llegado el momento de pasar al siguiente nivel, de ser capaz de presentar un prototipo al cliente en pocos días y de resolver incidencias en una décima parte del tiempo. La tecnología debe ser parte de la solución, no del problema.

Grails: una plataforma ágil para desarrollo web Java

Grails es un entorno para desarrollo de aplicaciones web sobre la plataforma Java Enterprise Edition nacido en un contexto muy particular: el de las metodologías ágiles de desarrollo de software.

La idea detrás de estos procesos es que los requisitos de una aplicación no siempre pueden definirse completamente antes de comenzar la implementación, y es necesario un ciclo basado en iteraciones cortas y una comunicación muy fluida con el cliente para que el proyecto vaya bien encaminado desde el principio y no se desvíe en fecha y/o coste.

Se trata de aliviar el desarrollo de software de procesos burocráticos y rígidos que obligan a definir por completo los requisitos, luego diseñar una solución, luego implementarla, y luego probarla, siempre por ese orden y terminando completamente una etapa antes de comenzar la siguiente. Hay muchas metodologías ágiles, pero todas tienen en común una clara orientación a gestionar el cambio. Es posible (y frecuente) que el cliente no tenga completamente definidos los requisitos antes de comenzar el desarrollo, y que necesite estar involucrado en el proceso de desarrollo más allá de la reunión de arranque del proyecto.

De esta manera, metodologías como eXtreme Programming o Scrum incluyen al cliente en las reuniones de seguimiento, y establecen una forma de trabajo en la que la comunicación fluida garantiza que si se produce un cambio total o parcial en los requisitos el equipo de desarrollo será capaz de adaptar la aplicación en un tiempo razonable.

Pero para que esto sea posible es necesario contar con herramientas que también sean ágiles, y aquí es donde nacen frameworks como Ruby on Rails, y en el ámbito de Java, lenguajes como Groovy y frameworks como Grails. Son herramientas en las que el programador gasta el mínimo tiempo necesario en tareas repetitivas, y en las que un cambio de requisitos no obliga a reescribir toda la aplicación, porquela mayoría del código de infraestructura se genera de forma dinámica mientras la aplicación se está ejecutando.

Joomla SEO powered by JoomSEF

Sobre nosotros

Escuela de Groovy es una joint venture de ImaginaWorks y Salenda, las empresas españolas con mayor conocimiento y experiencia en Groovy, Grails, Griffon y otras tecnologías relacionadas, que deciden poner en común esfuerzos para convertirse en el referente nacional sobre este tipo de tecnologías. Sigue leyendo...

Suscríbete a nuestra NewsLetter

Nuestro Blog

  • Ampliamos la promoción del 50% de descuento hasta final de mes
  • Graeme Rocher muestra su apoyo a Escuela de Groovy
  • Patrocinamos el Spring 2GX Day
  • El Ayuntamiento de Vitoria-Gasteiz apuesta por Grails
  • Buscamos desarrollador Grails
© Escuela de Groovy y Grails SL, todos los derechos reservados. Subir