von Neumann IV: pioneiro da informática

O EDVAC
A grande contribuição de von Neumann para a ciência da computação vem de sua própria concepção do que seria um “computador”.
Senão, vejamos.
Até então, “computadores” eram máquinas destinadas essencialmente a fazer cálculos (ou a calcular tabelas destinadas a fazê-los, como o ENIAC) ou a alguma tarefa específica (como o Colossus desenvolvido com a genial colaboração de Alan Turing pelo Governo britânico, destinado a “quebrar” códigos e decifrar mensagens criptografadas). Eram máquinas programáveis, sim, como o Mark I de Aiken, mas o “programa” era parte do computador propriamente dito (ou seja, do hardware). Neste sentido, uma máquina de calcular eletrônica, destas vendidas nas ruas do Centro do Rio de Janeiro por “dezrréal”, pode ser considerada um computador deste tipo, já que “computa” (calcula) operações com diferentes operandos. Mas o “programa” que gerencia os cálculos vem gravado em ROM, ou seja, faz parte da máquina.

O Mark I era mais ou menos assim: um conjunto de engrenagens “rodava” (“run“) o programa, ou seja, fazia uma fita perfurada correr em uma trilha e contatos elétricos eram fechados por escovas metálicas através dos orifícios da fita. Estes contatos “liam” as instruções na sequência que apareciam na fita e as executavam imediatamente. Para rodar outro programa era necessário trocar a fita, da mesma forma que para fazer com que uma caixa de música “tocasse” outra música era preciso trocar o rolete com os pinos que acionavam as hastes vibratórias que emitiam as notas. E, o que é mais importante: um programa não podia modificar a si mesmo durante sua execução nem alterar ou repetir a ordem em que as instruções eram executadas em função de resultados intermediários: as instruções eram executadas uma após a outra exatamente na ordem em que constavam na fita e temos conversado. Em resumo: o programa era uma parte (física) do conjunto.
Incidentalmente: foi operando o Mark I que a Almirante Grace Hopper encontrou a famosa mariposa que fechava intermitentemente o contato entre dois terminais elétricos, alterando o programa e gerando resultados erráticos. E foi esta mariposa que deu origem ao termo “bug” (inseto, em inglês), com a acepção de “erro de programação”. Mas esta história já foi contada…
Outra observação importante: muitos anos mais tarde, computadores de grande porte (“mainframes“) ainda eram programados usando cartões perfurados, o que pode dar a impressão que sua arquitetura seria semelhante à do Mark I. Mas há uma diferença fundamental: nestas máquinas os cartões eram usados apenas como meio de introdução do programa na memória, ou seja, depois de perfurados eram introduzidos em uma maquineta que funcionava como dispositivo de entrada, lendo os cartões e transferindo as instruções neles contidas para a memória, de onde eram recuperadas e executadas pela UCP (na verdade, como veremos mais tarde, a primeira máquina a adotar este conceito foi justamente o EDVAC). No Mark I as instruções não eram armazenadas na memória, usada apenas para dados e resultados parciais e finais das operações. Como se verá adiante, esta diferença é essencial.
Para von Neumann um computador tinha que ser “elástico” (palavra usada por ele mesmo). Deveria ser uma “máquina de fazer coisas”, “de resolver problemas”, e não apenas de calcular ou desempenhar uma única tarefa. Segundo a concepção de von Neumann, tinha que ser uma máquina versátil. Sim, eu sei que isto lhe parece evidente. Mas é preciso viajar no tempo até o final da primeira metade do século passado para perceber o quanto esta ideia tem de revolucionária.
Foi baseado nesta filosofia que von Neumann traçou as linhas gerais para desenvolvimento do EDVAC, primeiro artefato a merecer oficialmente o nome de “computador”, posto que sua sigla provinha de “Electronic Discrete Variable Automatic Computer” ou “computador eletrônico automático de variáveis discretas”.
