O que é um programa?

Todo mundo é capaz de escrever um programa de computador. Até crianças de dez anos. Lembro que quando eu tinha essa idade, as aulas de informática na minha escola giravam em torno de uma tartaruga que desenhava algumas formas geométricas. Para isso, era preciso dar comandos a ela utilizando a linguagem de programação Logo (que pode ser experimentada utilizando o interpretador KTurtle, entre outros). Eu não posso dizer que gostava das aulas, mas o exemplo mostra que crianças também podem escrever programas.

Depois daquelas aulas de informática já escrevi alguns outros programas. Mas o que diabos é isto?

Esta página HTML que você está lendo é um programa? O editor que eu uso para escrevê-la (outra página HTML) é um programa? O navegador que você está usando para passear pela Internet é um programa? Um desenho gravado em formato bitmap é uma programa? E se o formato for vetorial?

Você já deve ter visto em algum shopping center aquelas máquinas que fazem desenhos bordados. Elas desenham a partir de padrões armazenados em meio eletrônico e há empresas especializadas em produzir estes padrões. Uma dessas empresas estava processando um de seus clientes por ter alugado cartuchos onde estavam armazenados os padrões e, recentemente, o tribunal considerou-os como dados e não como programas.

Pela lei deles, é permitida a troca de meios de armazenamento que contenham dados sob direitos autorais, desde que estes dados não sejam programas. Se alguém adquire legalmente dados e grava-os em algum meio físico (como um CD ou pen drive), ele tem permissão para vender, alugar ou doar este meio juntamente com os dados (mas não tem permissão para fazer outras cópias). Entretanto, se estes dados forem programas de computador, a transferência não pode ser feita. Portanto, se alguém entra em uma loja e compra um disco onde está gravado um programa, o disco a princípio é intransferível e não pode ser emprestado a mais ninguém.

A empresa da nossa história queria que seus padrões de bordado fossem considerados programas de computador. Assim o seu cliente estaria violando a lei ao ter alugado sua cópia para outros e muito provavelmente teria que pagar uma multa bem gorda.

Todo dado interpretado por computador é escrito em alguma linguagem projetada por alguém. Pode ser que o projetista da linguagem nem saiba que está projetando uma linguagem, mas nem por isso deixa de estar. HTML, por exemplo, é uma linguagem e seus projetistas sabiam disso. Sabiam tanto que colocaram este L no final que é justamente a inicial de Linguagem. O formato de imagem JPEG também é uma linguagem. Não é muito tratado como tal, mas também é uma linguagem. Há máquinas (muitas vezes simples programas de computador) capazes de ler e interpretar dados escritos nessas linguagens. Interpretar aqui pode ser mostrar uma saída para alguma pessoa. Exatamente o que está acontecendo agora para você ler estas palavras.

Um subconjunto bastante interessante de todas estas linguagens que a mente humana pode imaginar é o das linguagens Turing-completas. Se você cursou algum curso de computação e não matou nenhuma aula (o que, admito, é praticamente impossível para um ser humano), deve saber que estas são linguagens com poder computacional equivalente ao de uma máquina de Turing, um modelo teórico que pode ser usado para descrever até mesmo este computador de última geração que você tem aí. Qualquer linguagem de programação que se preze é Turing-completa. Na verdade, eu acho que uma linguagem precisa ser Turing-completa para ser chamada de linguagem de programação.

Para estas linguagens especiais, também é possível construir máquinas de interpretação e programas seriam simplesmente dados escritos em uma dessas linguagens. Interpretar aqui pode ser visto como traduzir o programa para uma outra linguagem que será novamente traduzida e que, no fim das contas, gera uma saída para alguém. Exatamente o que está acontecendo agora pra você ler estas palavras.

Mas e se os padrões de bordado fossem escritos em Ruby, Java ou Haskell? Eles seriam programas?

É perfeitamente possível desenvolver uma máquina de bordar que entendesse uma dessas linguagens. Seria mais fácil ainda construir uma máquina capaz de interpretar um subconjunto dessas linguagens. Para um programador humano, os padrões pareceriam claramente com o que chamamos de programa, mas para a máquina seriam diretamente equivalentes aos dados no formato inicial.

A diferença entre dados puros e programas não está nos dados, mas na máquina que os interpreta. O intrigante é que, do ponto de vista das máquinas (se é que máquinas têm ponto de vista), os programas não passam de dados.

1 Response to “O que é um programa?”


  1. 1 Lucas de Castro 04/set/2006 às 19\0744

    Poxa!! muito bom esse post, Thiago! Cheguei agora e vou continuar lendo esse blog… parabéns! :)–>


Comments are currently closed.




%d blogueiros gostam disto: