Um dos artigos seminais da ciência da computação é o Edsger Dijkstra’s 1968 paper GOTO considerado prejudicial.
Há vários anos, conheço a observação de que a qualidade dos programadores é uma função decrescente da densidade de declarações go to nos programas que eles produzem. Mais recentemente, descobri por que o uso da instrução go to tem efeitos tão desastrosos e me convenci de que a instrução go to deveria ser abolida de todas as linguagens de programação de “nível superior” (ou seja, tudo, exceto, talvez, o código de máquina simples).
O abuso do GOTO é, felizmente, uma lembrança há muito esquecida nas linguagens de programação modernas de hoje. É claro que isso é apenas um risco menor em comparação com o declaração COMEFROM, mas estou feliz por já termos passado por isso.
O GOTO não é de todo ruim. Ele ainda tem alguma relevância para o código atual. Juntamente com muitos outros programadores, sempre recomendo o uso de cláusulas guard para evitar código de setae também recomendo que o senhor saia mais cedo de um loop assim que encontrar o valor que está procurando. O que é um early Return
, ou um early Exit For
que não seja um GOTO com escopo restrito?
foreach my $try (@options) { next unless exists $hash{$try}; do_something($try); goto SUCCESS; } log_failure(); SUCCESS: ...
A publicação de um artigo tão influente nesse formato específico levou a uma reação quase imediata do efeito de clone de neve, como documentado na Wikipedia:
Frank Rubin publicou uma crítica à carta de Dijkstra no CACM de março de 1987, onde ela apareceu como ‘GOTO considerado prejudicial’ Considerado prejudicial. O CACM de maio de 1987 publicou outras respostas, tanto a favor quanto contra, como ‘”GOTO Considerado Nocivo” Considerado Nocivo’ Considerado Nocivo?. A resposta do próprio Dijkstra a essa controvérsia foi intitulada “On a somewhat disappointing correspondence” (Sobre uma correspondência um tanto decepcionante).
Essa é facilmente uma das coisas mais engraçadas que já li na Wikipédia. Quem disse que os cientistas da computação não têm senso de humor? Mas estou divagando. A maioria dos desenvolvedores de software provavelmente está familiarizada, pelo menos de passagem, com o GOTO considerado prejudicial. Mas aqui está o que eles podem não sabem disso:
- O artigo foi originalmente intitulado “A Case Against the Goto Statement”; o editor do CACM na época, Niklaus Wirth, mudou o título para a versão mais inflamada que conhecemos hoje.
- Para acelerar sua publicação, o artigo foi convertido em uma “Carta ao Editor”.
Em outras palavras, Wirth cutucou e cutucou o conteúdo até que ele se tornasse incendiário, para maximizar seu impacto. A frase “considerado prejudicial” foi usada de forma bastante intencional, conforme documentado no sempre excelente Language Log:
No entanto, “X considerado prejudicial” já era um clichê jornalístico bem estabelecido em 1968 – e foi por isso que Wirth o escolheu. A ilustração abaixo mostra a manchete de uma carta ao New York Times publicada em 12 de agosto de 1949: “Rent Control Controversy / Enacting Now of Hasty Legislation Considered Harmful”.
Tenho certeza de que esse não é o exemplo mais antigo dessa frase usada em uma manchete ou título – eu a escolhi apenas como uma ilustração conveniente de susage algumas décadas antes da data do artigo de Dijkstra.
Observe que esse exemplo também está no título de uma carta um pouco irritada ao editor – provavelmente não foi por acaso que o primeiro exemplo que veio à mão de “considered harmful” em um título anterior a Dijkstra foi desse tipo.
Portanto, quando o senhor imitar o estilo “considerado prejudicial” baseado no trabalho desses famosos cientistas da computação em 1968, tenha essa história em mente. O senhor está emulando uma carta ao editor ligeiramente rabugenta. Isso é assustadoramente comum – agora há 28.800 páginas da Web com a frase exata “considered harmful” (considerado prejudicial) no título.
Isso leva, talvez inevitavelmente, ao artigo de Eric Meyer Ensaios “Considerados prejudiciais” Considerados prejudiciais. Ele ressalta que escolher esse estilo de diálogo é, em última análise, contraproducente:
Há três maneiras principais pelas quais os ensaios “Considered Harmful” causam danos.
- A redação de um ensaio “considered harmful” geralmente serve para inflamar qualquer debate em andamento e, portanto, torna muito mais difícil encontrar uma solução por qualquer meio. Aqueles que apóiam o ponto de vista que o ensaio ataca são mais propensos a se aprofundar e defender seus pontos de vista por qualquer meio necessário e são menos receptivos ao debate racional. Ao afastar ainda mais os pontos de vista opostos, torna-se mais provável que o ensaio cause uma ruptura permanente entre os pontos de vista opostos em vez de contribuir para a resolução do debate.
- Os ensaios “considerados prejudiciais” são mais prejudiciais às suas próprias causas. A publicação de um ensaio “considerado prejudicial” tem uma forte tendência de alienar as partes neutras, enfraquecendo assim o apoio ao ponto de vista que o ensaio apresenta. Um ensaio “considerado prejudicial” suficientemente dogmático pode encerrar um debate em favor do ponto de vista que o ensaio considera prejudicial.
- Eles se tornaram clichês enfadonhos. Ninguém mais quer ler ensaios “considerados prejudiciais”, porque já os vimos milhares de vezes antes e não aprendemos nada com eles, pois estávamos ocupados demais sendo incomodados para realmente ouvir os argumentos apresentados.
Se o senhor tem um argumento a defender, por favor, escrever um ótimo ensaio persuasivo. Entretanto, se quiser maximizar a eficácia de suas críticas, o senhor deixará o termo “considerado prejudicial” de fora de sua redação. A técnica “considerado prejudicial” pode ter funcionado para Wirth e Dijkstra, mas, a menos que o senhor esteja planejando se tornar um cientista da computação mundialmente famoso como esses caras, sugiro deixá-la em 1968, onde ela pertence.