El goto es bello... ¿o no?

La tira del webcomic xkcd de hace unos días me pareció muy buena. Me recordó al debate que mantuvieron Edsger Dijkstra y Donald Knuth acerca de si era necesario o no.

La controversia se generó cuando Dijkstra envió un pequeño artículo al Communications of ACM, dedicado exclusivamente a la sentencia goto. El editor, a fin de publicarlo rápidamente, decidió publicar el artículo como una carta titulada “Go To Statement Considered Harmful” (Sentencia Go To Considerada Perjudicial). En ella Dijkstra argumenta que el uso del goto debería eliminarse en lenguajes de alto nivel (excepto en código máquina) ya que dificultan el análisis y la depuración de los programas. Por otro lado, Knuth en su artículo “Structured Programming with goto Statements” (Programación estructurada con sentencias goto), explica ciertas situaciones en las que conviene usar el goto. Éstas son situaciones en las que el lenguaje no dispone de una estructura específica y el goto puede simularla eficientemente, como por ejemplo, el tratamiento de excepciones.

Las frases que siempre he escuchado y que les atribuyen son, la afirmación de Dijstra:

“La programación es una ciencia y el goto es aberrante”

Y la contestación de Knuth:

“La programación es un arte y el goto es bello”

Supongo que estas afirmaciones son más bien una leyenda o mito, ya que nunca he conseguido ninguna referencia, pero creo que resume bastante bien la discusión que mantuvieron.

En la actualidad, con los lenguajes de programación que más se usan (Java, .NET) carece de sentido el uso del goto para el control de excepciones, ya que incluyen éstas y su tratamiento como parte del lenguaje.

Dejo a continuación la tira de xkcd y una traducción libre de la misma.

GOTO

Viñeta 1: Podría reestructurar el flujo del programa - o usar un pequeño ‘goto’

Viñeta 2: Que le den a las buenas prácticas, total ¿qué va a pasar? - goto main_sub3; - COMPILAR