quarta-feira, 29 de setembro de 2010

Propriedade emergentes II - programação procedural.

Outro exemplo muito bom para emergência é a programação procedural. Em vez de se conseguirem resultados recorrendo a descrições estáticas como jpegs, mapas de bits, etc, a programação procedural diz antes quais são as regras a seguir para se conseguir determinado efeito. A animação e a música emergem do processo descrito pelo programa em vez de estarem descritas na programação.


Isto é o modo como também na natureza muitos padrões complicados emergem a partir de regras locais mais simples. Por isso, a informação toda para fazer um animal existe em cada célula do embrião e pode descrever uma coisa tão complexa que se fosse feito um plano seria absolutamente gigantesco. Cada célula sabe o que fazer a cada momento em função do que tem à sua volta e isso chega para dar origem ao ser vivo adulto. Em seres vivos simples, algumas dessas regras estão à vista, como por exemplo: "cresce num sentido e depois divide em 2" dando origem a ramificações.

Na programação normal isto é pouco utilizado. É muito mais difícil programar o processo do que dizer: "agora cola este mapa de bits". Mas se se programar o processo, consegue-se fazer emergir de poucas linhas de código coisas absolutamente incríveis. É como se pudéssemos dizer o que queremos sem ter de por tudo no programa. Os objectos e funções só estão no código em principio, pois resultam da execução do programa. É tudo criado em tempo real.

Mas existem programadores, muitas vezes amadores, que se entretêm a ver com 64k (pode ser outro limite mas nas "intros" esta é a dimensão típica) o que é cada um consegue fazer. Existem mesmo concursos.

Por exemplo, este vídeo dos multi-premiados Farbraush designado por "fr-08: .the .product".  é o resultado  no ecrãn da execução de um programa de 64k e foi feito em 2000: (enquanto esta a ver lembre-se que são apenas 64kb! - o velho spectrum tinha 48kb, e uma pen  usb de 1gb são 1000 x 1000kb, para terem uma ideia). Os vídeos são o resultado de programas que não têm sequer a dimensão do ficheiro de texto que poe este post no ecrã:

http://www.youtube.com/watch?v=LkEsP9H2HGM  (não estou a conseguir por aqui os vídeos, por isso vão links)


Uma vencedora do Breakpoint em 2003:

 http://www.youtube.com/watch?v=pq-aLBNwpPQ&feature=related

E esta de 2009 tem nada mais nada menos que 4kb:

 http://www.youtube.com/watch?v=FWmv1ykGzis

E o jogo Kkrieger, um "first person shooter" que apesar de estar cheio de bugs (nunca foi acabado) consegue fazer coisas incríveis com 96kb. Cheguei a experimentá-lo há uns anos num XP 32 bits e funcionava razoavelmente. A pagina da Wikipédia é esta:

 http://en.wikipedia.org/wiki/.kkrieger

Será que já consegui mostrar o poder da programação procedural e ao mesmo tempo ilustrar a emergência de fenómenos na programação?

Por isso é que o nosso genoma é quase igual ao do arroz. A parte mais difícil já estava feita nessa altura. Pequenas alterações a um nível muito baixo dão origem a consequências muito abrangentes e com ramificações. A evolução consegue isto com tentativa e erro, enquanto que os programadores conseguem isto com tentativa e erro, perdão, conhecimento profundo de várias linguagens e do hardware com que estão a trabalhar, para poderem tirar partido da cascata de acontecimentos causada por poucas linhas de código.

PS. os códigos das demos são difíceis de encontrar e como requerem ser feitos à medida do hardware onde correm, tirando até por vezes partido de bugs e efeitos secundários das máquinas, é pouco provável que consiga fazer um código correr sem problemas num computador qualquer. Mas o You Tube está cheio de vídeos dos resultados. Tem demos e intros desde o tempo do Spectrum, altura em que começou a demoscene.


Para saber mais sobre a demoscene:

 http://tomaes.32x.de/text/faq.php

E a pagina dos Farbraush na Wikipédia:

 http://en.wikipedia.org/wiki/Farbrausch

Sem comentários: