2008/01/07


Estaduzunidificando Einstein

Eu travo uma luta solitária contra o endeusamento de Albert Einstein, e seu tratamento como pop-star e ícone único da ciência.

Outro dia peguei pra ler um pedaço duma biografia dele que saiu. Achei bacana, e me fez pensar se às vezes não pego um pouco pesado demais com o velho Beto.

Eu gosto de meter o malho nele seguindo minha teoria de que ele e Newton possuíam um mau-hábito (vício?) de escrever mal, e ainda não dizerem bem de onde tiraram suas idéias, e enfim, não se importar com toda a parte "social" da ciência, criando uma imagem de serem gênios inescrutáveis ao serem cientistas desajeitados.

O livro me fez ver um pouco que no caso do Einstein, além dessa questão do gênio inescrutável, existe ainda uma outra coisa, que é o lance pop-star, que é separado. É o lance Marilyn Monroe/Elvis... Aí que reparei que é MAIS Marilyn Monroe/Elvis do que parece. É mais forte, porque na verdade Einstein passou por todo um processo de estaduzunidificação quando ele foi pros EUA devido à WWII!

Apesar de já ser meio que perseguido pela imprensa ingênua e sensacionalista desde quando foi pros EUA lá pros anos 1930, a famosa foto dele mostrando a língua é de 1951. Todo o espírito que depois veio a criar os mencionados ícones pop já estava lá. Essa coisa que as pessoas tem com o Einstein tem muito a ver com isso, portanto, e essa minha coisa com o Einstein tem a ver com essa raiva que eu já tinha com isso. Mais uma vez, duas idéias que eu tinha que são na verdade uma só. A melhor coisa do mundo é descobrir que dois certos conceitos são na verdade o mesmo! :)


GOTO o_chuveiro;

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.