Es ruby el java del momento?

by Gastón Ramos

ruby-javaNunca me voy a olvidar cuando empecé a programar con Ruby, todo era nuevo y casi todo era un desafío, no había tanta documentación y las cosas eran bastante artesanales, no existía bundler ni RVM ni Rbenv, sin embargo las cosas se hacían igual :). Me acuerdo bien que me gustaba mucho Ruby on Rails y no sé si ahora diría lo mismo, me gustaba tanto que hasta daba charlas de evangelización y en uno de los slides mostraba una imágen comparando la cantidad de libros que tenías que leer para aprender Java y la cantidad para aprender ruby, la imágen era esta:

Java vs Ruby

Además me acuerdo que las veces que hice algunas cositas con Java no me gustaba la complejidad que llevaba hacer cosas simples, para todo había que crear clases, todo era complejo.
Pasaron ya casi 9 años desde empecé a escribir mis primeras líneas de código en Ruby, he pasado por muchos proyectos, algunos desde cero y otros legacy, aplicaciones más grandes, más chicas, etc, mi forma de programar ha pasado por varios estadíos, desde el 2004 cuando conocí Test Driven Development y me hice fanático, cuando no escribía casi nada sin escribir un test, y cuando me peleaba con todo el mundo para que escriba tests o para que corra los tests antes de pushear :). Hoy con mucha más experiencia encima, me doy cuenta que Ruby se parece mucho a java en algunas cosas y eso no me gusta, las aplicaciones son cada vez más complejas, se ha perdido “lo artesanal”, cada aplicación de Rails en la que he trabajado tiene como promedio 5000 Líneas de código sin contar las dependencias y otras 10000 líneas para los tests, el 90% de la gente escribe sus aplicaciones usando Ruby on Rails agregando gemas para cada cosa que necesita sin pensar en el costo extra que eso conlleva, el 90% usa Rspec sin si quiera darse la posibilidad a la duda y muy pocos tienen tests bien escritos de manera que al modificar algunas pocas líneas no se rompan 50 tests.
Y como si esto fuera poco, existen cada vez más cosas algunas menos necesaria que otras así que si alguien quiere empezar a programar en una app existente en ruby, cuales son las cosas que debería aprender?

[ Ruby ]
[ Rake ]
[ RVM / Rbenv ]
[ Rails ]
[ Rubygems ]
[ Rspec ]
[ Sidekiq / Rescue ]
[ Capybara ]
[ Cucumber ]

Ruby books
Y la lista tranquilamente podría seguir.

Pero volviendo al tema de “lo artesanal” siento como que ya está todo “programado” y pensado, si hay que hacer una página web entonces tenemos que usar Ruby on Rails, para escribir los tests hay que usar Rspec aunque si sos un poco revolucionario vas a usar minitest, hay alguna acción que lleve mucho tiempo? entonces seguro que tenemos que usar Sidekiq o Rescue. Del lado del servidor existe muy poca gente que se ponga a armar una infraestructura de producción para una app chica, la mayoría usa Heroku o cosas similares.

Otro tema interesante es la forma de trabajo del día a día, dónde parece ser que la única manera de llevar adelante un proyecto de software es utilizando Scrum con daily meetings…ufff “Qué hiciste ayer?”, “Qué vas a hacer hoy?” participé en algunos proyectos donde sufrí la peor variante de Scrum, dónde los sprints duraban una semana y teníamos en algunos casos más de 10 reuniones por sprint, “IPM”, “Post Mortem”, “Retro” son algunos de los nombres de estas reuniones, pero bueno voy a cambiar de tema por que me empieza a doler la cabeza…

Podría por ejemplo hablar de feature-branch, pero a lo mejor ese es tema para otro post otro día.