Sítio do Piropo

B. Piropo

< Coluna em Fórum PCs >
Volte
28/06/2006

< Analytical Engine VI: A Máquina Analítica >


O que teria levado Charles Babbage a cogitar o abandono de um projeto em pleno andamento ao qual havia dedicado grande parte de sua vida e investido uma soma considerável de dinheiro, um projeto já parcialmente concluído e em adiantada fase de montagem (veja a coluna “A Máquina Diferencial”), em troca de uma nova Máquina Analítica que mal passava de um sonho? Que encantos teria esse novo projeto? O que Babbage pretendia com ele?

Bem, ouçamos o próprio Babbage em seu “Essay towards the Calculus of Functions” conforme citação do Major-General H. P. Babbage no ensaio <   http://www.fourmilab.ch/babbage/hpb1910.html > “Babbage’s Analytical Engine” publicado em 1910, quarenta anos após a morte de seu ilustre pai. Dizia Charles Babbage:

“Minhas investigações subseqüentes revelaram diversos novos métodos de resolver equações de funções de uma única incógnita ou muito mais complexas e me convenceram da importância do cálculo (referindo-se ao cálculo diferencial e integral cujas bases foram estabelecidas por Newton e Leibnitz um século antes), particularmente como um instrumento de descobertas no mais difíceis ramos da análise. E nem é apenas nos recessos desta ciência abstrata que suas vantagens são sentidas: ele é particularmente adequado à descoberta das leis da ação pelas quais uma partícula de matéria atrai ou repele outra da mesma espécie ou de espécie diferente; conseqüentemente ele pode ser aplicado a qualquer ramo da filosofia natural, cujo objetivo é determinar as leis que regem as interações das partículas ou corpos através de cálculos executados sobre os resultados de experimentações; deve-se admitir que seu estado atual é ainda insatisfatório para alcançar estes desejáveis objetivos, mas os trabalhos de futuros pesquisadores deverão levá-lo à perfeição já atingida por outros métodos de pesquisas e não é demais esperar que seu amadurecimento leve-o a revelar as leis ocultas que regem os fenômenos das ações magnéticas, elétricas e até mesmo químicas” ( My subsequent inquiries have produced several new methods of solving functional equations containing only one variable quantity and much more complicated, and have convinced me of the importance of the Calculus, particularly as an instrument of discovery in the more difficult branches of analysis. Nor is it only in the recesses of this abstract science that its advantages will be felt: it is peculiarly adapted to the discovery of those laws of action by which one particle of matter attracts or repels another of the same or a different species; consequently it may be applied to every branch of natural philosophy, where the object is to discover by calculation from the results of experiment the laws which regulate the action of the ultimate particles of bodies. To the accomplishment of these desirable purposes, it must be confessed that it is in its present state unequal; but should the labours of future inquirers give to it that perfection which other methods of investigation have attained, it is not too much to hope that its maturer age shall unveil the hidden laws which govern the phenomena of magnetic, electric, or even of chemical action ).

Em resumo: Babbage concebeu um engenho de propósito geral capaz de calcular qualquer função algébrica, cujo objetivo principal seria “revelar as leis ocultas que regem os fenômenos das ações magnéticas, elétricas e até mesmo químicas”, ou seja, determinar os modelos matemáticos nos quais se baseiam as ciências naturais (que, se você pensar bem, perceberá que é justamente um dos principais e mais nobres usos que fazemos hoje dos computadores). E achou que dedicar-se a ele fazia muito mais sentido que terminar o projeto de um engenho comparativamente tão mais limitado quanto sua Máquina Diferencial.

Mas de onde teria ele tirado a idéia de tão formidável engenho em um tempo onde nem sequer existia o conceito de “computação” e ainda não se havia fabricado sequer uma simples máquina de calcular?

Bem, Babbage inspirou-se, naturalmente, na sua própria Máquina Diferencial. E fê-lo (língua danada essa... Mas, como diz João Ubaldo, a expressão existe e eu a uso) de um modo peculiar, típico dos gênios.

Aconteceu assim: ainda nos idos de 1833, quase dez anos depois de iniciada a fabricação de sua Máquina Diferencial e um ano antes dele solicitar recursos adicionais ao Governo Britânico (que lhes foram negados), durante a montagem da parte da Máquina Diferencial cuja fabricação havia sido até então concluída, Babbage percebeu que, feitas as devidas alterações, aquele projeto poderia ser capaz de façanhas muito maiores do que as que ele tinha previsto originalmente.

Pois ocorre que, como vimos nas primeiras colunas desta série, a Máquina Diferencial, um prodígio para a época, capaz de calcular e tabular os resultados de polinômios extremamente complexos, o fazia pelo método das diferenças finitas. Ao fim e ao cabo, portanto, não passava de uma máquina de somar. Sofisticadíssima para a época, é verdade. Mas ainda assim limitada a uma única operação.

O que Babbage percebeu olhando para a montagem parcial de sua invenção foi que, mediante certos arranjos, a máquina poderia terminar “comendo o próprio rabo” (“the engine eating its own tail” em suas próprias palavras). Ou seja: “encurvando” o formato da máquina de tal maneira que a coluna dos resultados (saída) ficasse próxima daquela onde se introduzia a última diferença (entrada) e acrescentando algumas engrenagens que as interligassem da forma adequada, a máquina poderia usar os resultados de certos cálculos (saída) como dados para efetuar novas operações (entrada), concebendo assim o até então inexistente conceito de retro-alimentação (ou “feedback”; era a este conceito que ele se referiu quando usou a expressão “comer o próprio rabo”, portanto respeitem o velho gênio e refreiem as brincadeiras de mau gosto...).  

Mas se a máquina poderia se retro-alimentar, efetuando os mesmos cálculos com os resultados dos cálculos anteriores, nada impedia que ela usasse os ditos resultados para efetuar outras operações, diferentes das anteriores. Desde que, é claro, se divisasse um método de automatizar o processo, ou seja, de alterar a seqüência de operações a que os dados de entrada eram submetidos.

Naturalmente você já percebeu que o verbo a ser usado para designar esta ação é “programar”, mas infelizmente Babbage não poderia apelar para ele posto que, na época, ele não existia, já que o próprio conceito de “programação” era desconhecido. Mas, se não fosse, Babbage poderia transformar sua Máquina Diferencial, uma simples máquina de somar, em um engenho capaz de “executar não apenas adições, mas quaisquer processos aritméticos que se desejar, em qualquer ordem e quantas vezes sejam necessários” ( perform not only Addition, but all the processes of arithmetic at will in any order and as many times as might be required).

O problema consistia em como fazer com que estas operações fossem introduzidas na máquina na seqüência adequada. E, embora não existisse o conceito de programação, já havia um dispositivo programável, o Tear de Jacquard, nosso velho conhecido das duas últimas colunas, que Babbage vira funcionar em suas viagens à França.

Por que não usar a técnica de cartões perfurados, empregada para tecer figuras no pano, como forma de controlar a máquina, fazendo-a “tecer” resultados de cálculos algébricos?

Deixemos o próprio inventor explicar-nos como isto seria possível. O que você lerá a seguir é uma tradução livre de um pequeno trecho do Capítulo VIII, “Of The Analytical Engine”, do ensaio “The Analytical Engine - Passages from the Life of a Philosopher” de autoria do próprio Charles Babbage e disponível integralmente no < http://www.fourmilab.ch/babbage/lpae.html > Sítio do “Fourmilab”. Para que eventuais erros de tradução não empanem o brilho do texto ela será seguida do original em inglês permitindo àqueles com superiores conhecimentos do idioma não apenas saborear o estilo original de Babbage como corrigir eventuais falhas da minha tradução – correções que, se vierem, serão muito bem-vindas, diga-se de pronto. Ao longo da tradução incluirei palavras ou expressões em itálico cuja função é torná-la mais compreensível.

Deixemos, então, o próprio gênio nos explicar seu invento. Vejamos, primeiro, como Babbage expõe um conceito inexistente em sua época: o da programação, usando como paradigma o Tear de Jacquard, que emprega o mesmo tipo de engenho usado como dispositivo de entrada em sua máquina (cartões perfurados) para explicar de que maneira, reutilizando os mesmos cartões (ou seja, usando o mesmo programa), um fabricante de tecidos pode produzir panos diferentes repetindo o mesmo desenho em distintas cores. Deixemos o próprio Babbage descrever isto:

“É um fato conhecido que o Tear de Jacquard é capaz de tecer qualquer desenho que a imaginação do homem possa conceber. É também prática corrente de fabricantes empregarem artistas habilidosos para criar as figuras a serem tecidas. Estas figuras são então encaminhadas para um especialista que, usando uma máquina apropriada, executa perfurações em cartões de papelão de tal forma que quando estes cartões são introduzidos em um Tear de Jacquard, este tear produzirá uma tessitura que corresponderá exatamente à figura concebida pelo artista.

“Assim o fabricante poderá usar, para a urdidura e trama de seu trabalho, linhas que sejam todas da mesma cor; suponhamos que sejam linhas alvejadas, ou brancas. Neste caso o pano será tecido todo em uma só cor; mas sobre o tecido haverá um padrão   em relevo, correspondente ao desenho que o artista concebeu.

“Mas o fabricante poderá empregar os mesmos cartões e usar, na urdidura, linhas de qualquer outra cor. Cada linha pode mesmo ser de uma cor diferente ou de uma tonalidade diferente da mesma cor. Mas, em todos estes casos, a forma ou padrão do desenho será exatamente o mesmo, apenas as cores serão diferentes”.

Percebeu? O que Babbage quis dizer, no linguajar rebuscado da época, é que criado o conjunto de cartões (ou seja, feito o programa), ele poderia ser usado indefinidamente para fazer a máquina repetir os mesmos cálculos, ainda que com dados diferentes.

Agora, vamos ver como Babbage descreve a arquitetura de sua máquina. Em respeito à genialidade do Mestre manterei os termos “mill” (“moinho”, “engenho”) e “store” (“armazém”, “depósito”) no original em inglês. Deixemos falar o próprio Babbage:

“Este conhecido processo (o Tear de Jacquard) apresenta uma analogia quase perfeita com a Máquina Analítica.

“A Máquina Analítica consiste de duas partes:

“1ª A ‘store’, onde são armazenadas todas as variáveis a serem usadas nas operações, assim como as quantidades resultantes de outras operações.

“2ª O ‘mill’, onde são introduzidas todas as quantidades prestes a serem submetidas a uma operação”.

Tanto quanto eu saiba, estas são as primeiras referências feitas em toda a história da humanidade aos conceitos de Unidade Central de Processamento – ou, pelo menos, a um de seus principais componentes, a Unidade Lógica e Aritmética (no caso, evidentemente, o “mill”, como você já percebeu) e de “memória principal” (a “store”, naturalmente). Uma observação à margem do assunto: para um humilde professor de Arquitetura de Computadores como este que vos escreve chega a ser emocionante ler o documento original no qual se fez a menção pioneira a estes conceitos fundamentais da informática moderna.

Incidentalmente: o uso de dois componentes distintos para armazenar dados e para operá-los, conforme explicado acima por Babbage, é o conceito mais revolucionário da Máquina Analítica, o que mais a aproxima da arquitetura dos computadores modernos. Na sua predecessora, a Máquina Diferencial, estas duas funções eram cumpridas pelo mesmo componente: como em qualquer calculadora mecânica de engrenagens, os números correspondentes aos operandos eram introduzidos nas próprias engrenagens que efetuavam os cálculos, ou operações. O fato de Babbage ter empregado os termos “mill”   e “store” para designar os novos componentes de seu engenho denota a forte influência que a tecnologia usada no Tear de Jacquard exerceu na concepção da Máquina Analítica: nos teares, os fios brutos são levados da “store”, onde são temporariamente armazenados, para o “mill”, onde são tecidos.

Agora vejamos, ainda nas palavras de Babbage, como ele institui a conceituação de “variáveis” (que chama de “letras” cujos valores estão contidos em ‘cartões de variável’) e “ponteiros” (que descreve como “um terceiro (cartão) para indicar a variável em que o resultado de uma operação aritmética será armazenado”) e como explica o artifício através do qual as variáveis e as operações que serão nelas efetuadas são introduzidas em sua máquina:

“Cada fórmula (algébrica) que a Máquina Analítica pode ser solicitada a calcular consiste de certas operações algébricas que serão efetuadas sobre algumas letras (variáveis) e de certas outras alterações, que dependem do valor atribuído a estas letras.

“Há, portanto, dois conjuntos de cartões (perfurados), o primeiro para fornecer orientação sobre a natureza das operações a serem executadas – que são denominados ‘cartões de operação’: e o outro para fornecer os valores das variáveis com os quais as operações serão executadas – estes últimos denominados ‘cartões de variável’. Finalmente, o símbolo de cada variável ou constante é introduzido no topo de uma coluna capaz de conter qualquer número necessário de algarismos.

“Com um arranjo como este, quando é solicitada a computação de qualquer fórmula, os   ‘cartões de operação’ que contêm a série de operações correspondentes devem ser amarrados na ordem em que elas serão executadas (como pode se notar na Figura 1, a seqüência de cartões perfurados que corresponde a uma dada programação é feita amarrando-se os cartões   na ordem em que as operações que representam serão executadas; é a isto que Babbage quis se referir com o verbo “amarrar”). Os cartões de um outro conjunto devem ser amarrados juntos, na ordem em que as variáveis serão introduzidas no “mill”. Cada ‘cartão de operação’ irá requerer três outros cartões, dois deles representando as variáveis e constantes e seus valores numéricos, com os quais a operação contida no ‘cartão de operação’ que os precedeu   será efetuada, e um terceiro para indicar a variável onde o resultado desta operação aritmética será armazenado”.

Figura 1: Cartões perfurados de Jacquard.

(A Figura 1, onde se pode notar os cordões que amarram os cartões uns nos outros, foi obtida em < http://www.sscnet.ucla.edu/geog/gessler/topics/jacquard.htm > “Jacquard Mechanism and Cards”).

Note que tudo isto é exposto por Babbage usando um vocabulário onde ainda não havia palavras que descrevessem as ações de “programar”, “processar dados” ou “computar”, nem qualquer forma sucinta de descrever operações elementares como leitura e escrita na memória e elementos básicos de informática então desconhecidos, como “posição da memória principal”, o que dificultava bastante a explicação de certos conceitos, como os de “variáveis” e “ponteiros”. Não obstante, mesmo com todas as dificuldades para exprimi-las, estas noções estão todas no texto de Babbage...

Mas máquina alguma, por mais formidável que seja, por mais intricados cálculos que execute, pode ter qualquer utilidade se os resultados de suas computações não forem fornecidos aos usuários. Vejamos como Babbage descreve o dispositivo de saída de sua Máquina Analítica:

“Mas cada variável tem, abaixo dela, no mesmo eixo, um certo número de engrenagens numeradas com os dez algarismos gravados em suas bordas: sobre estas (engrenagens), pode-se colocar qualquer número que a máquina possa armazenar. Quando as variáveis forem fornecidas ao ‘mill’, estes números serão ajustados e a operação contida no cartão (de operação) precedente será executada com eles. O resultado desta operação será então substituído na ‘store’

Agora veja como, com o vocabulário limitado da época, Babbage explica que sua Máquina Analítica não é um artefato limitado, um mero engenho de fazer cálculos, mas sim um dispositivo de uso geral que não somente é capaz de computar o valor de qualquer expressão algébrica como também, criado o algoritmo para efetuar a computação (que, na falta de um nome mais apropriado, ele chama de “leis de desenvolvimento” da expressão) e transposto este algoritmo para os cartões perfurados,  passará a dispor de uma “biblioteca de programas” que podem ser usados indefinidamente para computar expressões semelhantes quaisquer que sejam os valores atribuídos a suas variáveis:

“A Máquina Analítica é, portanto, uma máquina de natureza inteiramente generalista. Seja qual for a fórmula que ela seja solicitada a desenvolver, as leis deste desenvolvimento (o algoritmo) devem ser comunicadas a ela por meio de dois conjuntos de cartões. A partir do momento em que isto é feito, a máquina se torna especializada naquela fórmula em particular. Os valores numéricos de suas constantes devem então serem colocados nas colunas de engrenagens (numeradas) abaixo delas e quando a máquina for posta em movimento ela calculará e imprimirá os valores numéricos do resultado daquela fórmula.

“Todo conjunto de cartões (programa) criado para cada fórmula poderá, a qualquer tempo, recalcular a mesma fórmula com quaisquer outros valores das constantes que sejam necessários.

“Assim sendo, a Máquina Analítica possuirá uma biblioteca própria. Depois de criado, cada conjunto de cartões poderá a qualquer momento no futuro reproduzir os cálculos para os quais foi originalmente concebido, inserindo-se novos valores numéricos de suas constantes” (note que nos parágrafos acima Babbage usa o termo “constante” com o significado de “valor numérico” que, no contexto, deve ser entendido como o conceito moderno de “variável”).

Em resumo: lida a descrição sumária acima nas palavras do próprio Babbage percebe-se que, de acordo com ela, a Máquina Analítica é um artefato programável capaz de empregar algoritmos que podem ser consubstanciados em programas, receber estes programas e seus dados de entrada sob a forma de cartões perfurados, armazená-los em uma memória (a “store”), processar os cálculos em uma unidade central   (o “mill”) e fornecer os resultados seja impressos, seja sob a forma de números exibidos em mostradores formados por algarismos gravados em engrenagens.

Resumindo: em 1864 (data em que foi publicado o texto abaixo), Babbage descreve com um nível de detalhes surpreendente aquilo que hoje chamamos de “computador”.

Aqui está o texto original:

  “It is known as a fact that the Jacquard loom is capable of weaving any design which the imagination of man may conceive. It is also the constant practice for skilled artists to be employed by manufacturers in designing patterns. These patterns are then sent to a peculiar artist, who, by means of a certain machine, punches holes in a set of pasteboard cards in such a manner that when those cards are placed in a Jacquard loom, it will then weave upon its produce the exact pattern designed by the artist.

Now the manufacturer may use, for the warp and weft of his work, threads which are all of the same colour; let us suppose them to be unbleached or white threads. In this case the cloth will be woven all of one colour; but there will be a damask pattern upon it such as the artist designed.

But the manufacturer might use the same cards, and put into the warp threads of any other colour. Every thread might even be of a different colour, or of a different shade of colour; but in all these cases the form of the pattern will be precisely the same--the colours only will differ.

The analogy of the Analytical Engine with this well-known process is nearly perfect.

The Analytical Engine consists of two parts:--

1st. The store in which all the variables to be operated upon, as well as all those quantities which have arisen from the result of other operations, are placed.

2nd. The mill into which the quantities about to be operated upon are always brought.

Every formula which the Analytical Engine can be required to compute consists of certain algebraical operations to be performed upon given letters, and of certain other modifications depending on the numerical value assigned to those letters.

There are therefore two sets of cards, the first to direct the nature of the operations to be performed--these are called operation cards: the other to direct the particular variables on which those cards are required to operate--these latter are called variable cards. Now the symbol of each variable or constant, is placed at the top of a column capable of containing any required number of digits.

Under this arrangement, when any formula is required to be computed, a set of operation cards must be strung together, which contain the series of operations in the order in which they occur. Another set of cards must then be strung together, to call in the variables into the mill, the order in which they are required to be acted upon. Each operation card will require three other cards, two to represent the variables and constants and their numerical values upon which the previous operation card is to act, and one to indicate the variable on which the arithmetical result of this operation is to be placed.

But each variable has below it, on the same axis, a certain number of figure-wheels marked on their edges with the ten digits: upon these any number the machine is capable of holding can be placed. Whenever variables are ordered into the mill, these figures will be brought in, and the operation indicated by the preceding card will be performed upon them. The result of this operation will then be replaced in the store.

The Analytical Engine is therefore a machine of the most general nature. Whatever formula it is required to develop, the law of its development must be communicated to it by two sets of cards. When these have been placed, the engine is special for that particular formula. The numerical value of its constants must then be put on the columns of wheels below them, and on setting the Engine in motion it will calculate and print the numerical results of that formula.

Every set of cards made for any formula will at any future time recalculate that formula with whatever constants may be required.

Thus the Analytical Engine will possess a library of its own. Every set of cards once made will at any future time reproduce the calculations for which it was first arranged. The numerical value of its constants may then be inserted.

Uma descrição detalhada do funcionamento da Máquina Analítica está além do escopo desta série de colunas (recurso muito usado por autores de colunas e que, na maior parte dos casos, pode ser substituído por alguma coisa parecida com “eu não explico para vocês como este engenho diabólico funciona porque, por mais que tentasse, eu mesmo não consegui entender direito e tenho receio de cometer algum erro crasso” o que, para ser honesto, devo admitir que cabe perfeitamente nesta instância). Se você estiver realmente interessado, recomendo dois textos que descrevem detalhadamente não apenas o projeto mecânico como também os princípios matemáticos em que ele se apóia. O primeiro deles é o texto do próprio Babbage de onde foi tirada a longa citação acima. O segundo é o clássico trabalho de L. F. Menabrea, “Sketch of The Analytical Engine Invented by Charles Babbage” com os comentários de Ada Lovelace, que pode ser encontrado na íntegra no < http://www.fourmilab.ch/babbage/sketch.html > Sítio do “Fourmilab”.

O texto de Babbage é mais rico, porém menos técnico, já que durante as explicações sobre o funcionamento da máquina ele se perde em digressões sobre como teve esta ou aquela idéia e cita comentários que fez com colegas sobre o assunto. Serve mais para descrever a gênese da invenção e a forma tortuosa como funcionava a mente genial de Babbage do que para ajudar a entender o funcionamento da máquina.

Já o texto de Menabrea é um clássico.

Luigi Frederico, Conde de Menabrea, Marquês de Valdora, nascido na Sardenha em 1809, era apenas um jovem tenente do exército italiano de grande futuro (indiscutivelmente grande: em 1867 assumiria o cargo de Primeiro Ministro da Itália) quando conheceu Charles Babbage, então acabrunhado pela pertinaz recusa do Governo Britânico em continuar financiando seus projetos, por ocasião de sua visita a Turim em 1840 para proferir uma palestra sobre sua Máquina Analítica na Academia de Ciências daquela cidade italiana.

A palestra impressionou de tal maneira o jovem tenente que este se aproximou de Babbage para conhecer detalhes sobre o invento. Da amizade entre o velho gênio e o jovem talento nasceu um extraordinário trabalho de Menabrea descrevendo o funcionamento do engenho. Trabalho este que foi traduzido para o Francês em 1842.

Retornando à Inglaterra, Babbage convenceu sua pupila, a então jovem Augusta Ada King ( em solteira Ada Byron, filha do famoso poeta Lord Byron), condessa de Lovelace e por isso mais conhecida como Ada Lovelace, a traduzir o trabalho de Menabrea (a vida de Ada, as razões que fizeram com que sua mãe, Annabella Milbanke, a levasse a se interessar por matemática e sua relação de amizade com Charles Babbage, que a levou a se envolver na programação conceitual de uma máquina da qual só existia o projeto a ponto de ser apontada como a primeira programadora da história da humanidade, tudo isto merece um destaque tão grande quando a história do próprio Babbage que, quem sabe, um dia viremos a abordar; mas por enquanto vamos nos restringir ao Mestre Babbage, senão esta série não terminará jamais e eu tenho outros temas interessantes a tratar...)..

Ada fez mais que simplesmente traduzir: ao trabalho original de Menabrea ela acrescentou suas hoje célebres “Notes upon the Memoir by the Translator” (essencialmente: notas da tradutora), um conjunto de notas explicativas muito mais longo que o trabalho de Menabrea, nas quais além de explicar detalhadamente as bases de funcionamento da máquina, estabelece os conceitos básicos da programação moderna, como saltos condicionais e repetições (“loops”, que ela chamou de “cycles of operation”).

Se você deseja, portanto, obter um conhecimento detalhado sobre a concepção de Charles Babbage para sua Máquina Analítica, sobre suas bases de funcionamento e as técnicas fundamentais de programação usando cartões perfurados, recomendo enfática e veementemente uma leitura da tradução feita por Ada Lovelace do magnífico trabalho de Menabrea e a leitura atenta das notas da própria Ada.

Mas se tudo o que você deseja é uma idéia superficial de como era a famosa máquina e dos percalços enfrentados pelo pobre Babbage na sua tentativa de fabricá-la, bastará ler a próxima (e, espero, última) coluna desta série.

Até lá.

B. Piropo