Um famoso debate no  mundo da computação é entre aqueles que  são "contra" e "a favor" da  instrução GOTO.   Este debate  nunca fez muito  sentido pra  mim.  A instrução GOTO é o cerne de toda a computação, mas é óbvio que é freqüentemente mais útil programar pensando em estruturas como um "for"...  Só entendi a briga agora que  li aquela  carta do  Dijkstra que dizem  ter inaugurado  a polêmica. Esta carta é sempre citada, mas foi raramente lida de fato, fazendo-a sofrer da mesma "síndrome do  Necronomicon" que afeta por exemplo  o livro Perceptrons de Minsky.
A carta de Dijkstra menciona uma  preocupação que nada tem a ver com eficiência de programas,  ou de  capacidade de representação  de linguagens.   Dijkstra se preocupava com as limitações cognitivas  do homem, e sua capacidade em entender naturalmente  um programa  de  computador.  Sua  preocupação  era com  questões envolvidas na  gênese da atividade  de "programador de computadores",  algo que acredito  ter sido  central em  sua vida.  Tem a  ver ainda  com a  criação das linguagens de computador.
Acho  muito anacrônico  as  pessoas continuarem  esta  discussão. Linguagens  de computador já  existem pra  valer, e continuam  sendo criadas.  A  atividade de programador já é algo  definitivamente estabelecido.  Precisamos considerar que estamos em um contexto diferente do de Dijkstra. É um absurdo transformar aquela questão em uma disputa entre programadores de Java, e projetistas de FPGAs.
Eu sempre simpatizei mais com a turma "a favor" do GOTO por considerar absurda a censura que se  impõe sobre esta instrução que,  junto da execução condicional, constitui a  essência da computação.  O  que eu nunca havia  compreendido é que aqueles  que  se  colocam  "contra"  a  instrução estão  preocupados  é  com  a legibilidade de códigos, e a facilidade em se gerar códigos corretos, e não com os fundamentos da teoria da computação e arquitetura de computadores.
Na verdade existem duas atividades distintas, ligadas à computação, onde ocorre um   uso  parcimonioso   ou  indiscriminado   desta   instrução  potencialmente críptica. Aqueles preocupados com a manutenção de códigos, ou com a confecção de programas para  fins específicos,  devem de fato  buscar padronizações  como as oferecidas  pela programação  estruturada. Este  grupo de  pessoas, ao  me ver, deveria se  identificar com o sentimento de  Knuth ao criar a  linguagem WEB, e ainda propor  que "programas  deveriam nascer corretos,  e não depurados  até a exatidão". Entretanto, Knuth é tido como  um opositor de Dijkstra na questão do GOTO...
Existe outro grupo  de pessoas que se preocupa com o  fenômeno da computação em si, e não  com a confecção de programas para serem  facilmente lidos por outras pessoas, ou para atender a encomendas.  É nesta atividade que pode acontecer de nos  depararmos com programas  corretos, mas  difíceis de  compreender.  Nestas ocasiões o programa  sendo estudado é um enigma sendo  resolvido, um código que se  decifra.   São  de  fato  programas  que  desafiam  as  nossas  capacidades cognitivas  ao  tentarmos  entendê-los,  e  é de  se  compreender  que  pessoas acostumadas a trabalhar em uma das atividades estranhe os programas que ocorrem na outra.
A  criação e  análise de  programas  do primeiro  tipo, os  claros, naturais  e fáceis,  são valorizadas  por profissionais  de diversos  tipos, que  lidam com questões  como manutenção  de códigos  e portabilidade.   No caso  de programas crípticos, esta programação  é valorizada por um número  de pessoas que suponho serem aquelas identificadas  como "escovadores de bits". Acredito  que o motivo da intensidade nos debates sobre a instrução  GOTO se deve ao fato de que estas pessoas  se sentem  ofendidas pela  sugestão  de que  esta instrução,  que é  a epítome da atividade desenvolvida por elas, seja considerada como inerentemente maléfica.
Acredito que  este grupo de  "escovadores de bits"  possa ser comparado  com os pesquisadores  de ciências  básicas, como  físicos que  fazem  experimentos com forças  básicas  de interação  na  busca  de novas  formas  de  obter um  certo efeito. Do outro lado teríamos engenheiros e técnicos na busca por dispositivos fáceis de se produzir e utilizar.
Já passou da hora de amadurecer o debate,  e ver que não há o que se debater. A remoção do GOTO em linguagens de  alto-nível é um fato cada vez mais fortemente estabelecido.  Diria  ainda que definitivamente,  com a criação  das instruções "try/catch"...   Ou  talvez   falte  ainda  uma  boa  forma   de  se  programar sinteticamente saídas alternativas de procedimentos...
***
Temos que entender que esse debate  naquela época tinha a ver com programadores que queriam programar  em alto-nível, e eram obrigados a  fazer GOTO porque não havia alternativa.   Eles queriam se  libertar das amarras cognitivas  do GOTO. Hoje  em dia parece  que existe  uma tendência  de programadores  de alto-nível quererem amarrar  os de baixo nível,  exigindo que estes abandonem  o GOTO. Que sentido faz  isso?!?  Porque as pessoas  não podem ser  simplesmente felizes no mundo moderno,  em que pessoas como Guido  van Rossum e Larry  Wall podem criar suas linguagens sem o trabalho que isto exigia nos tempos de Grace Hopper?
Os tempos mudaram.  Precisamos é  avaliar melhor os tais limites cognitivos que interessavam a  Dijkstra. Ele percebeu alguns,  e lutou contra eles,  e foi bem sucedido. Precisamos  avançar esse  trabalho, mas isto  não significa  de forma alguma fazer com que os escovadores de bits se ajoelhem e sejam proibidos de criar coisas como programas auto-modificáveis.
Precisamos  estudar melhor  ainda a  forma como  pessoas interpretam  e escrevem programas. Precisamos entender  melhor o processo, agora no  novo contexto onde existem coisas como Perl e Python e  Java e LISP e etc. Precisamos nos deslocar para esse novo mundo onde a existência de um número infindável de linguagens de computador diferentes  existe, e esquecer,  ou melhor, permitir que entre  para a história o mundo de Dijkstra com seus cartões perfurados e etc.
Dijkstra  não  usava   editor  de  texto,  não  gostava   nem  de  máquinas  de escrever. Não usava calculadora, não tinha televisão. É um sujeito que viveu um período muito específico da história em que isso era meio que normal, e manteve essa cultura até  o fim da vida. Ao  pensar nele me lembro um  pouco de Maxwell escrevendo seu  magnum opus sobre eletromagnetismo  à luz de  velas.  Não quero dizer que  ele era retrógrado, o  que quero dizer é  que ele subiu  um degrau no desenvolvimento da  humanidade, e  temos agora que  nos reconhecer  neste nível mais alto, e  pensar daqui pra cima,  e não ficar pulando lá  pra baixo achando que esse foi o final da história.
Em  outras palavras, as  pessoas agem  como se  o desenvolvimento  posterior da evolução epitomizada por aquela carta de Dijkstra fosse o BANIMENTO do conceito de  GOTO. Fosse  a  proibição desta  palavra,  fosse tornar  imoral que  alguém escrevesse  um  código  desta  forma.   Assim  surge  a  animosidade  entre  os escovadores de  bits e programadores  de alto-nível, algo  que não faz  o menor sentido.
Coisas como  programas auto-modificáveis foram  encontradas nos idos de  1950 e 1960, e  passaram a ser  cultuadas por alguns  %os escovadores), e  odiadas por outros, os  programadores que não tinham muito  tempo pra perder com  isso, e a quem estas entidades crípticas atrapalhava. Hoje estes conseguiram se realizar, adquirindo linguagens que atendem a suas necessidades. Mas parece que uma forma de  trauma  surgiu.  As  tais  entidades  crípticas,  as esfinges  ou  quimeras computacionais,  que  antes  imperavam   devido  à  inexistência  de  linguagens sofisticadas  e à  juventude da  atividade de  programação, estão  sendo agora requeridas  a se  retirarem do  universo, estão  sendo banidas  e recriminadas.
Estas estruturas  são tidas como obscenas,  num sentimento que  lembra talvez o horror  da comunidade  de matemáticos  frente a  conceitos como  os  fractais e atratores  caóticos  %Mandelbrot  denuncia   este  preconceito  ingênuo  em  sua formidável obra). Este sentimento deve ser rejeitado.
***
Dijkstra fez  um apelo para que as  pessoas mergulhassem de cabeça  no mundo da criação de  linguagens de computador.  A  briga era com pessoas  que passaram a vida  programando em baixo-nível,  e diziam  que "passei  a vida  fazendo isso, porque haveria  de parar"?   A briga era  contra pessoas  que não viam  que era possível  se  criar  uma  linguagem  de  um  nível  tão  alto  e  distante  dos circuitos.  Era contra  pessoas que  possuíam  uma restrição  cognitiva que  as impedia de ver o quão longe a idéia de linguagem de programação podia ir.
Antigamente  existia apenas  a  programação  de baixo  nível,  que irritava  as pessoas com desejo de programar  em alto-nível.  Agora que ocorreu a revolução, e foi criado  o mundo da computação de alto-nível, estas  pessoas que o habitam parecem querer sugerir que aquele mundo arcaico deve como que ser extinto. Elas não vêem  que o  que houve foi  uma expansão  do universo da  programação. Elas acreditam que antes havia algo "errado" , e que agora o erro, o "bug", deve ser exterminado.
O que  havia não era errado. Era  apenas pequeno demais. Agora  já cresceu... A instrução  GOTO e  os programas  auto-modificáveis ainda  tem o  seu  lugar.  A existência  de  alternativas  que  agradam  mais  a  platéias  específicas  não significa  que  aquele outro  show,  que  antes era  o  único  que havia,  deva acabar. Tem lugar pra todos!...
O  sentimento de  guerra dos  anos 1960  deve ser  encerrado. Temos  que acabar também com  essa coisa sádica na programação  de falar para as pessoas  o que elas não  podem fazer  ou o  que devem  fazer, ficar  ditando os  comportamentos dos outros.   Cada um  faz o  que  quiser.  O  importante é  sempre divulgar  todas possibilidades, em detalhes, e tentar compreender o que é mais adequado para que situação. Se um grupo de pessoas adota alguma restrição em um projeto coletivo, e a impõe através de uma  hierarquia visando a melhor inter-operação das partes, bom pra  eles.  Não podemos ficar  dentro das universidades  falando em "acabar com o GOTO".  Universidade é pra conhecer bem e avaliar todas possibilidades, e aconselhar sobre quando evitar ou não o tal GOTO, ou o Java, que seja...
O  importante é  que as  tais  restrições cognitivas  mencionadas por  Dijkstra permanecem muito pouco estudadas.  O mundo da computação e programação continua sendo um bocado  experimental, selvagem e confuso, em grande  parte devido a um sentimento generalizado de vaidade de cada um por suas preferências.  Ou talvez pelas  preferencinhas   do  homem  mais  rico   do  mundo,  e   um  punhado  de mega-corporações.
Tem que acabar esse "contra-golpe" de programador de Java fazer careta pra GOTO e pra programa  auto-modificável e o escambau, em retaliação  por todos anos em que as  pessoas foram obrigadas a  escovar bit pra utilizar  os computadores em seus serviços.  Chega de trauminha, acabou a adolescência.  Os programadores de "demos", vírus e outras paradas  até gostam do sentimento de marginalidade, mas essa infantilidade tem que acabar, pelo menos dentro das universidades.
2008/01/07
GOTO o_chuveiro;
Marcadores:
anacronismo,
computação,
desconhecimento da história,
futuro,
hacker,
história,
século XXI,
síndorme de Necronomicon
Subscribe to:
Post Comments (Atom)

3 comments:
Cara, parabéns pelo texto! Eu estava procurando na internet qual era o motivo dessa briga pelo GOTO. Porque será? Eu perguntei para o meu professor de Java se dá para usar goto no programa, ele quase deu um infarto... Ficou me dando esporro. Mas será que esse tal de goto é um mal da informática?
Eu usava tanto na época do Visual Basic e nenhum programa ficava mal estruturado. Eu penso assim: O programador escolhe o que quer fazer no programa. Como vai ficar a estrutura, isso é coisa do programador. Todo professor de faculdade é meio bitolado, quer que a estrutura seja do jeito dele, eles querem me condicionar para ser daquele jeito e não deixam que eu dê outra solução para o mesmo problema.
Gostaria de conversar contigo sobre esse tema!
Olá, Phill. Obrigado por sua participação!...
Poisé, você presenciou o fenômeno pessoalmente. Existe um numero significativo de programadores por aí de todas idades e posições hierárquicas que têm esse tipo de atitude em frente à menção do GOTO... Temos que acabar com esses faniquitos!
Vamos debater!!! :) Mas antes eu recomendo veementemente que você leia não só essa carta original do Dijkstra, mas ainda um artigo escrito pelo Knuth, sobre o qual só fiquei sabendo pouco depois de ter escrito esse texto aí no meu blog.
O artigo chama-se "Structured programming with goto statements", é bastante extenso, e mata a pau. Eu pretendo ainda escrever de novo sobre o assunto, de forma mais clara e direta, e agora sob a luz desse artigo do Knuth... De repente vc até me ajuda! :)
Tudo bem, eu vou ler esses textos, já que eu gosto de ter a minha própria opinião a respeito das coisas do mundo.
O que eu mais vejo é que os alunos desses cursos de computação simplesmente repetem o que o professor diz.
Meu caso é diferente, apesar do Basic não ter moral nenhuma e alguns programadores começam a menosprezar quem usa linguagens mais simples do que Java, C+, eu acredito que o que você disse é certo e bem polêmico.
Tão polêmico quanto o aborto. Por incrível que pareça é! Por exemplo, o direito de usar GOTO para fazer o que eu quiser, usar quando eu quiser é meu. Não acho justo retirar isso e ter que fazer isso de um jeito mais complexo.
O GOTO me ajudava muito no Downtube (www.downtube.kit.net), claro que de vez em quando o programa dava um problema ou outro mas era só corrigir.
O que eu acho mais impressionante é que vários programadores que se consideram tecnófilos revolucionários, conseguem ter mente tão fechada quanto a isso.
É impressionante e contraditório ao mesmo tempo.
O negócio é o seguinte... se eu questionar alguma coisa com o meu professor, eu reprovo na faculdade!
Então deixa quieto!
Post a Comment