Decidiendo entre Java y Groovy/Grails para proyecto web
Recientemente me he involucrado en una startup en el que pensamos desarrollar una plataforma web que estara disponible al publico en general. Los requerimientos de la aplicación no son muy demandantes, basicamente va a ser una aplicación CRUD al estilo web 2.0. Debido a que primariamente soy un desarrollador Java, mi primera sugerencia fue hacer la aplicación con el stack de Java EE/JSF 2.2/JPA y una suite de componentes como Primefaces o Richfaces.
Se que las tendencias actuales para web apps es usar lenguajes dinamicos y agiles como Ruby/RoR, Groovy/Grails etc.. Asi que me he pasado un rato aprendiendo ambos, especialmente Groovy ya que es mas accesible para los javeros. Aunque he quedado agradablemente sorprendido, sigo pensando que seria mas productivo usando Java, supongo que esto es en parte al nivel de experiencia que ya tengo pero ademas me he dado cuenta de que los otros lenguajes no tienen nada en especial que no tenga Java.
Lo que me gustaría averiguar es porque los lenguajes dinamicos como Ruby,Groovy etc. son tan populares actualmente para web apps mientras que Java no lo es. ¿Que ganaría al desarrollar my proyecto con uno de esos lenguajes?
¿Que opinan?
Grails
En particular Grails se me hace bastante bueno porque trae ya todo integrado para poder ensamblar aplicaciones web complejas: el manejo de dependencias tipo maven, la parte de web, la parte de orm, la parte de controladores, flujos de trabajo, transaccionalidad, etc.
Grails aprovecha las ventajas de Groovy para ofrecer DSLs en ciertas partes, como en la configuación de beans con Spring, en la definición de rutas para los controladores, en los mismos controladores y servicios, y por supuesto en Gorm, desde la definición de clases de dominio hasta la manera en que usas dichas clases, los métodos que se traducen a queries por ejemplo.
La principal ventaja de Groovy es lo que le agrega a las clases básicas de Java, como colecciones y demás. Eso de poder hacer
(y los métodos find, findAll, collect, etc) es bastante útil. El switch con listas, y lo de los closures para poder hacer interfaces de un solo método (por ejemplo un closure sin parámetros y simplemente castearlo a Runnable), son cosas que te ahorran un poco de código que es bastante engorroso escribir y también leer.
Pero el gran problema de Groovy es que todo, TODO se va a tiempo de ejecución. Mientras no escribas alguna cosa que de plano el parser no entienda y te dé un error de sintaxis, todo compila. Esto compila:
y esto también:
. Un IDE te puede ayudar mucho porque hacen análisis estático del código y te advierten de algunas cosas como que Date no tiene ese atributo o que ese método no existe, pero solamente son advertencias porque pues en Groovy esos atributos o métodos podrían estar ahí en tiempo de ejecución... por eso es que tienes que escribir tantas pruebas, porque hasta el más mínimo detalle lo tienes que probar porque el compilador no ayuda nada en este lenguaje.
Pero pues una vez que le agarras la onda y sabes lo que haces, ya no te equivocas tanto. El problema es que te puedes confiar y seguramente esa línea de código para la cual no hay pruebas, es la que va a tronar en producción. Y puede ser por algo que debiste haber probado porque igual podrías haberla escrito en Java y truena igual porque es un error que sólo ocurre bajo ciertas circunstancias, o bien puede ser algo bien obvio como un error tipográfico donde escribiste
en vez de
y no te diste cuenta y pues a la mera hora te sale un error de groovy con un stack trace gigantesco de que no hay propiedad ni método comit en el contexto donde lo pusiste.
Si prefieres trabajar con
Si prefieres trabajar con Java puedes probar con Play, tambien es un full stack y tiene muchas similitudes con Grais y Rails, incluso el redeploy automatico cuando cambias alguna fuente, lo que la sensacion de trabajar con un lenguaje dinamico.
Mi opinion @dustedrob.
¿Que ganaría al desarrollar mi proyecto con uno de esos lenguajes?
Esa pregunta es muy personal o exclusiva de cada quien, tal ves acabes odiando no tener una red de seguridad todo el tiempo mientas cuelgas de una cuerda floja, y sería algo muy comprensible, pero te voy a platicar que es lo que yo he ganado al usar un lenguaje diferente del que venia usando, un poco de contexto antes, resumido claro. Yo comencé a desarrollar con Java por puro juego y conseguí un trabajo donde me permitieron desarrollar con ese lenguaje y aun que suene un poco raro fue una decisión arriesgada en ese momento porque todo lo tenían con VB, luego me dieron la oportunidad de trabajar en una consultora que se dedicaba a desarrollar aplicaciones BPM pero también estuve muy clavado con Java, luego entre a otra consultoría directamente a desarrollar Java pero termine aprendiendo C# y me gusto mucho, aprendí algo llamado Linq (link) y casi en ese mismo tiempo empece a jugar con Groovy haciendo pequeñas katas, aquí es donde todo me pareció muy frustrante porque de tanto que jugaba con Groovy y estudiaba Linq para usarlo bien en mi trabajo, sin darme cuenta empece a ver con ojos de horror el código que había escrito antes, total que se presento la oportunidad de trabajar con un equipo con mucha experiencia en lenguajes funcionales, POO, dinámicos, estáticos, fuerte y débil mente tipados, pfff de chile mole y de manteca jeje, y de ellos aprendí que es casi obligatorio el estar aprendiendo nuevos lenguajes y aplicar/practicar en lo posible la esencia de lo aprendido. Ahora me dieron la oportunidad de trabajar desarrollando casi un 50% con Groovy (lo de más se va en JavaScript, SQL, Java, etc) y aun así no siento que se este terminando el camino de aprendizaje y diversión, todo lo contrario apenas comenzó el crescendo de la obra :P
Es muy difícil, desafortunadamente, encontrar oportunidades de trabajo donde te dejen expresarte con lenguajes como Groovy, Ruby, Clojure, Lisp, Python, etc... pero eso no es pretexto para no aprenderlos y si tienes el chance de iniciar un nuevo proyecto con alguno o varios de ellos, yo en tu lugar tomaría el riesgo de aprender de esa forma.
Conclusión a que ganarías desarrollando con un lenguaje que no es en el que tienes un estado de confort: Dudas, experiencia, criterio, buen gusto para las chelas (No se porque pero todos los buenos programadores que conozco personalmente toman buena chela), un visión diferente del ecosistema donde estes programando y entre un montón de otras cosas ganaras un odio rotundo a la sintaxis de Java y muchas oportunidades profesionales.
Saludos pasa bien.
Misma pregunta
Primero que nada: jajaja al comentario de Rodrigo "No se porque pero todos los buenos programadores que conozco personalmente toman buena chela"
Recientemente estamos en fase de planeación de un nuevo proyecto, el líder decidió usar groovy/grails, habíamos venido trabajando siempre con Java y ahora es la primera vez en esto para todos. Yo aún tengo mis dudas si esto es lo suficientemente "sólido" como para soportar un proyecto en serio. He estado aprendiendo y al menos en los libros en los que me estoy basando todo parece muy fácil (eso incrementa mi duda sobre su capacidad).
Otra cosa nueva en este proyecto es que cambiamos Eclipse por IntelliJ IDEA, qué opinan de este IDE?
capacidad, IntelliJ
Yo uso IntelliJ IDEA y me parece un excelente IDE para Groovy y para Java también. Particularmente para Groovy es bastante mejor que Eclipse.
En cuanto a la capacidad de Groovy... Netflix usa Groovy/Grails, en una cosa llamada Asgard que desarrollaron ellos mismos; aquí en México clickonero se hizo en Groovy y Grails (el buen domix estuvo al mano de eso según sé); el sistema de construcción de proyectos Gradle está hecho en Groovy y ya es la herramiente que utilizan para construir Spring, Android, Groovy, Grails y no sé qué tantos otros proyectos.
Nosotros en la chamba tenemos una aplicación hecha en Java y Groovy (hay clases en Java, clases en Groovy, etc) y ha llegado a procesar más de 100mil transacciones en un día, sin problema alguno.
No sé a qué te refieras con "capacidad". De performance yo no le he visto problemas; como dije al principio, mi queja de Groovy es que por ser dinámico, todas las broncas se van a tiempo de ejecución y por lo tanto hay que probar hasta las cosas más triviales.
Re: gerzeus
Yo uso mucho IntelliJ IDEA en la chamba y en mi casa uso Sublime Text 2 por que IntelliJ hace que mi muy modesta maquina quiera despegar como avion; o por lo menos así suena, sí tu maquina tiene buenos recursos no tendrás gran problema y pienso que disfrutaras mucho de la experiencia usando lo con Grails.
Grails y Groovy son dos cosas separadas y dos grupos diferentes los desarrollan, Groovy ha avanzado mucho, en sus inicios ni siquiera compilaba a bytecode y de eso ya tiene sus ayeres, desde el 2003-2004 si no me equivoco vio la luz, pero definitivamente ha mejorado muchisimo, incluso leí que en ciertas cosas es tan eficiente como Java (no cito los artículos por flojera a buscarlos, pero seguro hay mucho que leer al respecto en Internet).
Grails esta en la versión 2.3.0, por cierto si quieres usar esa versión con IDEA tienes que actualizar a la ultima entrega para evitar problemas, y continuamente están sacando mejoras y hay una gran comunidad que te puede ayudar, ademas muchos libros sin menos preciar la rica documentación con la que cuenta. Definitivamente es algo que vale la pena usar.
En mi opinión (otra! jo) cuando usas Grails tienes que cuidar que tus conocimientos sobre el no se estanquen, sacan mejoras muy rápido, casi cada mes, así que tienes que estar actualizando tu proyecto seguido si no quieres quedarte obsoleto por lento. A veces solo basta con hacer una cambio en un properties y ya.
Suma estos factores que aplican tanto para Grails como para Groovy: gente muy inteligente de tras del proyecto + buena documentación + una gran comunidad + con buena compatibilidad hacia a tras (olvide como se dice) + bonitos logo tipos (no como la de Java, el Duke eso que!!!) + muchos libros del tema + gastar más tiempo expresando te que escribiendo código.
En fin saludos : )
Busco programador para Guadalajara o zona occidente
Hola amigos estoy involucrado en un proyecto de un portal web basado en groovy, me gustaria saber si alguien le interesa participar en el mismo o si conoces alguien que me peudan recomendar.
saludos