Archive for the ‘desenho’ Category

A Arte de Programar

setembro 9, 2011

Hoje, fiz uma palestra para alunos da graduação da PUC-Rio com o título acima.  O objetivo era dar uma idéia mais ampla sobre programação, através de uma visão de arte, arquitetura e fundamentos da computação.  Estou postando aqui, o arquivo pdf da apresentação.

Nossa palestra começa com os princípios básicos, ressaltados através de uma viagem eclética com três grandes personagens: Leonardo, Santiago, Donald.

Como tivemos problemas com o Power Point e tivemos que converter a apresentação para pdf, expliquei o que ocorreu e falei um pouco sobre a Adobe, Inc; a companhia ligada ao padrão pdf, mas também a companhia responsável pelo PhotoShop, ressaltando que qualquer profissional da fotografia, hoje, tem que lidar com esse tipo de software. O PhotoShop é hoje, o que era a câmera escura da fotografia analógica.

A todo o momento, ressaltamos a importância da imaginação; da liberdade de criação; nisso é ímpar a figura de Leonardo.

A cada obra apresentada, enfatizamos que houve um planejamento, feito com muita disciplina e trabalho; ou seja: as obras finais foram um processo de criação ordenado, planejado, especificado.

A máxima de que forma segue função é seguida por muitos arquitetos, incluindo Christopher Alexander. Foi Alexander quem primeiro formulou a idéia geral de padrões de desenho, uma idéia chave em engenharia de software. Lembrei também que o Sr. Bill Gates, durante muito tempo, tinha o título de “Chief Software Architect”

Os desenhos de Salvador são um excelente exemplo de forma segue função, principalmente no desenho de pontes. Ressaltei que os desenhos iniciais são feitos a mão, mas que depois são utilizados softwares para não só prover efeitos de visualização, mas como também “dividirem” o projeto em partes para que sejam devidamente especificadas para que essas partes ou componentes sejam construídas, em particular na ponte da cidade de Dallas, onde os arcos em aço são originários da Itália (veja aqui).

Em seguida mostrei uma “skin” do Virtual DJ e falei do papel de Karlheinz Brandenburg como fundamental no desenvolvimento do algoritmo de compactação que é base do MP3. O importante aqui é ressaltar que um software converte som da forma analógica para a digital de uma maneira bem econômica, isto é, gastando pouca memória. Ressaltei que toda vez que escutassem o seu “ipod” lembrassem que um software, baseado no algoritmo de Brandenburg, esta fazendo o trabalho de transformação da forma binária (0s e 1s) para o som que se escuta. Aproveitei para lembrar o perigo do volume alto para a saúde.

Duas outras telas mostram o software de entretenimento do A330 em processo de “boot”.  Aqui falei do problema de confiabilidade do software e lembrei que a Airbus é fortemente comprometida com a automação de seus aviões. Todos notaram o pingüim e aí falamos de Linus Torvalis, do Professor Tanenbaum e do Mimix.

Duas telas mostram o C&L, o código e a grafo de cenários e léxicos. Esse software foi desenvolvido na PUC, por alunos, de forma colaborativa.

Mostrei a seguir a arquitetura do C&L e ressaltei a importância dos componentes! Aproveitamos para dar uma idéia geral sobre Banco de Dados, já que aparecem como componentes da arquitetura C&L.

Depois dessa página, aparece, novamente, uma foto do “Palazzo Vecchio”, só que aqui de um esquema que explica como o palácio foi aumentado. Vê-se, claramente, que houve uma integração de grandes componentes de forma a integrar o palácio como é hoje, três épocas distintas produziram cada uma das três partes de forma integrada, demonstrando o princípio de composição de componentes (nesse caso grandes componentes).

Em seguida mostramos a capa do livro “The Art of Computer Programming” encontrada no Flickr, um software para apoio a rede social de interessados em fotografia. Aqui, o título é importante; mostramos como são os tijolos da construção de software, usando um dos livros base da ciência da computação.

Os exemplos copiados do livro original mostram a especificação do componente usando uma linguagem que mistura linguagem natural e símbolos matemáticos, como também mostram o uso de outra linguagem, o fluxograma, para uma visualização gráfica do fluxo de controle. Aqui, ressaltei a importância do controle do tipo repetição ou laço (loop) dizendo como é fundamental termos certeza que o programa não executa eternamente (“entrou em loop”).

A penúltima página mostra como ficaria a implementação, o programa efetivamente, na linguagem Mixal, e como ficaria a representação de memória onde esse programa estaria localizado. A linguagem Mixal foi criada por Donald Knuth o grande mestre da computação. A figura além de mostrar os comandos ”primitivos” (ao nível de montagem),  mostra também, uma forma mais “primitiva”; a tabela numa representação hexadecimal do mesmo programa, e poderia ser ainda mais “primitiva”, se a notação binária fosse utilizada.

Terminei ressaltando a idéia de como as várias camadas de conhecimento sedimentados em software estão sendo base para a construção dos software atuais exemplificados durante a palestra.