sábado, 9 de junio de 2007

El retorno de FizzBuzz




Como ya había mencionado en un post pasado, en el Ruby Quiz de la semana pasada se ponía a prueba a la comunidad Ruby con el quiz más participado hasta el momento: el FizzBuzz. Sin embargo, siento que James (reviewer de Ruby Quiz) no dijo todo lo que esperaba escuchar.

Comenzando por una cita del autor del artículo mencionado en el post pasado:

FizzBuzz es presentado como el mínimo nivel de comprensión requerida para ilustrar suficiencia y habilidad. No hay gloria en resolver esta prueba. Incluso si la puedes escribir en cinco lenguajes diferentes o en menos de 50 bytes.

El punto del artículo original fue reflexionar acerca de porqué debemos hacer la prueba del FizzBuzz. La parte mecánica de resolver el problema es irrelevante
que es exactamente lo que yo pienso. No quiero hacerme ilusiones, pero pienso que la mayoría de los programadores, a cualquier nivel, pueden resolver tal programa fácilmente.

Sin embargo, orientado hacia la comunidad Ruby, el problema exponía algo más interesante: Bien, ya sabemos que todos pudieron resolver el quiz adecuadamente... entonces, ¿hay una solución mejor que otra?

En el resumen del quiz, James menciona:

La mayoría parece concordar en que al menos una meta [del quiz] es demostrar una mínima capacidad para escribir código. La otra meta que asumimos es que los entrevistadores buscan cierto grado de cleverness.

Siendo cleverness una palabra engañosa y difícil de traducir. En el sentido literal, significa astucia, pero en el contexto de la programación, significa utilizar trucos "listos" para hacer el código más corto, o rebuscado, sin necesariamente ser más sencillo, que suelen ser todo lo contrario.

Esto debido a las reacciones de muchos rubistas pretendiendo "golfear" su código. Sin embargo, esto no se apega tanto al quiz, ya que personalmente, no diría algo así en una entrevista de trabajo:

Pero hay muchos otros aspectos que hacen del programador, y del software por ende, un producto de calidad. Aspectos como la escalabilidad, la legibilidad, la robustez, etc.

Es por eso que llegaron soluciones extendiendo el método a la clase Numeric (una de las delicias de Ruby), para ser extendible; otros tomaron en cuenta los comentarios para la documentación; hubo quienes hicieron pruebas de unidad. Todas estas alternativas muy válidas. Sin echar guayabazos, una de mis soluciones contemplaba la escalabilidad, al extender la clase a cualquier rango y condición para los números. Hubiera sido interesante analizar este tipo de parámetros en el quiz.

En fin, creo que FizzBuzz ya ha demostrado lo que tenía que demostrar, y si bien hizo más ruido de lo que debería, la perspectiva que nos presenta es alarmante: tener que recurrir a programas tan sencillos para darse cuenta de la incapacidad de muchos programadores.

No hay comentarios: