Fanboys de la Programación Orientada a Objetos


TV-Online-TDT-Spain, el proyecto del colega @ruvelro está ganando popularidad y ya son dos programadores los que amable y desinteresadamente han aportado código para mejorar su idea original. Esto me ha hecho acercarme más a un proyecto de software libre en el que los programadores no se conocen pero colaboran para sacar adelante un concepto común. Al no dedicarme a la programación, todo esto me resulta novedoso y ha servido para demostrarme que el hype por la programación orientada a objetos sigue siendo omnipresente.

No pretendo criticar la POO, en general, ni a estos programadores, a los que les agradezco su colaboración, pero hay que reconocer que la POO se usa de forma indiscriminada desde hace 25 años. No estoy cualificado para criticar (como Rob Pike) un paradigma completo que, además, es el más popular del mundo. Yo mismo utilizo esta metodología ya que en python es irrenunciable pero creo que es necesario denunciar la creación de clases indiscriminadas. Es aceptable que gente sin conocimientos utilice las herramientas que tienen a su disposición de la forma que les resulte más cómoda pero unos programadores deberían tener el criterio suficiente para discernir en qué momento utilizar la POO y en qué momento resulta ridículo.

Me refiero en concreto a este pequeño script que parsea un JSON. Los principales argumentos para renunciar a la POO son que este es un código insignificante que no va a escalarse porque su utilidad está perfectamente conseguida. Así mismo no es necesario modularizar el código porque tampoco se va a reutilizar. De hecho, las clases TvOnlineAPP y GitHubMD ya ni siquiera se utilizan pero siguen en el archivo. Hay que pasar la escoba de vez en cuando...

La única clase que se ejecuta es GitHubJSON. Como norma general diría que si solo existe una clase, es mejor que no exista (quiero reiterar que nunca va a haber más clases). Además, esa clase solo se instancia una vez y en el interior del objeto solo hay un método, además del constructor. Un enfoque procedimental parece más acertado para este script, es más eficiente y claro que su homólogo orientado a objetos. Dejemos de matar moscas a cañonazos y haremos mejor código.

Para que se entienda mejor mi argumento he creado un commit con las modificaciones que creo que eliminan la POO innecesaria aunque si mantuviera ese archivo, lo reescribiría de cero. Como este cambio es totalmente irrelevante, sólo lo quería mostrar con fines didácticos y críticos. Ni siquiera voy a hacer abrir un pull request, en parte, porque no quiero que el autor original se lo tome como un ataque personal. La frialdad de las redes distorsiona nuestras intenciones originales, pero esto es tema para otro post.

Como colofón, a modo de moraleja, voy a recordar la navaja de Occam, principio que debería guiar nuestro proceder: "Pluralitas non est ponenda sine necessitate".