Opiniones acerca de Groovy

Hola a todos,

Tengo una inquietud, toda mi vida he estado trabajando con java y sus diferentes frameworks, spring, hibernate, etc, pero en mi empresa me asignaron a un proyecto con Groovy y servicios rest básicamente, con el cual no había trabajado y es algo para un buen tiempo.

Mi inquietud es acerca de que tan rentable es aprender este lenguaje? Me refiero a nivel laboral si se encuentran buenas propuestas? Este lenguaje va para rato?

He leído opiniones en algunos foros unas no muy buenas otras sí.

Gracias de antemano por cualquier opinión.

Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Mi experiencia con Groovy

Mi experiencia con Groovy ha sido esta:

Es muy fácil de adoptar. Yo lo integré a un proyecto grande que ya tenía en puro Java, porque vi demos de domix y neodevelop y pues me llamó la atención la parte de que sea menos verboso para definir listas, mapas, para algunas condiciones, la cosa de los closures, y en aquél entonces pues le agregaba a colecciones lo que ahora se puede hacer con streams de Java 8, pero pues yo estoy hablando de cuando estaba en Java 5.

Algo bueno de groovy es que fue muy fácil agregar una clase hecha en Groovy al proyecto y pues solamente hubo que agregar jars al classpath de compilación y runtime.

Esa clase fue como gateway drug. Conforme había que agregar funcionalidad, usé muchísimo Groovy, ya casi no escribía Java, porque era más conciso y muy rápido de escribir.

Y luego empezaron los problemas.

Lo bueno y lo malo de Groovy es que es un lenguaje dinámico. A veces, demasiado dinámico. Si quieres hacer metaprogramación, frameworks que usen convención sobre configuración, cosas de ese tipo, Groovy es ideal. Pero para cosas "del diario", necesitras herramientas adicionales: un montón de pruebas (ya sea con jUnit, o de preferencia, spock) y en una de esas hasta un analizador estático (codenarc). Todo eso para compensar el hecho de que prácticamente todos los errores en tu código van a ocurrir en runtime. El compilador es demasiado benevolente. Si escribes cosas como esto:

 

Ese código compila. No importa que no tengas una variable d, o que String no responda a "uppered". Te deja compilar eso porque puede que en tiempo de ejecución, aparezca en tu clase un campo d porque alguien se lo agregó a la metaclase o lo que sea, y entonces eso se resuelva bien; puede que alguien le haya agregado la propiedad "uppered" a la clase String y entonces tu código corre bien. Pero si eso no es lo que querías, si esos fueron simples errores tipográficos y pues por estar distraído o lo que sea, entonces vas a tener broncas. Y resulta que si no tenías una o varias pruebas unitarias que detectaran eso, pues va a tronar probablemente hasta que ya lo subas a producción.

Es un lenguaje bastante flexible. Pero a mi me gusta que el compilador me ayude a encontrar errores muy básicos en mi código. Y me gusta que mis pruebas unitarias y de integración sean orientadas a probar la lógica de negocio y los contratos que las clases deben cumplir y que todo haga lo que se supone que debe hacer, pero sin necesidad de probar las cosas más fundamentales.

Luego de hartarme un poco de groovy por algunas malas experiencias de código que tronaba en producción por no estar bien probado, pues ya aprendí a escribir más y más pruebas para que no pasara nada. Pero a veces siento que hay pruebas que son completamente innecesarias en otros lenguajes pero que sí tienes que hacer en Groovy.

En algún momento de ese hartazgo, decidí probar Scala, porque ps tipado estático, rollos funcionales, etc. Todavía me doy de topes cuando tengo que mantener ese poco Scala que escribí. Y algunas pruebas de concepto que hice para cosas más complejas, las abrí un mes después de haber dejado Scala por la paz y no entendía nada.

Y luego encontré Ceylon y luego nadie nos peló y luego salió Kotlin y ahora ando en Pure Java 8.

Ahora, regresando a tu pregunta: No sé si es rentable o si hay ofertas laborales específicamente para gente que sepa Groovy y qué tan bien paguen por eso. Pero definitivamente es algo bueno que aprendas Groovy, porque es una herramienta más para ti, que te puede servir en cualquier proyecto. Que si va para rato? Pues ya lleva un ratote, yo lo uso desde hace ya como 8 años, si no es que más... y ha estado avanzando y creciendo. Yo lo vi crecer bastante en popularidad.

Cuando menos, vale la pena que lo conozcas bien. Dale una probada.

Ese código compila. No

Ese código compila. No importa que no tengas una variable d, o que String no responda a "uppered". Te deja compilar eso porque puede que en tiempo de ejecución, aparezca en tu clase un campo d porque alguien se lo agregó a la metaclase o lo que sea, y entonces eso se resuelva bien; puede que alguien le haya agregado la propiedad "uppered" a la clase String y entonces tu código corre bien. Pero si eso no es lo que querías, si esos fueron simples errores tipográficos y pues por estar distraído o lo que sea, entonces vas a tener broncas. Y resulta que si no tenías una o varias pruebas unitarias que detectaran eso, pues va a tronar probablemente hasta que ya lo subas a producción.

Es un punto muy válido, y esto te va a pasar con cualquier lenguaje de programación de tipos dinámicos. Esto también se refleja en el soporte del IDE: NetBeans no maneja muy bien cosas como refactoring de Groovy; IntelliJ lo hace mejor.

Tampoco abuses de la metaprogramación, eso puede afectarte en el performance.

Imagen de josdem

Conoce más de Groovy

Hola rasilvap22.

Actualmente uso Groovy en mi trabajo, y llevo usándolo unos tres años. Como comentan es importante un set de pruebas adecuado, también te recomiendo Spock Framework. Si quieres saber más de Groovy visita la siguiente sección de Groovy en mi sitio web.

Buen día.
josdem.

Imagen de jresendiz27

Vale la pena conocerlo

Hola!

Llevo usando Groovy por cuatro años promedio, desde proyectos de trabajo, escolares y algunos ya en producción.

Considero que es un lenguaje muy versátil y de fácil adopción, si vienes de un entorno Java te será muy rápida la curva de aprendizaje. Como bien lo han mencionado, al ser dinámico te podría generar ciertos incovenientes, igual cómo cualquier lenguaje, implica cierta disciplina y orden. Ya cuenta con anotaciones cómo @TypeChecked y @CompileStatic que te permiten disminuir los errores por el dinamismo y hacer uso de un código más parecido a Java, además de hacer otros procesos durante el compilado.

Groovy ha seguido creciendo, tanto como comunidad, cómo proyectos que hacen uso del lenguaje. Considero que vale la pena le des una revisada y además, cualquier tipo de aprendizaje siempre es bienvenido.

Imagen de carlogilmar

Mi reseña de Groovy

Hola! Inicié a hacer proyectos más formales. Con el paso del tiempo valoré más Groovy como lenguaje de programación por todas las cosas que tenía, es muy sencillo hacer pruebas de unidad con Groovy Test Case, y el power assert está muy padre. Cuenta con una ripple (la groovy shell) bastante útil. Inclusive cuando me tocó entrar a proyectos hechos con groovy (Grails) estuvo padre encontrar los flujos dentro de la aplicación con ayuda de groovy.

Hola! Yo inicié a hacer proyectos más formales con Groovy. Conforme fue pasando el tiempo, fui valorando más este lenguaje de programación por todo lo que tenía... es muy sencillo comenzar a hacer pruebas de unidad con Groovy Test Case, y tiene un power assert muy padre; también cuenta con una ripple, la groovy shell, bastante útil. Usé groovy con un toolkit de la JVM llamado VertX, y me pareció muy sencillo debido a que Groovy tiene closures y vertx los usa mucho. Inclusive cuando me tocó entrar a un proyecto hecho con Groovy (y Grails) fue padre comenzar a estudiar los flujos con cosas como el .dump().

Groovy no solo es para desarrollo Web/REST

Te recomiendo aprender más de Groovy pues es un lenguaje muy versatil, fácil de aprender y que va a abrir a ideas que programando solo en Java difícilmente vas a encontrar.
Adicionalmente Groovy tiene muchos usos en la actualidad.
- Gradle. El sistema de automatización de builds está basado en Groovy.
- Spock. La biblioteca de pruebas unitarias que te permite documentar de manera natural tus casos de pruebas está construido en Gradle (y la meta programación para construir mocks es una chulada).
- Geb. El framework para automatización de pruebas web se programa en Groovy.
El que tanto pueda servir a tu carrera depende de ti, pero el tener otra herramienta más, como es Groovy, en tu juego de herramientas es un valor extra a tu trabajo que puedes apreciar.