martes, 18 de setiembre de 2007

Why Ruby is the tits?

Scott Hanselman publico hace unos meses este articulo en su blog. Si bien no contesta muy claramente la pregunta de "Why it's the tits?", hace un par de reflexiones bastante interesantes sobre los lenguajes de programación y que es lo que hace a un buen lenguaje.

"Programmer Intent or What you're not getting about Ruby and why it's the tits"

En particular hay dos puntos que me gustaron:

  • Expresividad del lenguaje: Viendo los comentarios del post, hay gente que no valora mucho esta cualidad de un lenguaje, lo cual es comprensible. Creo que la expresividad del lenguaje realmente se valora una vez que se tiene que mantener ese código. Es una simple cuestión de que distintos proyectos tienen distintas necesidades, y aún así creo que es el origen de la mayoría de las disputas por "X es mejor lenguaje que Y". Si estás trabajando solo y en un proyecto relativamente simple (por lo menos en cuanto a reglas de negocio, bien podría ser técnicamente complejo) no existe mucha necesidad de que el código sea muy expresivo. Pero si estás en un proyecto junto con otras 5 o más personas, alta rotación de personal, documentación con huecos (si sos un tipo con suerte) y reglas de negocio caprichosas (un escenario alarmantemente común en Uruguay), más vale que el código te diga que está haciendo porque nadie más lo va a hacer.
  • Sharpening the saw: "Uno debería aprender un lenguaje cada año". Ok, eso es un poco difícil de llevar literalmente a la práctica, pero es una buena meta. El aprender un lenguaje no solo sirve para utilizar. Aún cuando nunca programes nada, de cada lenguaje se pueden aprender técnicas y buenas prácticas que son aplicables en otros. Y por supuesto, es una herramienta más para tener guardada para cuando la precises. Así que: a afilar el hacha!

1 comentario:

el Kave dijo...

Leo respondió con un mail al post. Para darle un poco más de formalidad a este humilde blog, copio el mail y respondo a continuación :)


Encuentro bastante desagradable como alguna gente se fanatiza con
Ruby. No es que piense que es un mal lenguaje, o que crea que muchas
cosas buenas que se dicen por ahí de él no son ciertas. Tal vez sea un
problema mio con las actitudes fanáticas en general.
Pero me gustaría señalar algunas cosas:

* Encuentro los ejemplos del artículo extraordinariamente sesgados. El
primer ejemplo se podría escribir:

def shutter_clicked
if @camera.on? && @camera.memory_available?
capture_image
end
end

y no queda tan obtuso, ni tan lejano de la segunda forma.

* Creo que los lenguajes, luego de los 70s, han tratado de evitar el
arcaico criterio de: "Si se parece al lenguaje natural, entonces es
entendible.", que engendró cosas como COBOL.

* "Every language is, in a way, a Domain Specific Language." Es verdad
que todo lenguaje de propósito general tiene una inclinación a
expresar mejor algunos dominios que otros, pero me parece que esto es
un abuso grosero del término.

No se si están todos de acuerdo con lo que acabo de decir.
Leo.


---

Lo que rescaté del artículo son dos puntos muy independientes de Ruby: la importancia (en algunos contextos) de la expresividad de un lenguaje y lo de "afilar el hacha". De hecho, algo que me gustó es que el tipo no es un fanático de Ruby. Está aprendiendo solo para tener una herramienta más. La mayoría de su blog esta dedicado a .NET y creo que esta semana entró a laburar en Microsoft.

El código que propones esta bien, pero es un simple tema de preferencias. Como dice el flaco: "Ruby folks have their own aesthetic and sense of beauty." El poner el IF al final a mi también me chillaba pero entre Ruby y las Rules de Genexus ahora me parece bastante claro. El mostrar la expresividad de un lenguaje en un par de líneas es bastante difícil y puede parecer poca la diferencia. La manera de evaluarlo realmente seria tratando de entender varios miles de código, una de esas situaciones en las que "cualquier monedita ayuda"

COBOL me gustaba. Pero no creo que la expresividad de un lenguaje tenga que ver con ser Verbose. Por ejemplo, el utilizar OOP ayuda bastante. Y también los DSL. Comparto lo de "Every language is, in a way, a Domain Specific Language." en el sentido, no literal, de que es útil pensar en un lenguaje cualquiera como un DSL al momento de decidir si es el adecuado para mi proyecto. Mas allá de las capacidades técnicas (que probablemente van a ser más importantes) es un factor a tomar en cuenta la afinidad del lenguaje base con el tipo de proyecto.

Por comentarios posteriores del Hanselman, una de las razones por las que "Ruby is the tits" es la posibilidad de hacer mini DSL's. Yo no he visto mucho de eso. Vi algún ejemplo por el lado de hacer un lenguajecito para facilitar el que un funcional se pueda hacer scripts de testeo de integración. Supongo que la mayor potencia viene por el lado de que uno generalmente se hace su propio "frameworkcito" para trabajar, y así lo puede integrar aún más al lenguaje.

(si todavía estas leyendo... gracias :D)