Blog “Ciências Exatas Contemporâneas”, de
autoria de Álaze Gabriel.
Disponível em http://cienciasexatascontemporaneas.blogspot.com.br/
Autoria:
Mestres,
Doutores e Livres Docentes nas áreas de Ciências da Informação, Ciências da
Computação e Educação da Pontifícia Universidade Católica do Rio Grande do Sul.
4.8 A tese de Church-Turing e outros resultados
teóricos
Até aqui foi mostrado como, do ponto de
vista formal, surgiu a ideia de computação. Dentro dessa dimensão formal se
procurará mostrar agora que o cume atingido, e ainda não ultrapassado, foi a
Máquina de Turing. É um genial modelo abstrato de equipamento, com capacidade
de processar complicadas linguagens e calcular o valor de funções aritméticas
não-triviais. Pode ainda ser aperfeiçoado para realizar operações mais
complexas, embora em relação ao modelo básico isto não implique um salto
qualitativo, isto é, que o torne algo mais poderoso.
Em termos computacionais pode-se dizer
que as Máquinas de Turing são um modelo exato e formal da noção intuitiva de
algoritmo: nada pode ser considerado um algoritmo se não puder ser manipulado
por uma Máquina de Turing. O princípio de que as Máquinas de Turing são versões
formais de algoritmos e de que procedimento computacional algum seja
considerado um algoritmo a não ser que possa ser instanciado por uma Máquina de
Turing é conhecido como a Tese de Church, em homenagem ao brilhante matemático
americano Alonzo Church (1903 - 1995), ou ainda Tese de Church-Turing. É uma
proposição, não um teorema, porque não é um resultado matemático: simplesmente
diz que um conceito informal corresponde a um objeto matemático.
Fazendo uma pequena retrospectiva. Após
os resultados de Gödel, em 1931, muitos lógicos matemáticos partiram em busca
do que seria uma noção formalizada de um procedimento efetivo (por efetivo
entenda-se mecânico), ou seja, o que pode ser feito seguindo-se diretamente um
algoritmo ou conjunto de regras (como já visto, antigo sonho de séculos, que
remonta a Leibniz). Destas buscas surgiram:
• a sistematização e desenvolvimento das
funções recursivas (introduzidas nos trabalhos de Gödel e Herbrand) por Stephen
Cole Kleene (1909-1994) em sua teoria lógica da computabilidade (parte de seu
livro Introdução à Meta matemática, um dos cumes da lógica matemática dos
últimos anos);
• as Máquinas de Turing;
• o cálculo-lambda (componente
característico fundamental da linguagem de programação LISP) de Alonzo Church;
• a Máquina de Post, análoga à de
Turing, tornada pública um pouco depois, fruto de trabalho independente, e seu
sistema para rescrita de símbolos (cuja gramática de Chomsky é um caso
particular), de Emil L. Post (1897 - 1954).
Com efeito, todos esses conceitos
levaram à mesma conclusão e acabaram por ter o mesmo significado, dentro do
citado escopo da busca de uma definição bem elaborada de processo efetivo. O
que se desenvolverá aqui refere-se mais a Church e Turing (Kleene fez em seu
trabalho uma ampla abordagem de ambos, tirando várias conseqüências, e Post
trata do mesmo tema de Turing), para se ter uma visão mais clara da
diversificação dos estudos da década de 1930, com vistas à fundamentação
teórica de toda a Computação.
Em seu célebre teorema, Church
demonstrou, em 1936, que não pode existir um procedimento geral de decisão para
todas as expressões do Cálculo de Predicados de 1ª ordem, ainda que exista tal
procedimento para classes especiais de expressões de tal cálculo. Isso pode
causar certo espanto quando se observa que o Cálculo de Predicados de 1ª ordem
é semanticamente completo, com o que se diz, implicitamente, que o próprio
cálculo, com seus axiomas e regras, constitui um algoritmo capaz de enumerar
uma após outra todas as suas expressões válidas. Estas expressões são em
quantidade indefinida, e, mesmo sendo enumeráveis (isto é, elaboráveis passo a
passo a partir dos axiomas), essa enumeração não tem fim. Compreende-se então
que, ao se conseguir demonstrar uma determinada fórmula Pem certo momento, isto
já basta para afirmar que se trata de uma fórmula válida. E, pelo contrário, se
depois de haver deduzido mil teoremas dos axiomas, P ainda não apareceu, não se
pode afirmar nada, porque P poderia aparecer após outros mil teoremas,
permitindo se reconhecer sua validade, ou não aparecer nunca, por não ser
válida. Mas não se poderá afirmar em qual caso se está, mesmo depois das mil
deduções.[Aga86].
A decisão, dentro desse cálculo, seria
possível possuindo-se um algoritmo capaz de enumerar as expressões não válidas.
A expressão P então aparecia dentro desse conjunto de não válidas em algum
momento. O teorema de Church de que se está tratando consiste fundamentalmente
na demonstração de que não existe algoritmo capaz de enumerar as expressões não
válidas, de maneira que fica excluído a priori todo procedimento de decisão
para as expressões do Cálculo de Predicados, em geral. Para compreender as
razões de semelhante fato seria necessário valer-se das noções técnicas relacionados
com os conceitos da matemática recursiva, que excedem amplamente os limites
deste trabalho.
Também Church estava interessado no
problema de Hilbert. O resultado a que Turing tinha chegado em 1936, sobre o
problema da decisão de Hilbert, havia sido também alcançado por Church, alguns
poucos meses antes, empregando o conceito formalizado de lambda-definibilidade
(ao invés do computável por uma Máquina de Turing, definido por Turing), no
lugar do conceito informal procedimento efetivo ou mecânico. Kleene, em 1936,
mostrou que lambda-definibilidade é equivalente ao conceito de recursividade de
Gödel-Herbrand, e, nesse período, Church formulou sua tese, estabelecendo que a
recursividade é a própria formalização do efetivamente computável. Isso foi
estabelecido, no caso das funções dos inteiros positivos, por Church e Kleene,
em 1936.
O cálculo-lambda, como sistema elaborado
por Church para ajudar a fundamentar a Matemática (1932/33) era inconsistente,
como o mostraram Kleene e Rosser (1935). Mas a parte do cálculo-lambda que
tratava de funções recursivas estava correta e teve sucesso. Usando sua teoria,
Church propôs uma formalização da noção de “efetivamente computável”, através
do conceito de lambda-definibilidade. Turing, em 1936 e 1937, ao apresentar a
sua noção de computabilidade associada a uma máquina abstrata, mostrou que a
noção Turing-computável é equivalente à lambda-definibilidade [Hur80]. O
trabalho de Church e Turing liga fundamentalmente os computadores com as MT. Os
limites das MT, de acordo com a tese de Church-Turing, também descreve os
limites de todos os computadores.
O processo que determina o valor de uma
função através dos argumentos dessa função é chamado de cálculo da função (ou
computar uma função). Como foi observado, a máquina de Turing pode ser
matematicamente interpretada como um algoritmo e, efetivamente, toda ação de
uma máquina algorítmica como o computador pode ser considerada como a de
calcular o valor de uma função com determinados argumentos. Este ‘insight’ é
interessante, pois fornece uma maneira de se medir a capacidade computacional
de uma máquina. Necessita-se somente identificar as funções que se é capaz de
computar e usar esse conjunto como medida. Uma máquina que compute mais funções
que outra é mais poderosa.
A partir dos resultados de Gödel, Turing
e Church, pode-se dizer que existem funções para as quais não existe uma
seqüência de passos que determinem o seu valor, com base nos seus argumentos.
Dizendo-se de outra maneira, não existem algoritmos para a solução de
determinadas funções. São as chamadas funções não computáveis. Isso significa
que para tais funções não há nem haverá capacidade computacional suficiente
para resolvê-las.
Logo, descobrir as fronteiras entre
funções computáveis e não computáveis é equivalente a descobrir os limites do
computador em geral. A tese de Church-Turing representa um importante passo
nesse sentido. A percepção de Turing foi a de que as funções computáveis por
uma MT eram as mesmas funções computáveis acima referidas.Em outras palavras,
ele conjeturou que o poder computacional das MT abarcava qualquer processo
algorítmico, ou, analogamente, o conceito da MT propicia um contexto no qual
todas as funções computáveis podem ser descritas. Em síntese: as funções
computáveis são as mesmas funções Turing-computáveis. A importância disso está
na possibilidade de se verificar o alcance e limites de um computador.
Na figura que segue pode-se visualizar
como se dá a ligação entre os mundos formal, matemático e computacional.
5 PRÉ-HISTÓRIA TECNOLÓGICA
Como já foi dito, só foi possível chegar
aos computadores pelas descobertas teóricas de homens que, ao longo dos
séculos, acreditaram na possibilidade de criar ferramentas para aumentar a
capacidade intelectual humana, e dispositivos para substituir os aspectos mais
mecânicos do modo de pensar do homem. E desde sempre essa preocupação se
manifestou na construção de mecanismos para ajudar tanto nos processos de
cálculo aritmético quanto nas tarefas repetitivas ou demasiado simples, que
pudessem ser substituídas por animais ou máquinas. Neste capítulo se tratará
dos dispositivos físicos que precederam o computador, principalmente as
máquinas analógicas que incentivaram a corrida final até o aparecimento dos
computadores digitais.
5.1 Dispositivos mais antigos
Os primeiros dispositivos que surgiram
para ajudar o homem a calcular têm sua origem perdida nos tempos. É o caso, por
exemplo, do ábaco e do quadrante. O primeiro, capaz de resolver problemas de
adição, subtração, multiplicação e divisão de até 12 inteiros, e que
provavelmente já existia na Babilônia por volta do ano 3.000 a.C. Foi muito
utilizado pelas civilizações egípcia, grega, chinesa e romana, tendo sido
encontrado no Japão, ao término da segunda guerra mundial.
O quadrante era um instrumento para
cálculo astronômico, tendo existido por centenas de anos antes de se tornar
objeto de vários aperfeiçoamentos. Os antigos babilônios e gregos como, por
exemplo, Ptolomeu, usaram vários tipos de dispositivos desse tipo para medir os
ângulos entre as estrelas, tendo sido desenvolvidos principalmente a partir do
século XVI na Europa. Outro exemplo é o compasso de setor, para cálculos
trigonométricos, utilizado para se determinar a altura para o posicionamento da
boca de um canhão, e que foi desenvolvido a partir do século XV.
Os antigos gregos chegaram até a
desenvolver uma espécie de computador. Em 1901, um velho barco grego foi
descoberto na ilha de Antikythera. No seu interior havia um dispositivo (agora
chamado de mecanismo Antikythera) constituído por engrenagens de metal e
ponteiros. Conforme Derek J. de Solla Price, que em 1955 reconstruiu junto com
seus colegas essa máquina, o dispositivo Antikythera é “como um grande relógio
astronômico sem a peça que regula o movimento, o qual usa aparatos mecânicos
para evitar cálculos tediosos” (An Ancient Greek Computer, pg. 66). A
descoberta desse dispositivo,datado do primeiro século a.C., foi uma total
surpresa, provando que algum artesão do mundo grego do mediterrâneo oeste
estava pensando em termos de mecanização e matematização do tempo (...)”
[Bol84].
5.2
Logaritmos e os primeiros dispositivos mecânicos de cálculo
Trabalho citado por Bolter, que descreve
o dispositivo Antikythera,na Scientific American, junho de 1959, pgs. 60-67.
John Napier, Barão de Merchiston, é bastante conhecido pela descoberta dos
logaritmos, mas também gastou grande parte de sua vida inventando instrumentos
para ajudar no cálculo aritmético, principalmente para o uso de sua primeira
tabela de logaritmo. A partir dos logaritmos de Napier surgiu uma outra grande
invenção, desenvolvida pelo brilhante matemático Willian Oughtred e tornada
pública em 1630: a régua de cálculo.
Ganhou sua forma atual por volta do ano
de 1650 (de uma régua que se move entre dois outros blocos fixos), tendo sido
esquecida por duzentos anos, para se tornar no século XX o grande símbolo de
avanço tecnológico, com uso extremamente difundido, até ser definitivamente
substituída pelas calculadoras eletrônicas. Com o desenvolvimento dos primeiros
dispositivos mecânicos para cálculo automático, começa efetivamente a vertente
tecnológica que levará à construção dos primeiros computadores. A preparação do
caminho para a completa automatização dos processos de cálculo foi executada
pelos esforços desses primeiros pioneiros da Computação, que vislumbraram a
possibilidade da mecanização mas não possuíam os instrumentos e materiais
adequados para concretizar seus projetos. Entre esses grandes nomes não se pode
deixar de citar Wilhelm Schickard (1592-1635) e os já citados Pascal e Leibniz.
Existem obras sobre essas invenções e
somente serão citados os elemento básicos que as compunham, pois muitas dessas
idéias estarão presentes de alguma forma nos futuros computadores. Quase todas
as máquinas para execução de cálculos mecânicos desses três séculos a partir do
XVI tinham 6 elementos básicos em sua configuração [Wil97]:
• um mecanismo através do qual um número
é introduzido na máquina. Nos primeiros projetos isso era parte de outro
mecanismo, chamado seletor, tornando-se algo independente nas máquinas mais
avançadas;
• um mecanismo que seleciona e
providencia o movimento necessário para executar a adição ou subtração das quantidades
apropriadas nos mecanismos de registro;
• um mecanismo (normalmente uma série de
discos) que pode ser posicionado para indicar o valor de um número armazenado
dentro da máquina (também chamado de registrador);
• um mecanismo para propagar o “vai um”
por todos os dígitos do registrador, se necessário, quando um dos dígitos em um
registrador de resultado avança do 9 para o 0;
• um mecanismo com a função de controle,
para verificar o posicionamento de todas as engrenagens ao fim de cada ciclo de
adição;
• um mecanismo de ‘limpeza’ para
preparar o registrador para armazenar o valor zero.
5.3
Charles Babbage e suas máquinas
A idéia de Leibniz de, através de
máquinas, liberar o homem das tarefas repetitivas e de simples execução foi
quase posta em prática pelo matemático e astrônomo inglês Charles. Havia também
o problema, de modo algum simples, da invenção de mecanismos que produzissem os
movimentos exigidos pelas engrenagens durante os cálculos. Babbage (1792-1871),
considerado unanimemente um dos grandes pioneiros da era dos computadores. No
ano de 1822 ele apresentou em Londres o projeto de um mecanismo feito de
madeira e latão, que poderia ter alterado o rumo da história se tivesse sido
construído efetivamente. Babbage concebeu a idéia de um dispositivo mecânico
capaz de executar uma série de cálculos.
Já por volta da década de 1820 ele tinha
certeza de que a informação poderia ser manipulada por máquina, caso fosse
possível antes converter a informação em números. Tal engenho seria movido a vapor,
usaria cavilhas, engrenagens, cilindros e outros componentes mecânicos que eram
as ferramentas tecnológicas disponíveis em sua época. Para descrever os
componentes de sua máquina faltavam-lhe os termos que atualmente são usados.
Chamava o processador central de “usina” e referia-se à memória da máquina como
“armazém”. Babbage imaginava a informação sendo transformada da mesma forma que
o algodão −sendo tirada do armazém e modificada para algo diferente. Em 1822
Babbage escrevia uma carta a Sir Humphry Davy, o então presidente da Royal
Society, sobre automatizar, como ele próprio dizia, “o intolerável trabalho e a
cansativa monotonia” das tabelas de cálculo, escrevendo um trabalho científico
intitulado “On the Theoretical Principles of the Machinery for Calculating
Tables”(...) [Gol72].
Embora conhecido por seu trabalho na
área de Computação, não será demais citar que Charles Babbage foi também um
excelente matemático e ao lado de Peacock, Herschel, De Morgan, Gregory e do
próprio George Boole, pode ser visto como um dos introdutores da concepção
moderna da Álgebra. Além disso foi um dos líderes da Sociedade Real de
Astronomia inglesa, tendo publicado também pesquisas no campo da óptica,
meteorologia, eletricidade e magnetismo, funcionamento de companhias de
apólices de seguros, criptologia, geologia, metalografia, sistemas taxonômicos,
máquinas a vapor, etc. Escreveu e publicou vários livros, um deles (On the
Economy of Machinery and Manufacturers) reconhecido posteriormente como um dos
trabalhos pioneiros na área chamada Pesquisa Operacional.
Mas o que motivou esse inglês a fazer um
dispositivo capaz de resolver equações polinomiais através do cálculo de
sucessivas diferenças entre conjuntos de números (ver anexo sobre o Método das
Diferenças) foi a necessidade de uma maior precisão na elaboração de tabelas
logarítmicas. No final do século XVIII houve uma proliferação de tabelas de
vários tipos. Desde Leibniz e Newton os matemáticos estiveram preocupados com o
problema da produção de tabelas, tanto por meios matemáticos −como no caso das
de multiplicação, seno, coseno, logaritmos, etc. −ou por meio de medições físicas −densidade
em função da altitude, constante gravitacional em diferentes pontos da terra,
entre outras coisas. A intenção era reduzir o trabalho de cálculo, mas as
tabelas produzidas pelos especialistas tinham muitos erros. Os matemáticos
estavam cientes deles e estudos foram elaborados para se tentar melhorar a
situação. Nestas circunstâncias apareceu o projeto denominado Difference
Enginede Babbage, que lhe valeu o apoio de seus colegas da Sociedade Real e
fundos do governo britânico para iniciá-lo.
O desafio era construir um dispositivo
para computar e imprimir um conjunto de tabelas matemáticas. Babbage contratou
um especialista em máquinas, montou uma oficina e então começou a descobrir
quão distante estava a tecnologia do seu tempo daqueles mecanismos altamente
precisos e de movimentos complexos exigidos pelo seu projeto. A conclusão foi
que deveria, antes de iniciar a construção da Máquina de Diferenças, gastar
parte dos seus recursos para tentar avançar o próprio estado da arte da
tecnologia vigente. Todos estes trabalhos prolongaram-se por alguns anos, sem
sucesso, até que o governo inglês desistiu do financiamento. Em 1833 Charles
Babbage parou de trabalhar em sua máquina.
Apesar de tudo, esse teimoso inglês já
vinha desenvolvendo novas idéias. Provavelmente tentando alguma nova
modificação no projeto da Máquina de Diferenças foi que Charles Babbage
concebeu um mecanismo mais complicado que este em que falhara após vários anos
de tentativas. O pensamento era simples: se é possível construir uma máquina
para executar um determinado tipo de cálculo, por que não será possível construir
outra capaz de qualquer tipo de cálculo? Ao invés de pequenas máquinas para
executar diferentes tipos de cálculos, não será possível fazer uma máquina
cujas peças possam executar diferentes operações em diferentes tempos, bastando
para isso trocar a ordem em que as peças interagem?
Era a idéia de uma máquina de cálculo
universal, que virá a ser retomada em 1930 por Alan Turing, e que terá então
conseqüências decisivas. Vale ressaltar que o Analitical Engine, a Máquina
Analítica −nome dado por Charles Babbage à sua invenção −estava muito próxima
conceitualmente daquilo que hoje é chamado de computador. A Máquina Analítica
poderia seguir conjuntos mutáveis de instruções e, portanto, servir a
diferentes funções −mais tarde isso será chamado de software...Ele percebeu que
para criar estas instruções precisaria de um tipo inteiramente novo de
linguagem e a imaginou como números, flechas e outros símbolos. Ela serviria
para Babbage “programar” a Máquina Analítica, com uma longa série de instruções
condicionais, que lhe permitiriam modificar suas ações em resposta a diferentes
situações.
Reconhecendo a importância de se terem
resultados impressos, Charles procurou que os resultados finais e os
intermediários fossem impressos para evitar erros. Dispositivos de entrada e
saída eram assim necessários. A entrada de dados para a máquina seria feita
através de três tipos de cartões: “cartões de números”, com os números das
constantes de um problema; “cartões diretivos” para o controle do movimento dos
números na máquina; e “cartões de operação” para dirigir a execução das
operações tais como adições, subtrações, etc. Mas o mais genial estava por vir:
duas inovações simples, mas que produziram um grande impacto. A primeira era o
conceito de “transferência de controle” que permitia à máquina comparar
quantidades e, dependendo dos resultados da comparação, desviar para outra
instrução ou seqüência de instruções. A segunda característica era possibilitar
que os resultados dos cálculos pudessem alterar outros números e instruções
colocadas na máquina, permitindo que o “computador” modificasse seu próprio
programa. Nestes temas teve importante participação, Ada Augusta Byron, condessa
de Lovelace, a primeira efetiva programadora de computadores, sobre a qual
ainda se falará.
5.3.1
A máquina de Jacquard, inspiração de Babbage
É importante fazer uma menção a
Joseph-Mariae Jacquard (1752-1834), um francês que produziu uma máquina para
substituir o trabalho humano. Na verdade, Babbage despertou para seu novo
projeto observando a revolução produzida pelos teares de Jacquard, dotados de
um dispositivo que automatizava o processo de tecelagem com vistas a obter
determinados padrões de desenho. Para executar um determinado trançado, a
fiandeira deveria ter um plano ou programa que lhe dissesse que fios deveriam
passar por cima ou por baixo, quando repetir o processo, etc. O ponto chave da
máquina de Jacquard era o uso de uma série de cartões cujos buracos estavam
configurados para descrever o modelo a ser produzido. O sucesso foi total e em
1812 havia na França cerca de 11.000 teares de Jacquard ([Bri79b], volume V).
Adaptando o tear de Jacquard, a Máquina Analítica processava padrões algébricos
da mesma maneira que o tear processava padrões de desenhos.
5.3.2
Uma Lady como primeira programadora
Ada Augusta Byron era filha do famoso
poeta Lord Byron e foi educada pelo matemático logicista inglês Augustus De
Morgan. Bem cedo demonstrou ter grandes talentos. O tear de Jacquard inspirou
também a Herman Hollerith, sobre quem se falará mais adiante. Apresentado a
Babbage durante a primeira demonstração da Máquina de Diferenças, tornou-se um
importante auxiliar em seu trabalho, sendo, sobretudo, alguém que compreendeu o
alcance das novas invenções. Ela percebeu que, diferentemente das máquinas
anteriores com funcionamento analógico (execução de cálculos usando medidas), a
Máquina de
Diferenças era digital (execução de cálculos
usando fórmulas numéricas). Mais importante ainda, deu-se conta da combinação
entre funções lógicas e aritméticas na máquina de Babbage. Quando Charles
Babbage visitou Turim a convite do amigo Giovanni Plana, astrônomo e compilador
de tabelas ministrou uma série de palestras para distintos públicos, incluindo
Luigi F. Menabrea, futuro primeiro-ministro da Itália. Este ficou impressionado
com o trabalho de Babbage e tomou uma série de notas, publicadas depois em 1842
pela Biblioteca da Universidade de Genebra. Lady Lovelace traduziu para o
inglês essas notas, acrescentando muitas observações pessoais [Gol72]. Esta publicação e outro ensaio
(Observations on Mr. Babbage’s Analytical Engine) a colocam como patrona da
arte e ciência da programação. Conforme comentado por B. H. Newman, os escritos
de Ada Byron “mostram como ela teve uma total compreensão dos princípios de um
computador programado, um século antes do tempo deste” [Moo77].
Mesmo não estando a máquina construída,
Ada procurou escrever seqüências de instruções tendo descoberto conceitos que
seriam largamente utilizados na programação de computadores como subrotinas,
loops e saltos.
5.4 Outras Máquinas Diferenciais e Máquinas
Analíticas
Embora não fosse fácil, o trabalho de
Babbage foi divulgado por um certo Dr. Dionysus Lardner, que procurou descrever
a máquina e seu modo geral de operação [Wil97]. Um sueco, George Scheutz,
editor de um jornal técnico de Estocolmo, leu e ficou entusiasmado pela máquina
descrita por Lardner e, sem se comunicar com Babbage, propôs-se a construir a
sua Máquina de Diferenças, junto com o filho. Os anos de 1840, 1842 e 1843
marcaram etapas bem sucedidas no desenvolvimento do projeto, culminando com um
modelo preliminar. Em outubro de 1854 o dispositivo de Scheutz estava completo
e em funcionamento.
Outros, como por exemplo Alfred Decon,
inglês, Martin Wiberg, sueco e G. B. Grant, americano, construíram modelos
derivados, e até 1931 Máquinas de Diferenças foram construídas para produzir
diferentes tipos de tabelas [Wil97]. Com relação à Máquina Analítica, parece
que o irlandês Percy Ludgate (1883-1922) projetou e tentou construir um
mecanismo similar ao de Babbage, conforme pequena descrição feita em um diário
científico de Dublin, em 1909.
Em 1854, durante uma viagem a Londres, Scheutz
pai e filho encontraram-se com Charles Babbage, que aprovou a máquina por eles
construída. Ambos nunca esconderam depois sua admiração pelas idéias do inglês.
5.5
A última contribuição do século XIX: Herman Hollerith
O próximo passo importante na História
da Computação não está relacionado com tabelas de cálculo de logaritmos ou
desenvolvimento de leis do pensamento. O próximo “pensador” a avançar o estado
da arte foi Herman Hollerith, um empregado de apenas 19 anos do United States
Census Office. Seu papel não teve impacto sobre os importantes fundamentos
teóricos da Computação e sua invenção já é obsoleta. Mas sua pequena inovação
cresceu tanto na indústria que, mais tarde, Hollerith veio a dominar o uso da
tecnologia de computadores. Em 1890 ele ganhou a concorrência para o
desenvolvimento de um equipamento de processamento de dados para auxiliar o
censo americano daquele ano. A empresa fundada para isto, Hollerith Tabulating Machines,
veio a ser uma das três que em 1914 compôs a empresa CTR
(Calculating-Tabulating-Recording), renomeada em 1924 para International
Business Machine - IBM [IEEE95].
Hollerith, inspirado pelos teares de
Jacquard, desenvolveu a idéia de se aproveitar os cartões perfurados dos teares
em uma máquina que pudesse interpretar, classificar e manipular as somas
aritméticas representadas pelas perfurações. Ele combinou cartões perfurados
com os novos dispositivos eletromagnéticos de então.
5.6
Computadores analógicos
Há uma história interessante sobre os
computadores analógicos, cujas origens remontam ao passado distante. Muitos
dispositivos analógicos foram desenvolvidos a partir do ano 400 a.C. Típicos
são os astrolábios (ver anexo sobre o assunto), o já mencionado mecanismo
Antikythera, os instrumentos de sinalização e os planetários [Wil97]. Irá
interessar particularmente para esse trabalho uma classe específica de
instrumentos analógicos: as máquinas integradoras, que remontam a Maxwell, Faraday,
Kelvin e Michelson, entre outros, que tentaram desenvolver dispositivos para
executar operações matemáticas [Lil45]. Essas foram usadas em projetos que
exigiam a solução de equações diferenciais e modelagem de sistemas mais
complexos, como o movimento das ondas do mar, evoluindo até os computadores
eletrônicos analógicos, alguns ainda usados até os dias de hoje para aplicações
especiais. Tais desenvolvimentos formam uma parte dessa infra-estrutura que
constituiu a base para o aparecimento dos computadores digitais.
Um computador analógico é um dispositivo
no qual os números são representados por quantidades físicas medidas, e nos
quais equações ou relações matemáticas são representadas por diferentes
componentes, correspondendo a operações matemáticas singulares, tais como
integração, adição ou multiplicação. Um dispositivo analógico muito conhecido é
a régua de cálculo. Ela consiste basicamente de dois trilhos graduados de
acordo com os logaritmos de números, e os trilhos deslizam um sobre o outro. Os
números são representados através de comprimentos nos trilhos e a operação
física que pode ser executada é a soma de dois comprimentos nos trilhos.
Sabe-se que o logaritmo de um produto de
dois números é a soma dos logaritmos deles. Assim pode-se com a régua de
cálculo formar a soma de dois comprimentos e executar multiplicação e operações
correlatas. Os componentes analógicos podem ser divididos em duas classes,
dependendo da maneira como os números são representados:i) por quantidades
mecânicas, como um deslocamento linear ou rotação angular; ii) quantidades
elétricas, como voltagem, corrente, impedância, condutividade.
Se os deslocamentos lineares são usados
para representar números, há caminhos simples, nos quais relações geométricas
podem aparecer através de formas mecânicas. As operações matemáticas podem ser
realizadas usando-se uma relação geométrica correspondente. Na figura ao lado
pode-se ver um computador analógico muito simples.
No final do século XIX, as equações
matemáticas que apareciam nos estudos de física passaram a exigir uma grande
quantidade de cálculos, quase impossíveis de se resolver na prática. Os físicos
começaram a desenvolver sofisticadas ferramentas matemáticas para descrever,
através de equações, a operação de determinados tipos de mecanismos, assim como
conceber máquinas cujo movimento era feito de acordo com equações. Uma solução
foi a de se criar um sistema físico análogo e cujo comportamento pudesse ser
quantitativamente observado. Por exemplo: o fluxo de calor é análogo ao fluxo
de eletricidade, onde temperatura corresponde a potencial elétrico.
Logo, pela análise de camadas
eletricamente condutoras, dispostas de maneira a simular às características de
uma estrutura, pode-se investigar o fluxo de calor dentro dessa estrutura
([Bri79a], volume XI). Alguém que quisesse projetar um dispositivo desse tipo
deveria:
i)
analisar quais operações desejaria executar;
ii)
procurar um aparato físico cujas leis de operação sejam análogasàquelas
que
se deseja executar;
iii)
construir o aparelho;
iv)
resolver o problema medindoas quantidades físicas envolvidas.
Dois nomes famosos estão diretamente
ligados à efetiva produção de dispositivos analógicos para resolução de
cálculos mais complexos: James Clerk Maxwell (1831-1879), o criador da teoria
sobre a eletricidade e o magnetismo, e James Thomson. Ambos inventaram
dispositivos analógicos por volta de 1860 [Gol72].
Como por exemplo equações diferenciais
ordinárias, séries de transformações de Fourier, sistemas de equações
algébricas lineares. Em todos os dispositivos analógicosque começaram a
aparecer, a operação fundamental é a da integral, isto é, todos eles produziam
como saída ∫ b a dx x f ) ( , dado f(x) como entrada.
Dentro da evolução das máquinas
analógicas, os analisadores diferenciais foram os dispositivos que mais tarde
passaram a ser chamados propriamente de computadores analógicos.
5.6.1 Primeiras evoluções: século XV
É por volta do século XV que aparecem
dispositivos analógicos mais sofisticados, utilizados para prever os intervalos
de temposde maré alta e baixa em alguns portos europeus. São os chamados “tide
predictors”, com suas escalas circulares, seus ponteiros que marcavam a posição
do sol e da lua – e um interessante sistema de checagem desses dados – e que,
juntamente com algumas informações específicas do porto, permitia ao usuário
ler nas escalas do instrumento o tempo aproximado entre a maré alta e baixa.
Quando na metade do século XVIII foi possível encontrar uma fórmula para o
cálculo de séries de coeficientes de coseno (y = A cos(u) + B cos(v) + C cos(w)
+ ...), Lord Kelvin construiu uma máquina analógica para avaliar essa fórmula.
Chamou-a analisador harmônico, e um exemplo pode ser visto na próxima figura.
Um desses primeiros dispositivos foi
elaborado em 1878. Escrevendo sobre seu analisador harmônico de ondas do mar
Kelvin disse: “O objetivo desta máquina é substituir o grande trabalho mecânico
de calcular os fatores elementares que constituem a subida e descida da maré
(...)”[Gol72]. Uma análise harmônica consiste em se formar um número de
integrais do tipo geral ∫ dt t g t f ) ( ) ( , onde gé uma função seno ou
coseno. A avaliação das integrais desse tipo foi o que Kelvin conseguiu,
fazendo uma engenhosa adaptação de um integrador elaborado por seu irmão.
A última invenção de Kelvin relevante
para nossa história foi o que agora é chamado Analisador Diferencial, um
dispositivo para a solução de sistemas de equações diferenciais ordinárias. Dos
dispositivos chamados integradores é possível obter uma integral que é o
produto de duas variáveis. Uma grande gama de sistemas de equações pode ser
computada por esses componentes. Kelvin nunca chegou a construir sua máquina
por não dispor de tecnologia suficiente. A dificuldade estava em como usar a
saída de um integrador como entrada em outro. Na explicação de Maxwell, o
problema central era a saída estar medida pela rotação de um disco ligado a uma
roda. Esta roda é acionada por estar apoiada sobre um disco que gira em torno
de um eixo. O torque desse disco − sua capacidade de girar a roda − é muito
pequeno e conseqüentemente ele, de fato, não pode fornecer uma entrada.
Integrador é também um dispositivo
analógico, que produz como resultado a integral de f(x). Seria exaustivo e
fugiria do escopo do trabalho falar sobre esses dispositivos – existem ainda os
planímetros, para medir áreas de figuras traçadas por um operador humano, etc.
– que fazem parte desses primeiros esforços em direção a sofisticados
mecanismos analógicos para outro integrador. Esses problemas permaneceram
suspensos por quase 50 anos até o desenvolvimento dos amplificadores de torque.
Analisadores diferenciais mecânicos foram revitalizados por volta de 1925 e o
mais famoso destes foi o construído no Instituto de Tecnologia de Massachusetts
(MIT) por Vannevar Bush.
5.6.2 Michelson e seu analisador harmônico; I
Guerra Mundial
“O principal obstáculo na construção de
tal máquina está na acumulação de erros envolvida no processo de adição. O
único instrumento projetado para efetuar esta adição é o de Lord Kelvin (...).
O alcance da máquina é,no entanto, limitado pelo pequeno número de elementos na
conta (...), pois com um considerável aumento no número de elementos, os erros
acumulados devido aos fatores já mencionados logo neutralizariam as vantagens
do aumento do número de termos na série.”
São palavras de Albert A. Michelson
(1852 - 1931) em 1898 [MS98], um dos grandes físicos do século XX.
Interessou-sepelo desenvolvimento de um analisador harmônico que pudesse
manipular uma série deFourier de até 20 termos, continuando a tradição das
máquinas analógicas.
Outra dificuldade substancial: não é
possível aumentar muito o número de termos em uma série pois o seu dispositivo
de adição de termos levava a um acúmulo de erros. Para uma longa série de
termos o resultado poderia estar completamente viciado. Após a Segunda Guerra
Mundial, analisadores diferenciais mecânicos começaram a se tornar obsoletos
com o desenvolvimento de analisadores diferenciais eletrônicos e com o
aparecimento da Computação eletrônica digital.
Durante a I Guerra Mundial tornaram-se
estratégicos os problemas referentes aos cálculos balísticos, o que foi um
incentivo à continuidade do desenvolvimento de máquinas computacionais. Um
desses problemas é o de como determinar a função de deslocamento, observando-se
a resistência do ar, em função davelocidade. Quando a artilharia aponta para
objetos que se movem, como navios ou aviões, é essencial prever o movimento dos
alvos.
Foram duas décadas (1910 e 1920) em que
houve um grande aprofundamento teórico, com a formação de grupos de matemáticos
nos EUA e Inglaterra, cujas principais descobertas estão nos procedimentos
numéricos para solução de equações diferenciais com grande precisão [Gol72].
5.6.3 Computadores analógicos eletromecânicos
Nos primeiros anos do século XX muitos
físicos e engenheiros de todo o mundo estiveram trabalhando em questões
fundamentais da área de eletricidade. Centros de pesquisa foram criados em
Harvard, no MIT, na IBM, naGeneral Electric, e outros lugares. Tiveram sucesso
na formulação matemática dos problemas em teoria de circuitos e muitos textos
foram escritos nos anos da década de 1920, especialmente por Vannevar Bush no
MIT, A.E. Kennelly de Harvard e do MIT, C.P Steinmetz da General Electric,
entre outros [Gol72].
Também não se pode esquecer o trabalho
fundamental de Oliver Heaviside (1850-1897), um inglês que desenvolveu um
dispositivo matemático para manipular equações e analisar indução
eletromagnética, e o trabalho de Norbert Wiener junto a Bush. Como se disse
sobre Kelvin e seu analisador harmônico, o grande problema foi ele não dispor
da suficiente tecnologia para desenvolver um dispositivo que executasse a
operação de gerar a integral doproduto de duas funções, ∫ b a dx x f x f ) ( 2
) ( 1 , e por vários anos a ideia esteve esquecida até o desenvolvimento dos
amplificadores de torque.
A partir de 1927 até 1931, Vannevar Bush
e sua equipe no MIT desenvolveram mecanismos para resolver equações
diferenciaisordinárias. Bush deve especialmente a C. W. Niemann, engenheiro e
inventor do amplificadorde torque Bethlehem, a possibilidade de ter construído
seu famoso analisador diferencial, terminado em 1931. Usando o amplificador de
Niemann, Bush pôde construir uma máquina usando exclusivamente integradores.
Ainda mecânico, este dispositivo foi aprimorado durante a II Guerra Mundial,
pela substituição dos mecanismos puramente mecânicos por corrente e voltagem,
obtidas através de potenciômetros instalados sobre os discos cuja rotação
representava quantidades. As voltagens correspondiam à soma, produto e a uma
função de uma variável. Entram aqui conceitos de servo-mecanismos e
amplificadores operacionais [Ryd67].
Ainda dentro do mundo dos computadores
analógicos, deve-se destacar o trabalho do físico inglês Douglas Hartree, das
universidades de Manchester e Cambridge, que tentou resolver equações
diferenciais parciais com analisadores diferenciais, e que, ao deparar-se com
cálculos altamente complexos, anteviu e preparou o advento dos computadores
eletrônicos [Gol72].
As novas descobertas da indústria e da
ciência no campo da eletricidade − proporcionando rapidez e precisão aos
equipamentos − juntamente com a limitação dos equivalentes analógicos
eletromecânicos, acabaria por impor a nova tecnologia de circuitos. Uma nova
era da Computação começava a ser desvelada. É necessário assinalar, no entanto,
que novas máquinas analógicas eletromecânicas −sucedâneas da última máquina de
Bush, no MIT, em 1942 −foram construídas e até 1960 ainda estavam em uso
([Bri79a], volume XI).
5.7 Circuitos elétricos e formalismo lógico:
Claude Elwood Shannon
Como um grande tapete, que vai sendo
tecido aos poucos por diferentes artesãos que não têm a visão de todo o
conjunto, paulatinamente avançou a teoria e a técnica que levaram à construção
do computador digital.Paralelamente aos matemáticos, também um jovem
engenheiro, Claude E. Shannon (1916 - 2001), com a idade de 22 anos, deu uma
grande contribuição à Computação: em 1937 ele estabeleceu uma ligação entre os
circuitos elétricos e o formalismo lógico. Mestre em Engenharia Elétrica e
Doutor (PhD) em Matemática pelo Instituto de Tecnologia de Massachusetts (MIT),
Cambridge, MA, em 1940, durante a Segunda Guerra Mundial, Shannon começou a
desenvolver uma descrição matemática da informação, dando origem a um ramo de
estudos conhecido como Teoria da Informação[Gat95]. Deu ainda importantes
contribuições na área da Inteligência Artificial.
O que Shannon fez em 1937 foi mostrar um
caminho para projetar máquinas baseadas na lógica algébrica descrita um século
antes por George Boole, aquela em que só havia dois valores no sistema de
cálculo lógico: 1 e 0. Se um valor é verdadeiro, ele pode ser representado pelo
valor 1 e, se falso, pelo 0. Nesse sistema, uma tabela-verdadedescreveria os
vários estados lógicos possíveis. Uma das características importantes da álgebra
de Boole é que as operações lógicas podem ser colocadas juntas e formar novas
operações. Claude Shannon percebeu que a mesma álgebra poderia descrever o
comportamento de circuitos elétricos chaveados. Igualmente importante foi o
modo como estas combinações entre operações lógicas e aritméticas poderiam ser
usadas para se construir uma “operação de memória”. A álgebra booleana torna
possível a construção de um dispositivo de “estado” que pode armazenar qualquer
informação específica, seja um dado ou uma operação. E se um circuito elétrico
pode executar operações matemáticas e lógicas, e pode também armazenar os
resultados de tais operações, então os computadores digitais podem ser
construídos.
Em resumo:
• lógica
booleana, cujas tabelas-verdade poderiam representar as regras de um sistema
lógico formal;
• tabelas de
instruções da Máquina deTuring que podem simular as tabelas-verdade de Boole;
• dispositivos
como o relê – já então muito usados em telefones – para representar “estados”
de máquina.
Em breve já seria possível a
construçãode circuitos elétricos que simulavam algumas operações lógicas.
Shannon estava procurando um procedimento matemático que fosse o mais adequado
para se descrever o comportamento de circuitos a relê. Sua tese de mestrado
publicada em 1937 mostrou como a álgebra booleana poderia ser usada para
descrever as operações desses complexos circuitos.
Um relê é uma chave ou dispositivo que
abre ou fecha um circuito, permitindo ou bloqueando o fluxo da eletricidade. É
semelhante a um interruptor de luz, com a diferença de que o relê não é ligado
ou desligado por uma ação humana, mas pela passagem de uma corrente elétrica.
Nos dez anos seguintes ao seu
primeirotrabalho (a tese anteriormente citada), Shannon dirigiu seu interesse para
o estudo da comunicação, parte de um trabalho já iniciado por Norbert Wiener,
de quem se falará mais adiante. Depois da guerra, tendo encontrado uma
ferramenta perfeita para a descrição de circuitos a relê, Claude Shannon
procurou definir matematicamente aquilo que as novas máquinas processavam. Ele
estava interessado nas leis subjacentes aos sistemas de comunicação de
mensagens feitos pelo homem, na diferença entre ruído e mensagem e de como esta
mantinha a sua ordem em um meioonde a “desordem” – ruído – é muito alta.
Chegou a equações muito parecidas às do
físico Boltzmannsobre as leis da entropia. Em 1948 Shannon publicou dois
trabalhos queoriginaram a já citada área da Teoria da Informação (A Mathematical
Theory of Information). O desenvolvimento deu-se rapidamente, afetando não
somente o projeto de sistemas de comunicação, mas também áreas como
automatização, ciência da informação, psicologia, lingüística e termodinâmica
([Bri79a], volume IX).
Em 1950 publicou “A Chess Playing
Machine” onde propunha que computadores digitais poderiam ser adaptados para
trabalhar simbolicamente com elementos representando palavras, proposições ou
outras entidades conceituais, dando prosseguimento ao emergente ramo de estudos
denominado mais tarde Inteligência Artificial. Em 1953, com “Computers and
Automata” falou sobre simulação, através dehardware e software, de algumas
operações da mente ([Rhe85], capítulo 6). Em 1956, mantendo seu trabalho nos
laboratórios da Bell, Shannon aceitou o cargo de professor no MIT, atividade
que exerceu durante muitos anos. Preocupava-se com os conceitos e simplificava
ao máximo a simbologia. Onde outros professores poriam símbolos e mais
símbolos, índices e mais índices, Shannon colocava duas ou três letras e
incentivava os alunos a perceber as relações matemáticas que essas letras
traduziam.
Gênio matemático que combinava a
intuição, a abstração e as aplicações, Claude Shannon tinha como passatempos
andar de monociclo, construir máquinas de jogar xadrez e outras aparentemente
inúteis. Estendeu sua Teoria Matemática de Comunicação ao campo da criptologia.
Claude Shannon, tinha a doença de Alzheimer. Faleceu no sábado, 24 de Fevereiro
de 2001, no Courtyard Nursing Care Center em Medford, Massachusetts. Ele estava
com 84 anos.
Informalmente falando, trata da
representação matemática das condições e parâmetros que afetam a transmissão e
processamento da informação. É importante notar que “informação”, como
entendida na teoria da informação, não tem nada a ver com o significado inerente
na mensagem. Significa um certo grau de ordem, de não randomicidade, que pode
ser medida e tratada matematicamente como as quantidades físicas.
Elaborou um autômato que procurava a
saída num labirinto e aquela a que chamou de “máquina final”. Nela, via-se
apenas um interruptor. Ligando-o, o aparelho emitia um som zangado e dele
emergia uma mão mecânica que desligava o interruptor, terminando a brincadeira.
6 AS PRIMEIRAS MÁQUINAS
6.1 Os primeiros computadores eletromecânicos
A partir da década de 1930 alguns
cientistas começaram a trabalhar com dispositivos de cálculo com algum tipo de
sistema de controle automático. Já se dispunha da tecnologia necessária para se
construir aquela estrutura imaginada por Babbage. Surgiram os primeiros
computadores mecânicos e eletromecânicos e muitos projetos de computadores
eletrônicos feitos posteriormente sofreram muitas influências dessas primeiras
máquinas.
6.1.1 Konrad Zuse
Konrad Zuse (1910 - 1995) foi o primeiro
a desenvolver máquinas de cálculo controladas automaticamente. Esse engenheiro
civil percebeu rapidamente que um dos aspectos mais onerosos ao se fazerem
longoscálculos com dispositivos mecânicos era guardar os resultados
intermediários para depois utilizá-los nos lugares apropriados nos passos
seguintes[Zus80]. Em 1934, depois de várias idéias e tentativas, Zuse chegou à
conclusão que um calculador automático somente necessitaria de três unidades
básicas: uma controladora, uma memória e um dispositivo de cálculo para a aritmética.
Ele desenvolveu o seu Z1, em 1936, um computador construído inteiramente com
peças mecânicas e que usava uma fita de película cinematográfica para as
instruções que controlavam a máquina.
Em 1938, antes mesmo de terminar o Z1,
um aluno de Zuse, Helmut Schreyer, construiu uma parte do Z1 usando válvulas.
Em função da situação de pré-guerra, Zuse teve de abandonar essa linha de
desenvolvimento – seriam necessárias 1000 válvulas, o que era impossível
naquele momento – e continuou o Z2 usando tecnologia baseada em relês. Esses
dois primeiros modelos eram somente para teste: “tinham todas as
características do computador posterior, mas não trabalhavam satisfatoriamente.
O Z3 foi terminado em 1941 e foi o primeiro modelo totalmente operacional” [Zus80]. O Z3, como a maioria das máquinas
dessa primeira geração,usava dois mecanismos separados para as funções
aritméticas e tinha uma unidade especial para conversão de números na notação
decimal para a binária. Em termos de velocidade podia ser comparado ao MARK I,
discutido mais à frente, que foi terminado dois anos apóso Z3. O Z3 executava
três a quatro adições por segundo e multiplicava dois números em quatro ou
cinco segundos. Nunca chegou a ser usado para grandes problemas em função
depossuir uma memória de tamanho limitado. Foi destruído, junto com a casa de
Zuse, por um bombardeio em 1944.
O Z4 começou a ser desenvolvido quase
quesimultaneamente ao final do trabalho do Z3. Era essencialmente a mesma
máquina, com maior capacidade de memória e mais rápida. Por causa do avanço das
tropas aliadas, o trabalho do Z4 foi interrompido quase ao seu final e a
máquina ficou escondida em uma pequena cidade da Bavária chamada Hinterstein Em
1950, na Suíça, Zuse reconstruiu o seu Z4, e fundou uma empresa de computadores,
absorvida depois pela Siemens. As máquinas de Zuse tiveram pouco impacto no
desenvolvimento geral da Computação pelo absoluto desconhecimento delas até um
pouco depois da guerra [Zus80].
6.1.2 As máquinas da Bell e as máquinas de Harvard
Por volta de 1937, enquanto Turing
desenvolvia a idéia da sua “Máquina Universal" e formalizava o conceito do
que é computar e do que é um algoritmo, nos Estados Unidos dois outros
matemáticos também consideravam o problema da computação: Howard Aiken, em Harvard,
cujo trabalho daria seus frutos em1944, e George Stibitz, nos laboratórios da
Bell Telephones. Eles procuravam componenteseletromecânicos que pudessem ser
usados na computação de cálculos.
Nos últimos anos da década de 1930 os
problemas envolvendo cálculos com números complexos (aqueles com partes
imaginárias, envolvendo raízes negativas) no projeto de equipamentos
telefônicos começaram a dificultar o crescimento da Cia. Bell Telephone. As
pesquisas da empresa então começaram a ser direcionadas à descoberta de
mecanismos que pudessem satisfazer essa necessidade cada vez mais crescente de
cálculos mais rápidos. Stibitz demonstrou que relês podiam ser utilizados para
executar operações aritméticas. A partir de 1938, juntamente com S. B. Willians
começou a implementar suas idéias, e em 1939 estava pronto o seu Modelo I. Seus
outros 'Modelos' chegaram até o número VI, terminado em 1950 – tendo estado em
uso até 1961 –, e juntamente com os computadores K do Dr. Zuse foram os
primeiros computadores de código binário, baseados em relês [Sti80].
Ao mesmo tempo, nos Laboratórios de
Computação de Harvard, Howard Aiken e engenheiros da IBM começaram a
desenvolver um outro tipo de máquinas eletromecânicas, quer dizer, tinha o
controle automático das suas operações. Não totalmente baseada nos relês, já
incorporando uma nova tecnologia que seria amplamente utilizada mais tarde: as
memórias de núcleo deferrite. Ao término de sua primeira versão, em 1943, o IBM
Automatic Sequence Controlled Calculator, comumente chamado de Harvard Mark I,
tinha uma série de novas capacidades:modificava instruções dinamicamente
baseando-se nos resultados obtidos durante o processamento, possuía unidades
para decidir qual o melhor algoritmo para execução de um cálculo através do
argumento de uma função, testava o conteúdo de registradores, etc.
Diferenciava-se fundamentalmente de máquinas anteriores, como o EDSAC, (citado
mais à frente), por usar memórias separadas para instruções e dados, o que
ficou denominado como arquitetura de harvard. Quando terminado em 1944, foi
imediatamente adotado pela marinha americana, para fins militares. Novas
versões foram produzidas até 1952.
6.1.3 A participação da IBM
As máquinas de calcular mecânicas
produzidas por empresas como a IBM não tinham linha de produção até a entrada
dessas empresas no mercado de computadores propriamente dito. Eram equipamentos
para auxiliar tarefas computacionais, que variavam desde as tabuladoras de
Hollerith até tabuladoras para cálculos científicos como as produzidas por L.J.
Comrie na Inglaterra ou Wallace J. Eckert nos Estados Unidos. Em 1935 a IBM
começou a produzir suas séries 602, 602A até 605, calculadoras baseadas em
relês que produziam em altas velocidades – como Babbage imaginou – tabelas de
vários tipos, com alta confiabilidade. Uma posterior evolução foi a
possibilidade dessas máquinas poderem ser programadas através de painéis de
controle ('plugboards') para ler um cartão, executar até 60 diferentes cálculos
aritméticos, e perfurar o resultados no próprio cartão de leitura. Outras
empresas como a Remington Rand produziram equipamentos semelhantes [Wil97].
Depois do sucesso do Mark I em
Harvard,no qual teve grande participação com o laboratório em Endcott, a IBM
lançou-se naprodução do Selective Sequence Electronic Calculator (SSEC), sob o
comando de Frank Hamilton, que pertenceu ao grupo de Aiken, em Harvard.
Terminado em 1947, atraiu um importante grupo de pesquisadores que buscavam o
aprimoramento da capacidade de cálculo e cujas soluções apontavam para um
conceito decisivo para os computadores: o de
programa armazenado. O último computador eletromecânico produzido foi o
CPC, Card-Programmed Electronic Calculator, modelos I e II que finalizaram a
série 700 [Hur80].
6.2 O início da era da computação eletrônica
Durante os anos de 1936 a 1939, “John
Vincent Atanasoff, com John Berry, desenvolveu a máquina que agora é chamada de
ABC(Atanasoff-Berry Computer), na Universidade de Iowa, EUA, como uma máquina
dedicada especialmente à solução de conjuntos de equações lineares na Física.
Embora sendo um dos primeiros exemplos de calculadora eletrônica, o ABC
propiciou o desenvolvimento dos primeiros conceitos que iriam aparecer nos computadores
modernos: a unidade aritmética eletrônica e a memória de leitura e
gravação”[IEEE95].
6.2.1 Estados Unidos: ENIAC, EDVAC e EDSAC
No início da Segunda Guerra, as
necessidades de melhores tabelas de cálculo para as trajetórias de tiros tornaram-se
imperativas, pois os analisadores diferenciais estavam no seu limite. Nessa
época foi então montado, na Moore School
of Electrical Engineering, da Universidade da Pensilvânia (Filadelfia, EUA), um
grupo de pesquisa para o desenvolvimento de projetos eletrônicos relacionados
ao futuro radar. Entre eles, J. Presper Eckert, Joseph Chedaker e Kite
Sharpless logo se envolveram na produção de circuitos eletrônicos usados como
contadores.
Eckert (1919-1995) e um pouco mais tarde
John Mauchly (1907-1980), físico, e Herman H. Goldstine, matemático, acabaram
portornarem-se os principais protagonistas na construção do primeiro computador
de uso geral que realmente funcionou como tal, o ENIAC (Electronic Numerical
Integrator and Computer): esta máquina e a equipe que a projetou e construiu,
serão responsáveis porum grande salto no desenvolvimento dos computadores
eletrônicos. Seu formato era em U, suas memórias tinham 80 pés de comprimento
por 8,5 de largura, e cada um dos seus registradores de 10 dígitos media 2 pés.
Ao todo possuía 18.000 válvulas.
Executava desvios condicionais e era programável, o que o diferenciava das
outras máquinas construídas até a data. Sua programação era feita manualmente,
através de fios e chaves. Os dados a serem processados entravam via cartão
perfurado. Os programas típicos do ENIAC demoravam de meia hora a um dia
inteiro para serem elaborados e executados.
Em 1944 John von Neumann ingressou como
consultor na equipe da Universidade da Pensilvânia. Os responsáveis pelo
projeto estavam interessados em melhorar a maneira como os programas eram
desenvolvidos e iniciaram discussões a respeito do armazenamento de programas
na forma de números. Iniciaram assim um trabalho sobre projetos de computadores
que foi fundamental nos 40 anos que se seguiram. Em 30 de junho de 1945, von
Neumamm publicou o First Draft of a Report on the EDIVAC(Electronic Discrete
Variable Automatic Computer), que estabeleceuo paradigma de projetos de
computadores para várias gerações seguintes de máquinas. Essa arquitetura ficou
conhecida com o nome de “arquitetura de von Neumann”, e entre outras coisas
incluía o conceito de programa
armazenado. O ENIAC começou a operar em 1943, tendo sido terminado totalmente
em 1946, encerrando suas operações em 1955. A saída dos professores Eckert e
Mauchly da equipe atrasou, no entanto, o desenvolvimento do projeto EDVAC, só
concluído em 1952.
Em 1946, Maurice Wilkes, da Universidade
de Cambridge, visitou a Moore School para participar de uma conferência sobre
computadores. Ao regressar a Cambridge, decidiu iniciar um projeto para um
computador baseado no princípio do programa armazenado, chamado EDSAC
(Electronic Delay Storage Automatic Calculator), que se tornou operacional em
1949. Foi o primeiro computador de grande porte, baseado no citado conceito,
que entrou em operação.
Muitos dos pioneiros do desenvolvimento
dos computadores acreditam que esse termo dá um crédito exagerado ao trabalho
de von Neumann, que escreveu as idéias, e muito pouco aos engenheiros Eckert e
Mauchly, que construíram as máquinas. A polêmica foi ruidosa e, em 1947, estes
dois últimos deixaram a Moore School.
6.2.2 A contribuição inglesa: o COLOSSUS
Enquanto isso, na Inglaterra, o grande
esforço era decifrar o código secreto de guerra germânico. Um grupo especial
formado por cientistas e matemáticos reuniu-se em Bletchley Park, um lugar
entre as Universidades de Cambridge e Oxford, para tentar construir uma máquina
capaz de decodificar o alfabetoproduzido pela versão germânica de um
dispositivo inventado nos Estados Unidos, o ENIGMA [Kah67]. A equipe era
liderada pelo prof. T. H. Flowers, sendo o prof. M. H. A. Newman o responsável pelos
requisitos que levariam, em 1943, à construção do computador digital eletrônico
COLOSSUS. O trabalho do grupo de Betchley foi enormemente influenciado pelos
resultados sobre computabilidade obtidos por Alan Turing. Este trabalhava no
departamento de comunicação criado pelo governo britânico em função da guerra,
com a missão de treinamento em lógica matemática e logo alocado também para os
esforços de decifrar o código secreto alemão. O COLOSSUS acabou não sendo
conhecido em sua época por duas razões. A primeira é não ter sido ele um
computador para uso geral, mas sim projetadoespecialmente para decodificar
mensagens secretas. A segunda: a existência desta máquina somente foi revelada
a partir de 1970, sendo que seus algoritmos de decodificação são ainda
secretos.
Ainda na Inglaterra, após o fim da
guerra, Turing uniu-se ao centro de pesquisas do National Physical Laboratory,
onde rapidamente elaborou o projeto básico do Automatic Computing Engine (ACE),
que iniciou operações em 1950.
6.2.3 Outras contribuições
Um importante aspecto do desenvolvimento
dos computadores foi a produção de dispositivos chamados de 'memória'. Desde
Konrad Zuse, a construção de computadores que pudessem ter seus programas
armazenados preocupou os cientistas e foi um fator determinante nas primeiras
arquiteturas. Das memórias mecânicas de Zuse, passando pelas memórias térmicas
– utilizadas somente experimentalmente – de A. D. Booth, pelos sistemas de
linha de retardobaseados em mercúrio de Willian Shockley, da Bell –
aperfeiçoada por Presper Eckert – utilizados no ENIAC, pelas memórias
eletrostáticas de Willians até os núcleos magnéticos de ferrite, um árduo
caminho foi percorrido. A memória de núcleos magnéticos acabou preponderando,
tendo sido utilizada primeiramente em uma máquina de teste no MIT e mais tarde
no computador conhecido como Whirlwind. O uso das memórias de núcleo magnético
aumentaram excepcionalmente o desempenho dos computadores, podendo ser
consideradas como um divisor de águas no desenvolvimento dos mesmos.
Importantes também nesse primeiro
período foram duas grandes revoluções tecnológicas: o emprego de válvulas para
tornar o computador mais rápido, confiável e de uso geral, e o conceito de
programa armazenado. Esta técnica de usar uma “memória de armazenamento” assim
como a “transferência decontrole via condição”, que permitiam parar e reiniciar
o processamento a qualquer instante, abriu enorme perspectiva para a
programação de computadores. O elemento chave dessaarquitetura era a unidade
central de processamento, que permitia a coordenação de todas as funções do
computador através de uma única fonte. Em 1951, o UNIVAC I (Universal Automatic
Calculator), construído pela Remington-Rand, tornou-se o primeiro computador
comercialmente disponívelque utilizava esses conceitos.
6.3 As primeiras linguagens
Seguindo as premissas iniciais − de se destacar
neste trabalho a evolução dos conceitos e idéias ao longo da História da
Computação − não se fará aqui uma descrição exaustiva da evolução das
linguagens de programação. Depois de algumas considerações teóricas iniciais,
serão vistas as motivações e as primeiras tentativas de se estabelecer um
código que pudesse ser lido e processado pelos primeiros computadores.
6.3.1 Alguns aspectos teóricos
Como foi visto, um dos pontos
fundamentais do projeto formalista de Hilbert para a solução de problemas
matemáticos era descobrir um procedimento efetivo (ou mecânico) para verificar
a validade de proposições matemáticas. Depois do Teorema de Gödel evidenciou-se
que tal proposta é irrealizável, mas todos os estudos em torno desse projeto de
Hilbert e dos resultados de Gödel propiciaram, entre outras coisas, uma
adequada caracterização do termo efetivamente computável, através da Máquina de
Turing e das funções lambda-definíveis de Church e Kleene. Tornou-se claro o
que é um procedimento efetivo, tornando-se claro ao mesmo tempo o que é um
problema computável.
Um procedimento efetivo é uma seqüência
finita de instruções que podem ser executadas por um agente computacional, seja
ele homem ou não. Propriedades:
I.
a descrição deve ser finita;
II.
parte de um certo número de dados, pertencente a conjuntos específicos
de objetos, e espera-se que produza um certo númerode resultados que mantenham
relação específica com os dados;
III.
supõe-se que exista um agente computacional −humano, eletrônico,
mecânico, etc. − que execute as instruções do procedimento;
IV.
cada instrução deve ser bem definida;
V.
as instruções devem ser tão simples que poderiam ser executadas por
alguém usando lápis e papel, em um espaço de tempo finito.
Esse procedimento efetivo também é
chamado de algoritmo. Programas de computadores que terminam sua execução,
fornecido qualquer conjunto específico de dados de entrada, são algoritmos. A
descrição finita do algoritmo deve ser feita através de uma determinada
linguagem. Essa linguagem algorítmica deve pertencer a um subconjunto não
ambíguo de uma linguagem natural, tal como Francês ou Inglês, ou ser uma
linguagem artificial construída para isso, como, por exemplo, as linguagens de
programação (Fortran, Lisp, Ada, Cobol, Pascal, etc.).
As frases da linguagem descreverão as
operações a serem executadas. A forma ou formato de procedimentos efetivos em
uma linguagem algorítmica qualquer é especificada por um conjunto de regras
chamado regras de sintaxe, cujas propriedades estão acima enumeradas [BL74].
Essa sintaxe refere-se aos programas corretamente escritos nela e o
relacionamento entre os símbolos e frases que ocorrem nesses programas. Alguns
autores a dividem em concretae abstrata [Mos92]. A concreta envolve:
•
reconhecimento de textos (seqüências decaracteres) corretamente escritos
de acordo com as especificações da linguagem;
•
a colocação dos textos, de maneira não ambígua, dentro das frases que
compõe o programa. A sintaxe abstrata molda as estruturas de frases do
programa.
Portanto a sintaxe refere-se à formados
programas: de que modo expressões, comandos e declarações podem ser justapostos
para compor um programa. Uma linguagem de programação torna-se assim, entre
outras coisas, uma notação formal para a descrição de um algoritmo,
entendendo-se por notação formalum simbolismo que não tenha as imprecisões nem
a variabilidade de uma linguagem natural, que possibilite rigor nas definições
e demonstrações sobre os procedimentos.
Uma linguagem de programação necessita
ainda de outros requisitos. Deve ser universal, isto é, que qualquer problema
cuja solução possa ser encontrada através de um computadorpode ser escrito com
ela. Na prática deve ser apta a resolver, no mínimo, os problemas da área para
a qual foi projetada. E uma característica fundamental: ser implementável em
computador, isto é, deve ser possível executar qualquer procedimento bem
formado na linguagem [LSSK79].
Uma linguagem de programação também
possui uma semântica. A semântica de um programa irá depender exclusivamente do
que se deseja causarobjetivamente quando o programa for executado por um agente
computacional, eletrônico ou não. Os computadores atualmente são máquinas
complexas. Quando estão executando programas, luzes se acendem, cabeçotes dos
discos movem-se, corrente elétrica flui pelos circuitos, letras aparecem na
tela ou são impressas, e assim por diante. Um programa controla todos esses
‘fenômenos’ mediante sua semântica. E se são consideradas as linguagens de
programação de alto nível, que não controlam diretamente esses detalhes de
ordem física, falar de semântica significa falar das características que tornam
tais linguagens implementáveis em qualquer computador, isto é, quais as
características da execução doprograma que são comuns a todas as implementações.
Portanto a semântica é uma entidade abstrata: ela modela o que o programa quer
causar quando é executado, independentemente do seu uso nesse ou naquele
computador. A semântica de uma linguagem deprogramação é a mesma semântica de
todos os programas escritos nela [Mos92].
A evolução das linguagens de programação
chegou até esses conceitos por caminhos e esforços muitas vezes
paralelos.Alguns informatas buscam caminhos para projetar linguagens que
combinem uma grande generalidade de usos (aplicações matemáticas e científicas,
gráficas, comerciais, etc.) com simplicidade e eficiência. Isso levou ao
desenvolvimento de diferentes paradigmas – estilos e objetivos – de programação
como o imperativo, o funcional, o orientado a objeto, o lógico, etc.Outros
buscaram e buscam caminhos para expressar a sintaxe e a semântica, esta última
talvez a parte mais importante dentro do assunto linguagens de programação e
que levou ao surgimento de diversas linhas: a semântica algébrica, a
denotacional, a de ações, etc.
6.3.2 Desenvolvimentos anteriores a 1940
Mas, antes de entrar nesse mundo das
linguagens, de que forma eram anteriormente especificados os algoritmos? Os
mais antigos algoritmos escritos que se conhecem são os da velha Mesopotâmia.
Eram seqüências de cálculos sobre conjuntos particulares de dados e não uma
abstração de procedimento como entendido na programação atual[Knu76]. Na
civilização grega, vários algoritmos não triviais foram estudados, como por
exemplo o de Euclides. A descrição era ainda informal.
A notação matemática começou a evoluir
efetivamente a partir dos séculos XIII e XIV e notações para relações
funcionais tiveram um bom desenvolvimento. Na Computação, Babbage e Lady
Lovelace elaboraram, entre outros, um programa para o cálculo dos números de
Bernoulli [Mor61]. Era na verdade uma espécie de programa em linguagem de
máquina, como nos primórdios dos computadores digitais na década de 1940. Em
1914, Leonardo Torres e Quevedo usaram uma linguagem natural para descrever um
pequeno programa para seu autômato hipotético. Helmut Schreeyer fez uma
descrição análoga em 1939 para a máquina que construía juntamente com Zuse.
O próprio Alan M. Turing, para tratar do
problema da indecidibilidade de Hilbert construiu uma linguagem muito primitiva
para suamáquina. Nela só havia comandos para ler, testar uma condição e
escrever símbolos sobre uma fita, movendo para a direita ou esquerda uma cabeça
de leitura e gravação. Conforme Knuth [KP80], as ‘tabelas’ de Turing (como Alan
Turing chamava sua linguagem) “representaram a notação de mais alto nível para
uma descrição precisa de algoritmo que foram desenvolvidas antes da nossa
história começar – exceto talvez pela notação-lambda de Alonzo Church (que
representa um ‘approach’ inteiramente diferente para o cálculo) ”.
6.3.3 As primeiras tentativas
Nos primeiros tempos da computação
propriamente dita os programas eram escritos em código de máquina e colocados
diretamente no computador por meio de cabos e fios. Por exemplo: 0000 0001 0110
1110; 0100 0000 0001 0010; 1100 0000 0000 1101. “Uma abstração é um modo de
pensar pelo qual nos concentramos em idéias gerais ao invés das manifestações
específicas destas ideias.(...) Na programação, a abstração refere-se à
distinção que fazemos entre: (a) o queum pedaço de programa faz e (b) comoele é
implementado. Uma linguagem de programação em sentido próprio consiste de
construções que são (em última instância) abstrações do código de máquina”
[Wat90].Exemplos típicos de abstrações são as funções e procedimentos de uma
linguagem de programação.
Segundo Grace Murray Hopper, como
curiosidade, “a frase mais freqüente que nós ouvíamos era que a única maneira
de se programar em um computador era em octal”[Wex80]. Em 1946, junto com
Howard Aiken, era assim que ela programava o Mark I. Percebeu-se claramente que
os programas em código de máquina eram extremamente difíceis de editar e
modificar, e quase impossíveis de se compreender. A comunidade computacional
logo entendeu que era necessário inventar uma notação simbólica para tornar os
programas mais fáceis de escrever. Nesta evolução as instruções acima ficam com
o formato: LOAD X; ADD R1 R2; JUMPZ H.
Uma vez feito o programa dessa maneira,o
programador o prepararia para ser executado, 'escrevendo' manualmente (em
painéis, através de um emaranhado de cabos e 'plugs') as instruções no
correspondente código de máquina. Este processo foi chamado de assembling. O
que depois se queria fazer era com que a própria máquina executasse essa
operação.
Mas mesmo quando programava com esses
códigos de operação mnemônicos (também chamados de linguagem de montagem),o
programador ainda estava trabalhando em termos dos conjuntos de instruções da
máquina, isto é, os algoritmos eram expressos em termos de instruções muito
primitivas (detalhes sobre registradores, endereços, saltos, etc.). Daí a
denominação linguagens de baixo nível.A busca de linguagens que pudessem
permitir que os algoritmos fossem expressos em termos análogos à idéia
elaborada na mente do programador fez com que aparecessem os primeiros
compiladores e começassem a surgir as chamadas linguagens dealto nível.
Claramente percebem-se duas principais
tendências nesses anos pioneiros: aqueles que procuravam saber o que era
possível implementar e os que estavam preocupados com o que era possível
escrever. Estes últimos criaram estruturas conceituais – iteração, tipos de
dados, recursividade, etc. – importantes no processo de programação e que foram
depois objetos de estudo na Teoria da Computação. Naturalmente foram precisos
muitos anos para que essas duas tendências se juntassem para formar uma síntese
adequada.
6.3.4 Konrad Zuse e seu ‘Plancalculus’
Depois de salvar o Z4 das bombas dos
aliados e mudar-se para a pequena vila Hintesrtein nos Alpes, Konrad Zuse
percebeu que ainda não existia uma notação formal para a descrição de
algoritmos e começou a trabalhar em uma. O resultado foi uma linguagem chamada
Plankalkül (program calculus), uma extensão do cálculo proposicional e de predicado
de Hilbert. Em uma monografia sobre o Plankalkül, em 1945, Zuse começava
dizendo: “A missão do Plancalculus é forneceruma descrição formal pura de
qualquer procedimento computacional”. O
Plancalculus incluía alguns conceitos fundamentais da programação: tipos de
dados, estrutura de dados hierárquicos, atribuição, iteração, etc. Ele pensou
inclusive em usar o Plancalculus como base de uma linguagem de programação que
pudesse ser traduzida por uma máquina. “Pode-seresumir sua idéia dizendo que o
Plankalkül incorporou muitas idéias extremamente importantes, mas faltou-lhe
uma sintaxe amigável para expressar programas em um formato legível e
facilmente editável”. Como complementação de seu trabalho desenvolveu
algoritmos para ordenação, teste de conectividade de grafos, para aritmética de
inteiros (inclusive raiz quadrada) e até um jogo de xadrez, entre outros.
Infelizmente a maior parte destas coisas permaneceu desconhecida até 1972, a
não ser por alguns extratos aparecidos em 1948 e 1959, quando seu trabalho
chamou a atenção de alguns leitores ingleses. “É interessante especular sobre o
que teria acontecido se ele tivesse publicado tudo imediatamente; teriam as
pessoas sido capazes de entender idéias tão radicais?” [KP80].
Nome importante no desenvolvimento
histórico das linguagens deprogramação. Ela desenvolveu programas para o Mark
I, um dos precursores do computador moderno; esteve envolvida na construção do
UNIVAC e trabalhou no primeiro compilador que se tem notícia, o A-2, e em uma
das primeiras linguagens matemáticas, originalmente chamada A-3 e depois
MATH-MATIC. Em 1955 trabalhou na equipe que elaborou as primeiras
especificações para uma linguagem de uso comercial, originalmente chamada B-0,
depois FLOW-MATIC, que forneceu inúmeras características para o COBOL.
O termo ‘alto nível’ refere-se à
semelhança que a linguagem tem com uma linguagem natural ou matemática,
opondo-se a ‘baixo nível’, mais semelhante à linguagem de máquina.
6.3.5 O diagrama de fluxos
Em Princeton, do outro lado do
Atlântico, Herman H. Goldstine e John von Neumann estavam preocupados com o
mesmo problema: como se poderiam representar algoritmos de uma maneira precisa,
em uma linguagem de mais alto nível que a de máquina. Ao desenvolver os
projetos lógicos do computador EDVAC e da máquina do IAS (Institute for
Advanced Study, da universidade de Princeton), von Neumann tinha também uma
grande preocupação com a sua programação. Ele deixou um manuscrito que é
provavelmente o primeiro programa escrito para um computador com programa
armazenado na memória. O problema proposto é o da classificação de uma série de
dados em ordem crescente. Von Neumann propôs o método que ficou conhecido mais
tarde como classificação por intercalação, até hoje um dos algoritmos mais
usados para classificar dados na memória. Já aí aparecem alguns expedientes que
prenunciam o surgimento das linguagens de montagem (linguagens simbólicas,
mnemônicas, muito próximas à linguagem binária das máquinas) como os símbolos
para denotar grandezas ou o conceito básico de alocação dinâmica de memória.
A descrição termina com uma análise do
tempo de execução muito semelhante às análises difundidas por Donald Knuth. Uma
história e análise desse manuscrito estão emum artigo feito por Knuth em 1970,
intitulado von Neumann’s First Computer Program. Na realidade o manuscrito
contém somente uma parte da codificação do método, que é a parte do processo de
duas sequências já em ordem. Sem entrar em detalhes mais técnicos, significava
que a atribuição de endereços era feita em relação a um endereço inicial
arbitrário, a ser preenchido mais tarde, conseguindo-se o efeito de relocação
manual do código, de modo a ser usado como uma
subrotina aberta(outro conceito que exige maior conhecimento técnico
sobre sistemas operacionais e programação/arquitetura de computadores)
Para o projeto do IAS, von Neumann e
Goldstine compuseram três volumes (1947/48) intitulados Planning and coding of
problems for an electronic computing instrument. O primeiro volume é dedicado à
metodologia da programação, o segundo volume traz vários exemplos de programas
e o terceiro volumeé dedicado à construção de subrotinas reutilizáveis e
construção de bibliotecas destas subrotinas. Eles propuseram uma representação
pictórica, através de caixas unidas por setas, que chamaram de
fluxogramas.Descreveram fluxogramas que continham uma caixa denominada “caixa
de anotação (especificação)”.Nessa caixa descreviam-se certos fatos sobre o
resultado de uma computação (o efeito por ela provocado). O conteúdo dessa
caixa deveria ser confrontado com as operações descritas pelo fluxograma,
possibilitando uma verificação da consistência entre o fluxograma e as
intenções do programador expressas através das anotações. Com von Neumann e
Goldstine encontra-se também a primeira referência à corretude de programas.
A ênfase era colocada no poder de
cálculo – e não na expressividade das estruturas como Zuse – e esse trabalho
foi largamente difundido entre as pessoas envolvidas com computadores na época.
“Tal fato, acompanhado da excelente qualidade de apresentação e pelo prestígio
de von Neumann, significaram que seu trabalho teve um enorme impacto,
tornando-se fundamento para técnicas de programação em todo o mundo”.O conceito
matemático de igualdade foi substituído pelo de atribuição [KP80].
6.3.6 A contribuição de Haskell
Haskell B. Curry, contemporâneo de
Goldstine e von Neumann, após uma experiência com um programa complexo no
ENIAC, sugeriu uma notação mais compacta que a deles. Na prática não obteve
sucesso pelamaneira estranha com que analisava e dividia os problemas. O
principal ponto de interesse no trabalho de Curry, no entanto, não foi a sua
linguagem de programação, mas os algoritmos que analisou para conversão de
parte desses em código de máquina. Com isso proporcionou uma descrição
recursiva de um procedimento para converter expressões aritméticas claras em um
código de máquina apropriado, sendo por isso a primeira pessoa a descrever a
fase de geração de código de um compilador [KP80].
6.4 Interpretadores algébricos e linguagens
intermediárias
Em 1951, promovidas pela Marinha
americana, houve uma série de três conferências, e naquela que tratava sobre
manipulação de dados e computação automática apareceu um trabalho de John
Mauchly, o Short Order Code. Codificado para o computador BINAC, em 1949, por
William F. Schmitt, foi recodificado pelo mesmo em 1950 para o UNIVAC e usava
dois dígitos para representar alguns símbolos, ao invés do usual código
binário. Era na verdade uma espécie de interpretadoralgébrico: o programa
percorria cada linha de representação de código, da direita para a esquerda,
desviava para as chamadas subrotinas, executava-as e ia para a próxima
instrução.
Arthur W. Burks e colegas, na
Universidade de Michigan, investigando o processo de passar alguns problemas de
processamento de dados descritos em uma linguagem comum para a ‘linguagem
interna’ de um computador, esboçaram uma ‘linguagem intermediária’ que seria o
passo anterior de uma ‘linguagem interna’ do computador, e que tinha um alto
nível de abstração [Bur51a].
Heinz Rutishauser, colaborador de Zuse
no Z4, publicou em 1952 um trabalho descrevendo um computador hipotético e uma
linguagem algébrica simples, junto com os fluxogramas de von Neumann para o que
seriam dois ‘compiladores’para essa linguagem. Um para decodificar todos os
loopsenquanto o outro produzia código compacto através de registradores de
índice. Como o Short Code, o programador deveria reservar manualmente as
localizações de memória para variáveis e constantes.
Um trabalho semelhante apareceu na
Itália, na tese de dissertação de Corrado Böhm, que desenvolveu uma linguagem
algébrica e o primeiro compilador para ela na própria linguagem, que reconhecia
precedência de operações.
6.5 Os primeiros ‘compiladores’
Conforme Knuth e Trabb [KP80], o termo
compilador não era ainda utilizado nessa época. Na verdade falava-se sobre
programação automática. No início da programação em linguagem de máquina foram
desenvolvidas subrotinas de uso comum para entrada e saída, para aritmética de
ponto flutuante e funções transcendentais. Junto com a idéia de um
endereçamento realocável– pois tais subrotinas seriam usadas em diferentes
partes de um programa – foram criadas rotinas de montagem para facilitar a
tarefa de uso das subrotinas e de endereçamento relativo, idéia desenvolvida
por Maurice V. Wilkes.Para isso foi inventada uma pseudo linguagem de máquina.
Uma rotina interpretativa iria processar essas instruções, emulando um
computador hipotético [Gol72] [Knu69]. Esse é o sentido do termo ‘compilador’
até aqui usado.
AUTOCODE foi o primeiro
‘compilador’real, que tomava uma declaração algébrica e a traduzia em linguagem
de máquina. Seu desconhecido autor, Alick E. Glennie, das forças armadas da
Inglaterra, declarava em Cambridge, em 1953, sua motivação para elaborá-lo: “A
dificuldade da programação tornou-se a principal dificuldade para o uso das
máquinas. Aiken expressou sua opinião dizendo que a solução para esta
dificuldade deveria ser buscada pela construção de uma máquina especial para
codificar(...) Para tornar isso fácil deve-se elaborar um código compreensível.
Tal coisa somente pode ser feita melhorando-se a notação da programação”
[KP80].John Backus [Wex80] discute essa distinção que Knuth faz, citando J.
Halcomb Laning, Jr. e Niel Zierler como
os inventores do primeiro ‘compilador’ algébrico, para o computador Whirlwind.
Como esta, são muitas as discussões ainda hoje sobre quem foi o pioneiro no
assunto. De qualquer maneira esses primeiros sistemas denominados genericamente
de programação automática(acima citada) eram muito lentos e não fizeram muito
sucesso, embora tivessem sido fundamentais para preparar a base do desenvolvimento
que se seguiu.
Este veio com o A-0, agora sim o
primeiro compilador propriamente dito, desenvolvido por Grace Murray Hopper e
equipe, aprimorado para A-1 e A-2 subseqüentemente. O próximo passo seria o
A-3, desenvolvido em 1955, produzido ao mesmo tempo com o tradutor algébrico
AT-3, mais tarde chamado MATH-MATIC. Em 1952 a IBM construía o computador 701 e
em 1953 foi montada uma equipe liderada por John Backus para desenvolver
umcódigo automático que facilitasse a programação. O resultado foi o
Speedcoding. Backus tornou-se uma das principais figuras na história da
evolução das linguagens de programação, tendo um papel fundamental no
desenvolvimento dos grandes compiladores que viriam a partir do ano de 1955
como o FORTRAN e o ALGOL, além do estabelecimento da moderna notação formal
para a descrição sintática de linguagens de programação, denominada BNF, Backus
Normal Form.
6.6 A figura de von Neumann
Assim como não se pode falar de
Computabilidade, ou sobre a Teoria da Computação, ou ainda sobre os Fundamentos
da Computação, sem deixar de citar nomes como Turing e Church, também em
relação ao advento do computadores, a partir da década de 1940, não se pode
deixar de falar da figura de János Louis von Neumann (1903 – 1957). Este húngaro
conhecido como “Jancsi”, uma forma diminutiva de seu prenome János (depois de
naturalizado americano seria tratado pelo apelido Johnny), era no final de sua
vida um dos mais poderosos homens em cena no comando da política americana com
relação às ciências.
Mas esta foi somente uma das muitas
qualidades que o distinguiu nos diferentes países onde viveu e nos variados
campos da inteligência em que exerceu sua atuação. Tido como brilhante desde
sua infância (falava grego com seu pai aos seis anos de idade [Die81]), entrou
para a universidade de Budapeste em 1921 para estudar Matemática. Adotou a
prática, pouco ortodoxa!, de ir à universidade somente no fim dos cursos, para
prestar exames, saindo-se sempre muito bem. Enquanto isso, entre 1921 e 1923,
na universidade de Berlin, estudou Química, tendo entrado em contato com nomes
ilustres, como Albert Einstein, Fritz Haber e outros cientistas húngaros, como
Denis Gabor, Leo Szilard e Eugene Wigner. Em 1923 dirigiu-sea Zurich, para
estudar Engenharia Química, formando-se em 1925. Doutorou em Matemática, no ano
de 1926, pela Universidade de Budapeste, com uma tese sobre a Teoria dos
Conjuntos (com 20 anos, estimulado por um dos mais famosos matemáticos do
século XX, David Hilbert, enunciou uma definição sobre números que ainda hoje é
utilizada). Ainda fez um pós-doutorado na prestigiosa Universidade de
Göttingen, onde estudou sob a direção de Hilbert, no período de 1926 a 1927.
Tornou-se um dos membros da elite dos físicos revolucionários da mecânica
quântica, e rapidamente ganhou grande reputação pelos seus trabalhos naÁlgebra
(como aluno de Hilbert foi uma das estrelas do formalismo), Mecânica Quântica e
Teoria dos Conjuntos. Convidado nos anos 30 a visitar a universidade de
Princeton, foi chamado para ser um dos seis professores de Matemática que
formariam parte do recém-inaugurado Instituto de Pesquisas Avançadas (os outros
eram J. W. Alexander, A. Einstein, M. Morse, O. Veblen, J von Neumann e H.
Weyl), cargo que levou até o fim de sua vida.[Asp90].
Conheceu Kurt Gödel (que como ele,
naturalizou-se americano durante a 2aguerra), e Church, orientador, naquela
época, da tese de doutoramento de
Turing. Tomou conhecimento da publicação deste,
On Computable Numbers with an Application to the Entscheidungsproblem, e
convidou-o para trabalhar como seu assistente, pois estava interessado em sua
idéia, que envolvia os conceitos de umprojeto lógico para uma máquina
universal. Turing, no entanto, preferiu retornar a Cambridge e, um ano mais
tarde, envolver-se-ia na construção do computador Colossus, em Bletchley Park,
na Inglaterra.
O interesse de von Neumann por
computadores encaminhou-se rapidamente por uma vertente diferente daquela
seguida pelos seus colegas. Percebeu o potencial da nova máquina para solução
matemática de problemas e não somente para elaboração de tabelas. Durante a
guerra, os seus conhecimentos em hidrodinâmica, balística, meteorologia, teoria
dos jogos, e estatística, foram colocados em usoem vários projetos. Esse
trabalho levou-o a perceber que poderiam ser usados dispositivos mecânicos para
computar cálculos e, embora se diga que seu primeiro envolvimento com
umcomputador foi através do ENIAC, de fato nessa época ele estava com Howard
Aiken, em Harvard, no projeto do Mark I (ASCC). Sua correspondência em 1944
mostra seu interesse não somente pelo trabalho de Aiken, mas também com os
computadores baseados em relês,de George Stibitz, e pelas pesquisas de Jan
Schilt no Watson Scientific Computing Laboratory da Universidade de Columbia.
No fim da II Guerra von Neumann tornou-se consultor, servindo a numerosos
comitês com sua prodigiosa habilidade de rapidamente ver a solução de
problemas.
Ele tinha uma grande capacidade de
aglutinar ao seu redor cientistas muitas vezes separados por causa de
exigências de segredo.Movia-se confortavelmente entre o pessoal de Los Alamos
(National Laboratory e Manhattan Project) assim como entre os engenheiros da
Moore School of Electrical Engineering, da Universidade de Pensilvânia, que
estavam construindo o ENIAC. Uma combinação de
diferentes desenvolvimentos científicos conduziram à invenção do ENIAC:
novas tecnologiade válvulas, lógica booleana, as idéias de Babbage-Lovelace, as
teorias de controle via retroalimentação (feedback), etc., e von Neumann era
talvez o único que conhecia sobre todos estes temas, além de politicamente
dar-se bem com as sociedades de Princeton, Los Alamos e Washington. No projeto
Manhattan, trabalhou juntamente com Oppenheimer, Fermi,Teller, Bohr e
Lawrenceand, que, entre outros, construíram a bomba atômica. [Ula80] [Gol72].
6.6.1 O conceito de programa armazenado
Quando se terminou o ENIAC, era tarde
para utilizar tal equipamento no esforço de guerra, mas certamente foi possível
realizar o objetivo dos seus inventores: um cálculo balístico, que poderia
tomar vinte horas de um especialista,seria agora feito pela máquina em menos de
30 segundos. Pela primeira vez a trajetória de um míssil poderia ser calculada
em menos tempo do que levava o míssil real paraatingir seu alvo. O primeiro
problema a ser resolvido por essa máquina foi um ensaio decálculo para a bomba
de hidrogênio, então sendo projetada.
Von Neumann tinha se unido ao grupo
emmeados de 1944, através do matemático Herman H. Goldstine, como consultor
especial. Seu gênio para questões relacionadas ao pensamento formal,
sistemático e lógico foi aplicado às propriedades daquela imensa máquina de
17.000 válvulas, 70.000 resistores e 10.000 capacitores. Os problemas relativos
à ‘engenharia’ eram ainda imensos, mas estava se tornando claro que o
componente não-físico, a codificação, aquilo que estabelecia a operação da
máquina, era igualmente difícil e importante. Até o aparecimento do transistor,
o que ocorreu alguns poucos anos depois, o ENIAC representava o limite físico
daquilo quepoderia ser feito através de um grande número de chaves e conexões.
Em 1945, o aprimoramento possível no poder computacional era um melhoramento na
estrutura lógica damáquina, e von Neumann era provavelmente o único homem, a
oeste da equipe inglesa deBletchley Park (que tinha construído o computador
COLOSSUS para decifrar o códigogermânico de guerra), preparado para compreender
os mecanismos lógicos subjacentes no primeiro computador digital.
Parte da razão pela qual o ENIAC era
capaz de operar rapidamente estava em que os caminhos seguidos pelos impulsos
elétricos eram estabelecidos dentro do equipamento. Esta ‘rota eletrônica’ era
a materialização das instruções de máquina que transformavam os dados de
entrada em soluções de problemas. Diferentes tipos de equações poderiam ser
resolvidas, e a performance dos cálculos
poderia ser alterada pelos resultados de subproblemas. Mas o que era
ganho no poder de cálculo e velocidade era perdido na flexibilidade. Um sério
obstáculo consistia na necessidade da programação externa, através de painéis e
cabos de conexão para a solução deum determinado problema, um procedimento que
poderia levar vários dias. Após a entrada de von Neumann na equipe percebeu-se
que o ENIAC não seria a última palavra em termos de máquinas calculadoras, mas
sim que era o protótipo, ainda imperfeito, de uma nova categoria de máquinas.
Antes mesmo de estar terminado, seus construtores já estavam elaborando o
projeto de seu sucessor, e von
Neumann compreendeu, daquelas discussões
com seus colegas, que se estava falando de uma máquina de uso geral. Na mesma
época, a Universidade de Pensilvânia celebrou um contrato suplementar para a
construção do EDVAC, proposta um pouco antes por Mauchly e Eckert, cujas
características eram ainda um tanto vagas. O novo projeto despertou enorme
interesse em von Neumann, que começou a participar de reuniões relativas ao
projeto, juntamente com Eckert, Mauchly, Goldstine e outros.
Conforme [Kow96], um fator decisivo para
viabilizar o projeto de uma nova máquina foi a idéia de Eckert de utilizar
linhas de retardopara implementar elementos de memória de custo muito mais
baixo do que se fossem utilizadas válvulas. Outro resultado das reuniões com a
equipe do projeto e da freqüente troca de correspondência, foi a produção de um
documento descrevendo os detalhes da organização da nova máquina. Von Neumann
ficou encarregado de escrever o First draft of a report on the EDVAC(1945),
documento que nunca passou da fase de rascunho (foi publicado na íntegra
somente anos mais tarde, com forma ligeiramente editada).
Existem controvérsias, alimentadas por
nomes como Randell, Rosen, Stern e Wilkes, sobre quem teria sido o primeiro a
propor o conceito de programa armazenado. O trabalho teórico de Turing, com o
qual von Neumann estava familiarizado, já indicava essa possibilidade. Por
outro lado existem referências bastante obscuras e ambíguas, em fontes
anteriores ao documento de von Neumann, além das afirmações posteriores de
Eckert e Mauchly. Não há dúvida de que a idéia de programa armazenado estava no
ar, e é bastante provável que tenha sido sugerida por mais deuma pessoa.
Apesar da notoriedade dessa
controvérsia, não parece que sua importância seja mais que simbólica.
Independentemente de quem tenha sido o primeiro a sugerir a idéia deprograma
armazenado na memória, o fato é que o documento redigido por von Neumann é a
primeira descrição minuciosa e quase completa da arquitetura de um computador
desse tipo, com o repertório de operações que permitiriam a utilização plena de
seus recursos. Embora resultado de várias reuniões, o fato de von Neumann ter
sido consultor no projeto e encarregado de sua redação indica o peso da sua
contribuição. Depoimentos de colaboradores indicam que o projeto lógico do
computador deve-se principalmente a ele, enquanto Eckert e Mauchly foram os
principais.
O ENIAC estava habilitado de acordo com
a idéia de Babbage, em seu Engenho Analítico, pela qual ele poderia ser
reprogramado para solucionar diferentes equações não alterando a máquina, mas a
seqüência dos cartões de entrada. A origem do ENIAC como um dispositivo voltado
para um projeto balístico era parcialmente responsável por esta pouca
flexibilidade. Não era a intenção dos engenheiros da Moore School construir uma
máquina universal. O contrato estabelecido especificava claramente que eles
deveriam criar um novo tipo de calculador de trajetórias responsáveis pelo
projeto de circuitos de alta velocidade, linhas de retardo e outros detalhes
físicos, contribuições igualmente fundamentais [Kow96].
6.6.2 A arquitetura de von Neumann
O relatório de von Neumann ficou
incompleto, mas sua leitura é instrutiva. Muitas ideias continuam válidas até
hoje: a separação entre arquitetura lógica e física, a divisão do projeto em
unidades de controle, aritmética, memória, entrada e saída, precursoras de
todos os projetos posteriores. Além disso, devido ao interesse nos trabalhos
relativos a sistemas neurais de McCulloch e Pitts, ele descreveu vários
dispositivos do computador fazendo analogia com o sistema nervoso (mesmo
porquena época não existia ainda uma linguagem adequada para tais descrições).
Von Neumann,em um nível teórico, estava intrigado com algumas aparentes
semelhanças na organização e funcionamento paralelo da mente e dos
computadores, o que poderia levar a pensar emteorias lógico-formais que
abrangessem tanto um quanto outro. De alguma maneira, pensava, esses mecanismos
poderiam evoluir para algum tipo de extensão intelectual.
Com o fim da guerra em 1945,
iniciaram-se gestões para construção de outro computador para aplicações
científicas em geral, com o apoio do IAS e da RCA (Radio Corporation of
America), assim como da Marinhae Exército. O projeto foi descrito em um
documento básico, composto de duas partes, onde a primeira é a mais
fundamental, referente ao projeto lógico. Conjuntamente com a descrição
incompleta do EDVAC, esse esforço constituiu a inspiração para a elaboração da
arquitetura que foi, e continua sendo, modelo de quase todos os projetos de
computadores subsequentes:a arquitetura de von Neumann.
A expressão parece ter sido usada pela
primeira vez por J. Backus, em 1977, durante o recebimento do Prêmio Turing da
ACM, em palestra intitulada Can programming be liberated from the von Neumann
style? A functional style and it’s algebra of programs.Nela criticava o fato de
que após mais de 30 anos da sua introdução, as arquiteturas de von Neumann
ainda eram dominantes e exerciam enorme influência sobre o paradigma imperativo
das linguagens de programação mais utilizadas, impedindo o desenvolvimento de
outros modelos.
No entanto pode-se afirmar “(...) que a
estrutura lógica introduzida nos projetos do EDVAC e da máquina IAS constitui o
princípio de funcionamento de computadores digitais até hoje, apesar do
progresso tecnológico que nossepara daquela época. Na realidade, não parece
provável que os conceitos básicos de arquitetura de von Neumann sejam
abandonados em futuro próximo. Esta é a opinião, por exemplo, de Patterson
(Patterson, D. A., in Microprocessors in 2020, Scientific American 273, 3,
1995, p.48-51), um dos cientistas que mais contribuíram para a concepção de
modernos circuitos integrados” [Kow96].
A expressão usada por Backus tornou-se
popular e passou a denotar, de maneira genérica, o fato de que a eficiência de
processamento das máquinas com a concepção introduzida porvon Neumann é
limitada por problemas de comunicação entre a memória e as outras unidades. É
interessante notar que no documento em que descreve o EDVAC, o próprio von
Neumann utiliza a palavra gargaloquando comenta as dificuldades de projeto e
funcionamento de memória [Kow96].
7 A REVOLUÇÃO DO HARDWARE E DO SOFTWARE
Os primeiros computadores da década de
1940 possuíam somente dois níveis de linguagem de programação: o nível da
linguagem de máquina, no qual toda a programação era feita, e o nível da lógica
digital, onde osprogramas eram efetivamente executados. Com Maurice V. Wilkes,
em 1951, na Universidade deCambridge, surgiu a idéia de se projetar um
computador de três níveis, a fim de se simplificar o hardware. Essa máquina,
conhecida como EDSAC (Electronic Delay Storage Automatic Calculator), tinha um
programa denominado interpretador, armazenado permanentemente, cuja função era
executar os programas em linguagem de máquina. O hardware assim poderiaser simplificado:
teria apenas que executar um pequeno conjunto de microinstruções armazenadas, o
que exigia menos circuitos eletrônicos. A partir daí começaram a evoluir as
linguagens e as arquiteturas das máquinas.
7.1 Da segunda geração de grandes computadores
aos dias de hoje
A segunda geração (1956 - 1963) foi
impulsionada pela invenção do transistor (1948) e em 1956 já se produziam
computadores com esta tecnologia. Apareceram também os modernos dispositivos,
tais como as impressoras, as fitas magnéticas, os discos para armazenamento,
etc. Os computadores passaram a ter um desenvolvimento rápido, impulsionados
principalmente por dois fatores
essenciais: os sistemas operacionais e as linguagens de programação.
Os circuitos integrados propiciaram
umnovo avanço e com eles surgiram os computadores de terceira geração (1964 -
1970). As tecnologias LSI, VLSI e ULSIabrigam milhões de componentes
eletrônicos em um pequeno espaço ou chip, iniciando a quarta geração, que vem
até os dias de hoje. Os atuais avanços em pesquisa e o projeto de novas
tecnologias para os computadores estão possibilitando o surgimento da quinta
geração. Dois avanços que configuram um divisor de águas são o processamento
paralelo, que quebrou o paradigma de von Neumann, e a tecnologia dos supercondutores.
7.2 O desenvolvimento das linguagens
Várias linguagens, muitas delas
conceitualmente diferentes entre si, foram surgindo e sendo aprimoradas,
incorporando-se umas em outras. Com algumas poucas exceções, o projeto de cada
linguagem foi influenciado pela experiência em linguagens anteriores. Merecem
atenção especial, pelo seu pioneirismoe pelos novos paradigmas que
introduziram, as linguagens alto nível FORTRAN e LISP.
As instruções do programa em linguagem
de máquina seriam convertidas em conjuntos dessas microinstruções, que então
são executadas. Large Scale Integration, Very Large Scale Integration, Ultra
Large Scale Integration. Com relação ao FORTRAN, em 1954 realizou-se um
simpósio sobre ‘computação automática’, e seu maior evento foi a apresentação
do compilador algébrico de Laning e Zierler (ver Os primeiros ‘compiladores’).
Foi o primeiro ‘software’ que permitiu como entrada de dados um código
algébrico elegante, embora limitado. Nesse meio tempo John Backus já montara um
grupo de pesquisa dentro da IBM para trabalhar em um projeto sobre programação
automática, a fim de responder a uma questão fundamental: “(...) pode uma
máquina traduzir uma linguagem matemática abrangente em um conjunto razoável de
instruções, a um baixo custo, e resolver totalmente uma questão?”[Wex80]. Em
novembro de 1954 a equipe de Backus tinha criado o IBM Mathematical FORmula
TRANslation System, o FORTRAN. O primeiro parágrafo da apresentação desse
trabalho enfatizava que os sistemas anteriores ofereciam duas escolhas: ou uma
fácil codificação e uma execução lenta do programa ou uma laboriosa codificação
com rápida execução, mas “o FORTRAN propiciava o melhor das duas opções”
[KP80]. Com o FORTRAN apareceram as expressões simbólicas, subprogramas com
parâmetros, mas principalmente ocorreu a primeira tentativa de se definir
rigorosamente a sintaxe de uma linguagem de programação. Um pouco mais tarde
surgiu a notação BNF para a descrição sintática de uma linguagem de
programação.
A história do LISP remonta a Turing e
Church. Pela análise de Turing nos anos de 1936 e 1937, após seu famoso artigo
sobre o décimo problema de Hilbert, o cálculo-lambda de Church, apesar da sua
sintaxe simples, era suficientemente poderoso para descrever todas as funções
mecanicamente computáveis, ou seja, pode ser visto paradigmaticamente como uma
linguagem de programação. No cálculo-lambda, muitos problemas de programação,
especificamente aqueles referentes às chamadasde procedimento, estão em sua
forma mais pura, e isto influenciará diretamente linguagens como LISP e Algol
[Bar84].
Em 1955 e 1956 E.K. Blum, no U.S. Naval
Ordinance Laboratory desenvolveu uma linguagem completamente diferente das
demais, ADES (Automatic Digital Encoding System), baseada na teoria das funções
recursivas e no esquema desenvolvido para elas por Kleene. Foi a primeira
linguagem “declarativa”, no sentido de que o programador estabelece as relações
entre as variáveis quantitativas sem explicitamente especificar a ordem de
avaliação (mais à frente se falará sobre este paradigma de programação).
Aparece agora a figura de John McCarthy,
matemático, um dos primeiros a trabalhar no tema de Inteligência Artificial.
Juntamente com Marvin Minsky iniciou um grande projeto nessa área. Estava
procurando desenvolver uma linguagem algébrica para processamento de listas,
preocupado com o problema de como representar informações da realidade por meio
de sentenças escritas em uma linguagem formaladequada, e de como criar um
programa que executasse fazendo inferências lógicas. Surgiu então o LISP, uma
linguagem que pode ser utilizada como um formalismo para descrição de
algoritmos, para escrever programas e provar propriedades de algoritmos, sendo
adequada à computação simbólica e à inteligência artificial. Sobretudo com
LISPpode-se visualizar melhor um importante conceito na computação moderna que
é o uso de estruturasde dados como objetos abstratos. É um dos aspectos
centrais dessa linguagem, comparada a como a Matemática usa os números naturais
como entidades abstratas.
Nos inícios da década de 1960, fruto do
trabalho de americanos e europeus, surgiu uma linguagem projetada para
representar algoritmos ao invés de se escrever programas simplesmente, o
Algol-60. Ela implementava o conceito de estrutura de blocos, onde variáveis,
procedimentos, etc., poderiam ser declarados onde quer que o programa os
necessitasse. Algol-60 influenciou profundamente muitas linguagens que vieram
depois e evoluiu para o Algol-68. PL/Isurgiu como uma tentativa de se projetar
uma linguagem de uso geral reunindo características de linguagens para
aplicações numéricas como FORTRAN e Algol e para processamento de dados
comerciais. Ela inovou ao permitir a construção de código de ‘baixo nível’ para
o controle de exceções e o conceito de processamento concorrente, entre outros.
O resultado foi algo anômalo, complexo e incoerente, de difícil implementação.
Foi a linguagem Pascalentretanto que se
tornou a mais popular das linguagens do estilo Algol, por ser simples,
sistemática e facilmente implementável nos diferentes computadores. O Pascal, junto
com o Algol-68, está entre as primeiras linguagens com uma ampla gama de
instruções para controle de fluxo, definição e construção de novos tipos de
dados. Ada, que veio depois do Pascal, introduziuo conceito de pacotes e
permite a construção de grandes programas com estrutura modular.
Podem-se discernir na história das
linguagens certas tendências. A primeira foi a de perseguir altos níveis de
abstração. Os rótulos simbólicos e mnemônicos das linguagens de montagem
abstraem códigos de operação e endereços. Variáveis e atribuição abstraem
acesso a um endereço de memória e atualização. Estruturas de dados abstraem
formas de armazenamento. Estruturas de controle abstraem desvios.
Procedimentos abstraem subrotinas. E
assim por diante. Outra tendência foi a proliferação dos paradigmas.A maioria
das linguagens mencionadas até agora são imperativas, caracterizadas por
comandos que atualizam variáveis. A estrutura das linguagens imperativas é
induzidapelo hardware, com preocupação de que os dados trafeguem o mais
rapidamente possível.Daí alguns de seus aspectos relevantes: seqüência de
comandos, atribuição, controles (loopings), etc. É ainda o paradigma dominante.
Já as linguagens que seguem o paradigma funcional(também conhecidas como
declarativas), como o LISP, tem como características a clareza e a busca de um
maior poder expressivo, procurando manter a maior independência possível do
paradigma de von Neumann, que caracteriza as linguagens imperativas. Buscam uma
transparência referencial e a não ocorrência de efeitos colaterais nas suas
instruções. Em LISP não há o conceito de estado – dado por uma atribuição –,
memória, seqüência de instruções, etc., procurando-se tornar mais visível o uso
das funções. Nas linguagens imperativas as funções dependem de estados
internos, fora de seu contexto ( x := x + ‘argumento’), com a produção de
efeitos colaterais (alteração de valores, impressão, etc.). LISP foi a
ancestral das linguagens funcionais que culminaram atualmente em linguagens
como Miranda, ML e Haskell, que tratam funções como valores de primeira classe.
Smalltalké uma linguagem baseada em
classes de objetos. Um objeto é uma variável que pode ser acessada somente
através de operações associadas a ele. Smalltalk é um exemplo de uma linguagem
que segue o paradigma de orientação a objeto. Simulafoi um ancestral de tais
linguagens. É importante reparar que a notação matemática em sua generalidade
não é facilmente implementável. No entanto muitos projetistas de linguagens
quiseram explorar subconjuntos da notação matemática em linguagens de programação.
Surgiram então tentativas de se construir uma ‘linguagem lógica’, isto é,
baseada em um subconjunto da lógica matemática. O computador é programado para
inferir relacionamentos entre valores, ao invés de computar valores de saída a
partir de valores de entrada. Prolog popularizou a linguagem lógica. Em sua
forma pura é fraca e ineficiente, tendo sido alterada para incluir
características não lógicas e tornar-se mais amigável como linguagem de
programação.
No início da década de 1990 ocorreu uma
difusão intensa do paradigma da orientação a objeto. Este paradigma esteve em
gestação por cercade 30 anos e as novas tecnologias como a Internet, as
necessidades geradas pela novas arquiteturas, tais como a de cliente-servidor e
a do processamento distribuído, coincidiam com o paradigma da orientação a
objeto: encapsulamento, mensagem, etc. O crescimento da Internet e o “comércio
eletrônico” introduziram novas dimensões de complexidade no processo de
desenvolvimento de programas. Começaram a surgir linguagens que buscam superar
esses novos desafios de desenvolvimento de aplicações em um contexto
heterogêneo ( arquiteturas de hardware incompatíveis, sistemas operacionais
incompatíveis, plataformas operando com uma ou mais interfaces gráficas
incompatíveis, etc.). Apareceram C++ e
linguagens como Eifell, Objective C, Cedar/Mesa(elaborada pela Xerox, parafazer
pesquisa de dados), Delphi(uma evolução da linguagem Pascal) entre outras. E,
“o próximo passo ou um paradigma completamente novo” [GM95], surge a linguagem
JAVA.
Falando de uma maneira mais técnica e
bastante genérica, significa que o foco da atenção do programador recai mais
nos dados da aplicação e nos métodos para manipulá-los do que nos estritos
procedimentos. Em termos gerais significa o partilhamento de uma aplicaçãoem
duas. A interface do usuário e a maioria dos programas é executada no cliente,
o qual será provavelmente uma estação de trabalho ou um PC de alta performance.
Os dados da aplicação residem no servidor, provavelmente em um banco de dados de
um computador de grande porte. Desta maneira mantêm-se os dados onde podem ser
melhor protegidos, atualizados, salvos, enquanto que o poder computacional fica
distribuído diretamente pelas mesas de trabalho dos ‘clientes’.
A origem da Java está ligada a um grupo
de pesquisa e desenvolvimento da Sun Microsystems formado em 1990, liderado por
Patrick Naughton e James Gosling, que buscava uma nova ferramenta de
comunicação e programação independente da arquitetura de qualquer dispositivo
eletrônico. Em 1994, após o surgimento do NCSA Mosaic e a popularização da
Internet, a equipe redirecionou os seus esforços a fim de criar uma linguagem
para aplicações multimídia on line.
Conforme Linden [Lin96], Java foi inspirada por várias linguagens: tem
a concorrência da Mesa, tratamento de exceções como Modula-3, linking dinâmico
de código novo e gerenciamento automático de memória como LISP, definição de
interfaces como Objective C, e declarações ordinárias como C. Apesar dessas
qualidades, todas importantes, na verdade duas outras realmente fazem a
diferença e tornam Java extremamente atrativa: sua portabilidadee o novo
conceito de arquitetura neutra. Portabilidade significa que Java foi projetada
objetivando aplicações para vários sistemas heterogêneos que podem compor uma
rede como a Internet, por exemplo, e as diferentes características dessa rede.
Java procura obter os mesmos resultados
de processamento nas diferentes plataformas.
Por arquitetura neutra entende-se que
programas em Java são compilados para se obter um código objeto (byte code na
terminologia Java) que poderá ser executado em um Power PC que use o sistema
operacional OS/2, ou em um sistema baseado no chip Pentium debaixo do Windows
95 ou em um Macintosh usando MacOs, ou em uma estação de trabalho Sparc rodando
Unix. Ou seja, em qualquer computador, desde que tal computador implemente o
ambiente necessário para isso, denominado conceitualmente de Máquina Virtual
Java.
Com a linguagem Java se começou a
superar barreira que impedia que a Internet se tornasse um computador: a
barreira que impedia o uso de um software utilizado em um determinado lugar,
executando-o em qualquer plataforma.
7.3 Arquiteturas de computadores e sistemas
operacionais
O termo arquiteturade computador vem da
possibilidade de se visualizar uma máquina como um conjunto hierárquico
deníveis que permite entender como os computadores estão organizados. Os
primeiros computadores digitais por exemplo somente possuíam dois níveis. O
primeiro é chamado o nível da lógica digital, formado no início por válvulas e
depois por transistores, circuitos integrados, etc. O segundo é chamado de
nível 1, também chamado de nível de microprograma, que é o nível da linguagem
da máquina, onde toda a programação era feita, através de zeros e uns, e que
posteriormente seria o responsável por interpretar as instruções do nível 2.
Com Maurice Wilkes em 1951 surgiu outro
nível, onde as instruções eram escritas de um modo mais conveniente para o
entendimento humano: a técnica consistia em substituir cada instrução desse
novo nível por um conjuntode instruções do nível anterior (nível da máquina) ou
examinar uma instrução de cada vez e executar a seqüência de instruções
equivalentes do nível da máquina. Denominam-se estes procedimentos por tradução
e interpretação. Isto simplificou o hardware que agora somente tinha um
conjunto mínimo de instruções e portanto menos circuitos eram necessários.
A partir daí a evolução do hardware
avança juntamente com as novas descobertas científicas: quase na mesma época do
aparecimento dos transistores, por exemplo, surgiu o conceito de barramento de
dados,que acelerou a velocidade dos computadores. Ao mesmo tempo apareceram os
grandes sistemas operacionais, (simplificadamente, um sistema operacional é um
conjunto de programas mantidos no computador durante todo o tempo, liberando o
programador de tarefas relacionadas diretamente com o funcionamento da
máquina), como o DOS e OS, da IBM. Estes evoluíram possibilitando novos
conceitos que melhoraram a performance das máquinas, como por exemplo os
sistemas de multiprogramação, isto é, a possibilidade de vários programas serem
executados em paralelo em uma mesma da máquina.
Se um destes programas tiver origem em
um terminal remoto, tal sistema será chamado de tempo compartilhado. Um
importante marco que possibilitou esses avanços foi a introdução de
processadores de entrada e saída, também chamados de canais. Isso motivou o
aparecimento dos conceitos de concorrência, comunicação e sincronização: uma
vez que dois processadores estão operando simultaneamente, surge a necessidade
de prover mecanismos para sincronizá-los e estabelecer um canal de comunicação
entre eles. É a era das arquiteturas mainframes:o suporte às tarefas
computacionais e o desenvolvimento das aplicações são feitos numa área central,
denominada centro de computação.
Terminais conectados diretamente à
máquina são utilizados somente por pessoas relacionadas às aplicações
disponíveis. Nos anos 70 surgiram os supercomputadores, máquinas que inovaram
na arquitetura. Até o momento, o crescimento da eficiência dos computadores
estava limitado pela tecnologia, mais especificamente pelo processamento
escalarque exigia que o processador central de um computador terminasse uma
tarefa para começar a realizar outra, produzindo o gargalo de von Neumann. Um
avanço significativo veio com o supercomputador Cray-1, da Cray Research, em
1971. Foi a primeira máquina pipeline, cujo processador executava uma instrução
dividindo-a em partes, como na linha de montagem de um carro. Enquanto a
segunda parte de uma instrução estava sendo processada, a primeira parte de
outra instrução começava a ser trabalhada. A evolução seguinte foi a denominada
máquina vetorial, ou máquina SIMD (single instruction multiple data) cujo
processador trabalhava com mais de um conjunto de dados ao mesmo tempo. Um
pouco depois surgiu a arquitetura MIMD (multiple instructions multiple data) e
apareceram máquinas com múltiplos processadores como a Connection Machine, com
65.536 processadores.
Muito da história dos primeiros tempos
dos supercomputadores coincide com a história daquele que é considerado o pai
dos supercomputadores, Seymour Cray (1926-1996), fundadorda Cray Research, que
liderou a construção dos computadores mais rápidos do mundo durante vários
anos.Seymour Cray inventou ou contribuiu diretamente na criação de múltiplas
tecnologias usadas pela indústria dos supercomputadores, entre as quais está: a
tecnologia de vetor de registradores no CRAY-1, a tecnologia do semicondutor de
gálio arsênico e a arquitetura RISC (Reduced Instruction Set Computing).
Deve-se observar que apesar da
capacidade de execução paralela de centenas de tarefas, dependendo de como é
feita a comunicação entre os processadores, a eficiência de tais máquinas pode
ser frustrante e as pesquisas continuam em busca do aumento dessa eficiência.
Há primariamente três limites para a
performance dos supercomputadores: a velocidade do processador, o gasto de
tempo (o termo técnico, amplamente utilizado na Computação, é overhead), que
envolve fazer um grande número de processadores trabalharem juntos em uma única
tarefa, e a velocidade de entrada e saída entre os processadores e entre os
processadores e a memória. A velocidade dos processadores aumenta a cada dia,
mas a um alto custo de pesquisa e desenvolvimento, e a realidade é que se está
alcançando os limites dos processadores baseados em silício. Seymour Cray
demonstrou que a tecnologia de gálio arsênico poderia ser a solução, mas é
muito difícil trabalhar com ele e poucas indústrias estariam aptas a
desenvolver processadores desse tipo. A solução, como se falará mais adiante
caminha para o uso de um maior número de processadores, dando maior velocidade
ao computador pelo emprego do processamento paralelo.
Com a tecnologia VLSI (Very Large Scale
Integration, quarta geração de computadores) surgiram os minicomputadores, o
que possibilitou muitas empresas e universidades informatizarem seus
departamentos. Os grandes usuários interligavam os minicomputadores para enviar
tarefas aos seus mainframes. A arquitetura principal continuava no entanto
estabelecida no centro de computação.Do minicomputador para o computador
pessoal foi somente um passo, e no início da década de 1980 apareceram os
primeiros PC’s. Ainda nos anos de 1980 apareceram as arquiteturas RISC (Reduced
Instruction Set Code), com a promessa de ganho dedesempenho pela eliminação do
conceito de microprograma. De qualquer maneira essas máquinas ainda são
máquinas de von Neumann tradicionais, com todas as suas limitações, a maior
delas a velocidade dos circuitos que não pode crescer indefinidamente.
As tentativas de quebrar o gargalo de
von Neumann e o início da descentralização dos sistemas, com o surgimento das
arquiteturas derede que possibilitaram a universalização do uso da tecnologia
da Computação, fizeram emergir e desenvolver as arquiteturas paralelas de
hardware. A ideia de incluir paralelismo nos computadores é tão antiga quanto
os próprios computadores. Trabalhos desenvolvidos por von Neumann na década de
1940 já discutiam a possibilidade de algoritmos paralelos para a solução de
equações diferenciais. O sistema Model V, desenvolvido entre 1944 e 1947 por
G.R. Stibitz e S. B. Willians nos laboratórios da Bell Telephone é um exemplo
típico demáquina paralela. Constituído por dois processadores e com três
posições de entrada e saída, esse multiprocessador primitivo tanto era capaz de
executar dois programas distintos quanto era possível que os dois processadores
ficassem alocados para um mesmo programa. Posteriormente foi desenvolvido o
Illiac IV, na década de 1960, constituído por 64 processadores. Como foi
citado, a partir da década de 1970 começaram a ser produzidos supercomputadores
baseados em arquiteturas paralelas.
Juntamente com as arquiteturas evoluíram
os sistemas operacionais e a evolução das linhas de processadores de uma
empresa como a Intel servem para refletir a evolução da indústria dos
computadores em um determinado período. Como destaque podem-se citar o MS-DOS,
o OS/2 e o UNIX. Especialmente este último, que surgiu como fruto dos trabalhos
de um engenheiro da Bell Labs, Ken Thompson, foi popularizado nos meios
universitários que usavam computadores PDP-11/45, durante a década de 1970. A
palavra UNIX espalhou-se rapidamente por todo o mundo e no início de 1980 este
sistema operacional estava disponível em mais máquinas do que qualquer outro
sistema operacional da época, continuando hoje ainda a ser amplamente
utilizado.
A mais recente evolução da Computação
foi o resultado da rápida convergência das tecnologias de comunicação de dados,
de telecomunicação e da própria informática. É a Internet, ou o modelo
computacional baseado em uma rede, que teve suas origens nos anos da década de
1970, como um esforço do Departamento de Defesa dos EUA para conectar a sua
rede experimental, chamada ARPAnet, a váriasoutras redes de rádio e satélites.
Espalhou-se logo em seguida nos meios acadêmicos e está bastante popularizada.
7.4 Uma nova mentalidade
A partir de 1975, com a disseminação dos
circuitos integrados, a Computação deu um novo salto em sua história,
proporcionadopelo surgimento e desenvolvimento da indústria dos computadores
pessoais e, principalmente, pelo aparecimento da computação multimídia. Com o
aparecimento dos microcomputadores, rompeu-se a barreira de deslumbramento que
cercava as grandes máquinas e seu seleto pessoal que as manipulava, e surgiu a
possibilidade da transferência do controle do computador para milhares de
pessoas, assistindo-se à sua transformação em um bem de consumo.
Em 1975 a revista americana Popular
Eletronicsanunciou a chegada do Primeiro
kit de minicomputador do mundo a rivalizar com os modelos comerciais .
Tratava-se do Altair 8800, construído com base no chip 8080 da Intelpor H.
Edwards Roberts, oficial da Força Aérea americana, graduado em engenharia
elétrica. O sucesso foi imediato: 4.000 unidade vendidas em três meses.
Impulsionados pelo sucesso, um jovem programador, Paul Allen, associa-se a um
estudante de Harvard, Willians Gates, com o objetivo de escrever uma versão
popular de uma linguagem computacional, o Basic, para o Altair. Mais tarde
ambos fundaram a Microsoft, que se tornou na década de 1990 a mais bem sucedida
empresa de software da história dos microcomputadores. Outro grande sucesso dos
primeiros anos dos computadores pessoais foram os microcomputadores lançados
pela Apple, nascida em 1976, fundada pela dupla Steve Jobs e Stephen Wozniac,
que foi um sucesso total naqueles primeiros anos. Mas realmente essa nova onda só foi possível graças à entrada da IBM
na competição, quando, em 12 de agosto de 1981, em Nova Iorque, executivos
da big blue , como é conhecida,
apresentaram o novo computador do momento, o IBM PC (Personal Computer). Talvez
o fato mais importante, queafetaria pelos próximos anos o panorama da indústria
dos microcomputadores foi a decisão da IBM de utilizar uma arquitetura aberta: selecionar os componentes
básicos e o sistema operacional de fontes externas à IBM.
Contando um pouco dessa história. A
força-tarefa que a IBM tinha designado para a criação do computador pessoal
decidiu que queria um computador de 16 bits, mais potente e mais fácil de
programar que as máquinas deoito bits então existentes. A Intel havia
anunciado, então recentemente, o chip 8086 de16 bits, mas a IBM, temendo que
fizesse sombra aos demais itens já comercializados por ela, escolheu o 8088,
uma versão do chip com barramento de 8 bits e estrutura interna de 16 bits. Tal
tecnologia proporcionava ainda a vantagem de trabalhar com as placas de
expansão de oito bits existentes no mercado e com dispositivos de oito bits
relativamente baratos, como os chips controladores. Na busca pelo software a
IBM foi às portas da Digital Research para ver a possibilidade de portar seu
sistema operacional −de grande sucesso! −CP/M para a arquitetura 8086, mas esta
rejeitou o contrato de exclusividade apresentado pela IBM. Assim, a equipe da
IBM rumou para os escritórios da Microsoft, de quem esperavam obter uma versão
do BASIC e acabaram assinando um contrato não só deste software mas também
sobre o sistema operacional. A Microsoft adquiriu e incrementou um sistema
operacional 8086 da Seattle Computer Products −o QDOS −licenciando-o para a
IBM, que começou a comercializá-lo com o nome de PC-DOS.
Os anos da década de 1980 poderiam ser
caracterizados pelo aperfeiçoamento de softwares −tanto sistemas operacionais
como utilitários: planilhas, editores de texto, e outros mais −para o padrão
DOS e o desenvolvimento de um mercado de
clones de diferentes tipos de máquinas que seriam capazes de executar os
programas elaborados para o padrão. A Apple continuava a fazer sucesso com sua
família Apple II, embora fracassando na introdução do Apple III e do formidável
LISA, a primeira tentativa de popularizar a combinação de mouse, janela, ícones
e interface gráfica com usuário. Mas o preço de US$10.000,00 assustou e
espantou o mercado.
O próximo passo a ser dado −sem contar a
evolução e aprimoramento do hardware sem o qual isso não seria possível −seria
a gradual passagem dos aplicativos para ambiente DOS −verdadeiro mar de
produtos −para um novo padrão de ambiente, que começava a ganhar contornos
definitivos, e que protagonizou o início de uma nova idade na história dos
microcomputadores: o do sistema operacional Windows, que tornou-se padrão
dominante para os aplicativos para PC, tornando a Microsoft líder na definição
de especificações multimídia. É importante no entanto fazer-se justiça: o
padrão Windows inspirou-se no padrão Macintosh, lançado pela Apple em 1984: um
computador que era capaz de oferecer mais de um
prompt de DOS e uma interface baseada em caracteres; ele podia ter
várias janelas, menus suspensos e um mouse. Infelizmente o Macintosh não era
compatível com os programas e aplicativos já existentes e não era expansível.
7.5
A Computação como Ciência
Ao lado dessa evolução do hardware e do
software, a Computação abriu-se em leque e novas tendências surgiram dentro
dela, incorporando estas duas entidades. A Inteligência Artificial, a Teoria da
Complexidade Computacionale a Teoria de Bancos de Dados abriram novos campos de
estudo. Na década de 1960 a Ciência da Computação tornou-se uma disciplina
verdadeira. A primeira pessoa a receber um título de Ph. D. de um departamento
de Ciência daComputação, foi Richard Wexelblat, na Universidade da Pensilvânia
, em 1965. Consolidaram-se os estudos sobre a Teoria dos Autômatos e a Teoria
de Linguagens Formais, principalmente com Noam Chomsky e Michael Rabin. O
nascimento do ramo das especificações formais, que introduziu um novo paradigma
no desenvolvimento de sistemas computacionais, veio dentro dessa década, com o
início das buscas pela corretude de programas através do uso de métodos
formais. R. W Floyd, em 1967, propôs que a semântica de linguagens de
programação fosse definida independentemente dos processadores específicos a
que se destina aquela linguagem.
A definição pode ser dada, segundo
Floyd, em termos do método para a prova de programas expresso na linguagem. O
seu trabalho introduziu o que passou a ser conhecido como o método das
anotações (assertivas) indutivas para a verificação (prova) de programas e uma
técnica envolvendo “conjuntos com ordenação bem fundada para provar o término
de um programa”.
Uma extensão das idéias de Floyd foi
proposta por C. A. Hoare em 1969. Hoare formulou uma teoria axiomática de
programas que permite a aplicação do método das invariantes de Floyd a textos
de programas expressos em linguagens de programação cuja semântica é
precisamente formulada. Este trabalho tornou-se ainda um dos fundamentos do que
se chamou mais tarde “programação estruturada”. Dijkstra desenvolveu a idéia de
que a definição (no estilo proposto por Hoare) pode ser usada para a derivação
(síntese) de um programa e não apenas para sua verificação [Luc82].
A partir dessas pesquisas surgiu a
Engenharia de Software, que busca garantir a corretude na construção de
sistemas. O desenvolvimento de sistemas computacionais até então era feito de
uma maneira quase que artesanal. Não havia critério orientativo algum durante o
processo. Isso acabou sendo fatal, como o revelaram certos estudos, elaborados
na década de 1970, sobre o desenvolvimento de sistemas: ausência de corretude e
consistência, baixa qualidade, manutenção extremamente custosa em função de
problemas não detectados por ausência de uma validação de requisitos mais
rigorosa, não reaproveitamento de código, prazos de implementação não cumpridos
em conseqüência de erros detectados ao longo dessa mesma fase de implementação,
etc.
Obedecendo a um grau de formalização
maior, apareceram como primeira reação a essa abordagem informal modelos e
métodos de desenvolvimento de sistemas chamados estruturados, que na verdade
são conjuntos de normas e regras que guiam as várias fases de desenvolvimento
de sistemas e as transições entre elas. É a abordagem sistemática. Ainda aqui
não está presente um formalismo definido com regras precisas. A prototipação e
a orientação a objeto são abordagens que podem ser consideradas sistemáticas.
A abordagem rigorosajá apresenta um
sistema lingüístico formal para documentar as etapas de desenvolvimento e
regras estritas para a passagem de uma etapa a outra. Não se exige que as
demonstrações de corretude das transformações realizadas sejam feitas
formalmente, bastando uma argumentação intuitiva. E finalmente a abordagem
puramente formal, rigorosa, com a exigência de que todas as demonstrações
necessárias para garantir a corretude do processo sejam realizadas formalmente.
É necessário notar que essas duas
últimas abordagens exigem um conhecimento mais profundo do raciocínio lógico
formal e de um sistema lingüístico formal adequado. Embora a abordagem formal
se apresente como único meio de se dar uma garantia real à atividade de
construção de sistemas, muitos autores mostram-se céticos quanto ao verdadeiro
impacto que ela venha a ter na prática, devidoà dificuldade de aprendizado do
necessário arcabouço matemático.
Donald E. Knuth iniciou nos fins dessa
década um rigoroso tratado sobre as bases matemáticas para a análise de
algoritmos, produzindo os três conhecidos volumes do The Art of Computer
Programming [Knu69], que propiciaram a base parao amadurecimento dos estudos da
complexidade de algoritmos. Pode-se dizer que o trabalho de Knuth é um dos
grandes marcos da Computação no século XX: antes deKnuth não havia um corpo
sistemático do estudo da programação e dos algoritmos. Ainda no campo da
Complexidade Computacional novos avanços se deram a partir de 1971, com o
trabalho de Steve Cook e Richard Karp sobre problemas NP-completose os estudos
sobre criptografia de Ronald Rivest, Adi Shamir e Leonard Adleman. Em 1977 H.J.
Bremermann desenvolveu alguns trabalhos
pioneiros dentro da teoria da complexidade, mostrando os limites físicos na
arquitetura decomputadores de qualquer tipo e que estes limites físicos atuam
como fatores restritivos para a computação de determinados problemas. De acordo
com ele, existe um tempo chamado limite fundamentalpara a velocidade dos
computadores que não pode ser ultrapassado. Tal limite deriva-se da idéia de
que a velocidade máxima de transmissão de sinal entre os componentes internos
da máquina é limitada pela velocidade da luz. Mesmo que se pudessem construir
máquinas muito pequenas, otimizando-se a trajetória de transmissão de sinais,
esse limite não pode ser ultrapassado. E ainda que se chegue a uma máquina cuja
velocidade de transmissão seja próxima à da luz, existem problemas
computacionais que são intratáveis, como por exemplo os “problemas NP”:mesmo
com a velocidade da luz tais problemaspoderiam levar a idade do universo para
serem processados [Tei97].
7.6 A inteligência artificial
É um dos ramos da Ciência da Computação
merecedor de especial destaque, pela sua gama de influência nas pesquisas e
novas áreas que se abriram a partir do seu início. É aquela área da Computação,
em termos mais gerais, voltada para o estudo de técnicas de construção de
programas que permitam ao computador simular aspectos do comportamento da
inteligência, tais como jogar xadrez, provar teoremas lógicos, compreender
partes específicas de uma linguagem natural como, por exemplo, o português,
etc.
Os primórdios da Inteligência Artificial
(IA a partir de agora) remontam à década de 1940. Começou a predominar nesses
anos o movimento ciberneticista, que acreditava entre outras coisas que a
atividade humana poderiaum dia ser estudada por meio de modelos matemáticos,
como se faz com outros tantos fenômenos da natureza. Seguindo os trabalhos de
Gödel, muitos matemáticos imbuíram-se do objetivo de formalizar a noção de
procedimento e definir o que poderia ser feito através de um algoritmo, e
vieram a tona os trabalhos de Turing, Church, Kleene e Post. Os resultados
desses esforços acabaram por ser equivalentes e se estabeleceram os limites do
que é computável.
No ano de 1943 foram publicados os
trabalhos de Warren McCulloch e Walter Pitts,
que propuseram um modelo de neurôniosartificiais, onde cada neurônio era
caracterizado como sendo “on” ou “off”, e era representado por uma chave onde
“on” seria a resposta a estímulos por um dado númerode neurônios vizinhos. Eles
mostraram que qualquer função computável poderia ser processada por algum tipo
de rede de neurônios conectados e que os conectivos lógicos poderiam ser
implementados através de estruturas de rede simples [MP43]. Estão presentes
aqui as pesquisas de Claude Shannon, que entre outras coisas descreveu em
termos lógicos o funcionamento de certos sistemas físicos, e vice-versa:
sistemas físicos que poderiam representar um raciocínio lógico. A fusão das
idéias de Shannon e Boole, associadas a um tratamento simplificado do neurônio
do cérebro humano, tornou possível o trabalho de McCulloch e Pitts, que
propuseram um modelo de neurônio artificial (há um trabalho sobre este assunto
em [Arb87]). Queriam esses dois pesquisadores mostrar que se os neurônios
artificiais pudessem efetuar computações lógicas, estaria aberto o caminho para
simular o raciocínio humano.
Os trabalhos de Warren McCulloch e
WalterPitts tiveram grande sucesso e outros trabalhos apareceram, mas logo
foram objeto defortes críticas. Frank Rosemblatt e seus colegas da Universidade
de Cornell projetaram uma máquina parecida com o modelo de MccUlloch e Pitts,
denominada Perceptron. Marvin Minsky e Seymour Papert mostraram algumas
limitações dos perceptrons, como por exemplo a impossibilidade de executarem
operações lógicas do tipo “ou exclusivo”. De qualquer maneira surgiu uma
primeira vertente da emergente IA: a que buscava a simulação do cérebro humano
do ponto de vista físico, para simular a atividade mental, e que fará surgir
anos mais tarde, na década de 1970, a Ciência Cognitiva ou Conexionismo, que estáapoiada
em um paradigma da IA de processamento serial da informação e no “approach” da
manipulação simbólica para a lingüística.
Outra vertente por onde se encaminharam
os estudos da IA foi a chamada Inteligência Artificial simbólica, que buscava a
representação e a simulação dos estados e do comportamento mentais através de
programas computacionais. A representação e simulação da inteligência não
estaria na construção de um determinado tipo de hardware, mas no
desenvolvimento de um software que opere sobre dados. Isto teve profundos
reflexos nas pesquisas posteriores e suscitou inúmeros debates, sobretudo na
filosofia, sobre as relações entre a mente e o cérebro. Em [Tei97], há um
capítulo sobre as grandes objeções levantadas ao termo IA no sentido forte, o
qual diz que um computador adequadamente programado é uma mente e reproduz
estados mentais.
Em 1950 Turing introduziu através de um
artigo, Computing Machinery and Intelligence, o chamado ‘Turing Test”,
considerado também um dos primeiros esforços no campo da Inteligência
Artificial [RN95]. Mais tarde o próprio Turing (1953) escreveu um programa de
xadrez para computadores que tinham a arquitetura de Von Neumann. Ao mesmo
tempo, Marvin Minsky e Deam Edmonds, do Departamento de Matemática de
Princeton, construíram o primeiro computador baseado em rede neural, em 1951, o
SNARC. Era um computador analógico para simular uma rede de 40 neurônios
[RN95]. John McCarthy, outra figura influente da IA, após formar-se em
Princeton, dirigiu-se ao Dartmouth College e convenceu Minsky, Shannon e
Nathaniel Rochester, um pesquisador da IBM, a ajudá-lo a trazer pesquisadores
interessados em teoria dos autômatos, redes neurais e no estudo da
inteligência.
Pode-se imaginar um Perceptron como um
dispositivo para o reconhecimento de um conjunto de padrões, não específico,
isto é, com capacidade de “aprender” a reconhecer os padrões de um conjunto
após um número finito de tentativas. Na verdade tais indagações remontam ao
filósofo Renè Descartes que introduziu a primeira fissura no pensamento
filosófico de até então, ao cavar um fosso profundo entre a matéria e o
espírito humano.
Ele propôs uma definição de “pensamento”
usando um jogo: um homem teria de decidir, baseado em uma conversa via
teletipo, se a entidade que estava na sala ao lado, respondendo a um teste, era
um ser humano ou um computador. Se a distinção não pudesse ser feita, então
poderia ser dito que o computador estava “pensando” [Tur36]. University elaboraram
o LT (Logic Theorist), um programa capaz de trabalhar não-numericamente e que
provou a maioria dos teoremas do segundo capítulo do Principia Mathematica, de
Russell e Whitehead. Em1952, Arthur Samuel mostrou que os computadores não
fazem somente o que se lhes pede, mas são capazes de “aprender”.
Outros programas provadores de teoremas
se seguiram ao LT e em 1958, com McCarthy surgiu o LISP, que se tornou a
linguagem de programação predominante para IA a partir daí. McCarthy seguiu
para Stanford na busca da representação do raciocínio através da lógica formal
(seu trabalho recebeu grande impulso quando J. A. Robinson elaborou um
algoritmo completo para a prova de teorema na lógica de primeira ordem).
Estas aplicações da lógica incluíam
robótica e um projeto para demonstrar a completa integração entre raciocínio
lógico e atividade física. Minsky estava mais interessado em descobrir
programas para resolver problemas que exigiam inteligência para serem
solucionados: problemas de analogia geométrica que aparecem nos testes de QI,
problemas de álgebra, etc.
Os anos de 1966 a 1974 foram marcados
por um certo ceticismo diante das dificuldades que começaram a ser encontradas,
como por exemplo a não tratabilidade de muitos problemas de IA, acentuada pelos
primeiros estudos dos problemas não-polinomiais determinísticos, NP, e pelas
limitações das estruturas básicas usadas para gerar comportamento inteligente,
como por exemplo os algoritmos de aprendizado por back-propagation [RN95]. A
década de 1970 marcou a busca pelos sistemas baseados em conhecimento e pelos
sistemas especialistas, protagonizada inicialmente por Ed Feigenbaum, Bruce
Buchanan e Joshua Lederberg. Os sistemas especialistas são solucionadores de
problemas acoplados a grandes bancos de dados onde o conhecimento humano
específico sobre determinado assunto encontra-se armazenado.
O sistema deverá fornecer respostas a
consultas, dar conselhos a um leigo sobre um determinado assunto, auxiliar
especialistas, ensinar, etc. A idéia subjacente é que a inteligência não é
somente raciocínio, mas também memória. A grande meta é a preservação do
conhecimento de especialistas após a morte destes. O problema, ainda em aberto,
é a difícil tarefa de se representar o conhecimento, aliás nome de uma nova
área surgida dentro da IA para solucionar os inúmeros problemas surgidos,
principalmente os de como representar o “senso comum”, o “sexto sentido” ou
ainda a intuição, termos que resistem a uma conceituação clara. Ou ainda
qualquer tipo de conhecimento não representável por uma expressão simbólica
como ensinar alguém a jogar bola. Como formalizar estas coisas? Mais ainda: até
que ponto a formalização é um instrumento eficiente para a representação do
conhecimento? De qualquer maneira surgiram os sistemas especialistas para
diagnóstico médico, manipulação de linguagens, etc.
Lembrando o trabalho de H. J. Bremermann
citado no item anterior (A Computação como Ciência), sobre os limites físicos
que impedem a construção de um dispositivo com velocidade ‘ilimitada’ (maior
que a da luz por exemplo), deve-se reparar que esses mesmos limites estão
presentes também dentro das reações químicas e nos impulsos elétricos que se
dão nas complexas conexões dos neurônios do cérebro. Se a mente humana consegue
resolver determinados problemas intratáveis (o problema da parada na máquina de
Turing Newell e Simon também inventaram a linguagem IPL, para processamento de
listas, para escrever o LT. Como não tinham compilador, traduziram manualmente
para o correspondente código de máquina.
São debates em aberto e que geram um
saudável intercâmbio de idéias entre a Computação e outras áreas do
conhecimento humano como a Psicologia, Biologia e Filosofia. Também a robótica
demandou estudos da área de IA, principalmente no que se refere à Visão
Computacional. Os anos da década de 1980 foram os da introdução da IA na
indústria e um retorno ao uso de redes neurais. De 1987 para cá houve uma
mudança tanto no conteúdo quanto na metodologia das pesquisas em IA. Agora é
mais comum trabalhar em teorias existentes do que a proposição de novas, e
basear-se em teoremas rigorosos ou em fortes evidências experimentais do que
sobre intuição. O campo do reconhecimento da voz é um exemplo disto.
7.7
Uma nova disciplina: a cibernética
O nascimento da cibernética como ciência
está associado aos trabalhos de Norbert Wiener (1894-1964). Na II Guerra
Mundial ele foi encarregado pelo governo norte-americano de resolver os
problemas de controle automático da direção do tiro, na artilharia antiaérea.
Wiener desenvolveu suas investigações no MIT e idealizou um sistema mediante o qual
o erro, ou diferença entre o objetivo que se pretendia alcançar e o efeito real
alcançado, era medido e utilizado para regular o próprio sistema, corrigindo as
variáveis de velocidade, ângulo de tiro, etc. Ao procurar resolver o problema,
e encontrar algumas soluções, Wiener tentou construir uma conceituação geral
das questões com que lidava. Em contato com outros cientistas, como o fisiólogo
Cannon, pode comprovar que, além da parte automática, esse tipo de problemas de
controle e comunicação se aplicavam a muitos outros âmbitos. Por isso ampliou
paulatinamente sua teoria de forma que abrangesse os seres vivos e as máquinas,
ou, mais em geral, a todo corpo com dinâmica organizada pela informação.
Wiener alcunhou o termo “cibernético”
tomando diretamente o vocábulo grego “kybernetiké”, que significa “a arte de
governar um barco”. Este termo tinha um amplo uso no pensamento grego, em
referência precisamente a fenômenos muito similares ao estudado pelo engenheiro
norte-americano. Assim ele próprio define a cibernética como “controle e
comunicação no animal e na máquina”, como aparece no título de seu livro
Cybernetics [Wie70].
A Cibernética é uma teoria formada pelos
aspectos relevantes de outras quatro teorias: da informação, dos jogos, do
controle e do algoritmo. Estão diretamente relacionados com essa teoria os
trabalhos de:
• Alan M. Turing em seus estudos sobre a
possibilidade lógica das máquinas;
• Claude E. Shannon na Teoria da
Informação;
• Ludwig Von Bertalanffy, biólogo que,
em resultado de 30 anos de trabalhos, publicou a famosa obra intitulada “Teoria
Geral dos Sistemas”;
• James Watt (1736-1819), inventor do
regulador centrífugo de pressão nas máquinas a vapor, germe da automatização
via feedback negativo;
• John Von Neumann com sua Teoria
Matemática dos Jogos.
Com a cibernética surge uma disciplina
que estuda a evolução temporal dinâmica dos sistemas com capacidade de
auto-regulação e auto-manutenção ao interagir com o meio que o circunda. De
maneira breve pode-se afirmar que as contribuições de Wiener podem resumir-se
em dois pontos [Ara78]:
• Sublinhou a importância dos estudos
interdisciplinares, mostrando o grande interesse que apresentam para cada uma
das disciplinas consideradas
• Percebeu a presença de processos
realimentados de controle em uma ampla classe de sistemas, tanto naturais como
sociais.
Embora a cibernética como ciência não
tenha como objetivo o computador – para ela é apenas mais uma das muitas
estruturas existentes no universo –, ela criou, juntamente com a teoria da
informação de Shannon, um novo caminho para tentar entender o homem e as
máquinas. Ao se ocupar das estruturas e funções lógico-matemáticas de
auto-regulação, independentemente de que estejam inscritas e se cumpram em um
organismo vivo, ou em uma população humana ou em um computador eletrônico,
acabou tomando parte indiretamente no desenvolvimento do hardware e do
software.
A idéia de informação como uma das
características fundamentais do universo levou Wiener e Shannon, separadamente,
a demonstrarem que muitas coisas, desde o movimento aleatório de partículas
subatômicas até o comportamento de redes baseadas em chaveamentos elétricos ou
alguns aspectos do discurso humano, estão relacionados de tal modo, que podem
ser expressos através de algumas equações matemáticas básicas.
Estas equações foram úteis na construção
de computadores e redes telefônicas: muitos conceitos elaborados e delineados
pela cibernética e teoria da informação tornaram-se centrais no projeto lógico
de máquinas e na criação do software. A cibernética não conseguiu
estabelecer-se com um objeto e método unificados na tradição acadêmica, e o
termo se utilizou cada vez menos. Seus acahados foram integrados dentro da
Teoria Geral dos Sistemas, no que se refere aos aspectos mais teóricos. Seu
lado mais prático e utilitário foram assimilados dentro da robótica. “Somente
em países europeus constituiu-se como uma ciência amplíssima que engloba
aspectos tão diversos como a teoria da informação, comunicação, computadores,
sistemas de controle, robótica, modelagem econômica, sociologia, etc.
Independente da evolução acadêmica que tenha a cibernética como disciplina, é necessário
referir-se a uma série de conceitos que com ela se puseram em andamento e são
de uso comum em muitos âmbitos” [Tir2002].
Sobre estas idéias tão sumariamente
enunciadas ver o livro Cibernética, capítulo introdutório [Wie70]. A Teoria
Geral dos Sistemas é um completo paradigma, uma forma de pensar muito fecunda
para entender a complexidade que engloba tanto os campos já citados acima que
se relacionam com a Cibernética e ainda: Teoria dos Conjuntos (Mesarovic),
Teoria das Redes (Rapoport), Dinâmica de Sistemas (Forrester), cfr.
Bertalanffy, L. Von Teoria Geral dos Sistemas [Tir2002]
As noções de feedback negativa ou
realimentação, homostasis (permanecer igual a si mesmo), feedbefore (comportamento
predictivo e por estratégia), etc.
8 A DISSEMINAÇÃO DA CULTURA INFORMÁTICA
Quando a História olhar para trás e
estudar os anos do século XX, entre outras coisas, perceberá que, do ponto de
vista científico, eles estão caracterizados como tempos em que se produziu uma
aceleração tecnológica e um avanço nas comunicações sem precedentes. Não é
fácil encontrar situações históricas análogas à expansão tecnológica que se
assistiu nestes últimos cinqüenta anos do século. Após as revoluções do ferro,
da eletricidade, do petróleo, da química, veio a revolução apoiada na
eletrônica e no desenvolvimento dos computadores. A partir dos anos setenta
iniciou-se a integração em grande escala da televisão, telecomunicação e
informática, em um processo que tende a configurar redes informativas
integradas, com uma matriz de
comunicação baseada na informação digital, com grande capacidade de veicular
dados, fotos, gráficos, palavras, sons, imagens, difundidos em vários meios
impressos e audiovisuais. Pode-se até dizer que, em certo sentido, as mídias
estão sendo suprimidas, pois tudo está se tornando eletrônico.
A integração dos meios de comunicação
gera também uma progressiva fusão das atividades intelectuais e industriais do
campo da informação. Jornalistas das redações dos grandes jornais e agências de
informação, artistas, comunidade estudantil, pesquisadores trabalham diante de
uma tela de computador. Em algumas sociedades, como a norte-americana, por
exemplo, quase 50% (dados de1955) da população economicamente ativa está
dedicada a atividades industriais, comerciais, culturais, sociais e
informacionais relacionadas com coleta, tratamento e disseminação da
informação. Há um aumento da eficiência informacional a cada dia, e se
barateiam cada vez mais os custos tecnológicos.
Não esquecendo que o computador, diferentemente das outras máquinas (que
manipulam, transformam ou transportam matéria e energia) manipula, transforma e
transporta um elemento muito mais limpo e menos consumidor de energia e matéria
prima. Abre-se, portanto uma porta para um crescimento da informação
praticamente ilimitado.
Já que se está tratando principalmente
neste livro sobre a evolução das ideias e conceitos que levaram ao surgimento e
desenvolvimento da Ciência da Computação, pode-se falar agora de um
supra-conceito maior, conseqüência que a Computação ajudou a catalisar: o
surgimento da Sociedade da Informação. Sem querer adentrar no tema, merecedor
de um trabalho exclusivo e com implicações históricas, antropológicas,
sociológicas e até psicológicas que fogem ao presente escopo, duas
considerações serão feitas: o problema do excesso de informação e o perigo do
empobrecimento que pode ser causado pelo uso indevido do computador.
8.1
O domínio e o controle das informações
Existe no mundo da pintura uma expressão
que se refere ao acúmulo de cores que acaba por não permitir uma clara
distinção do objeto: infopoluição. Esta possibilidade começa a fazer-se
realidade no âmbito da Sociedade da Informação. A informação está expandida no
mundo de hoje, resultado da explosão de fontes que incluem as agências
comerciais de notícias, os sistemas comerciais de satélites transmissores de
imagens, a World Wide Web, etc. Há um otimismo que leva muitos a se alegrarem
com essa invasão vertiginosa de palavras, imagens e símbolos, dos quais muito
poucos são controlados, de um ponto de vista semântico. Faz tempo que soam os
alarmes: “Os usos normais da fala e a escrita nas sociedades ocidentais
modernas estão fatalmente enfermos. O discurso que se faz nas instituições
sociais, o dos códigos legais, o debate político, a argumentação filosófica e a
elaboração literária, o leviatã retórico dos meios de comunicação: todos estes
discursos são clichês sem vida, jargão sem sentido, falsidades intencionadas ou
inconscientes. O contágio se estendeu aos centros nervosos do falar privado. Em
uma infecciosa dialética de reciprocidade, as patologias da linguagem pública,
especialmente as do jornalismo, a ficção, a retórica parlamentar e as relações
internacionais, debilitam e adulteram cada vez mais as tentativas de psique
particular de se comunicar a verdade” [Ste91].
A superabundância de informação tende a
mudar a natureza de cada mensagem concreta. Às vezes, a maneira mais prática de
não informar é dar uma enxurrada de informações. Pode-se chegar até a privar de
significado, ou tornar insignificante, a própria mensagem. A informação
converte-se, nessa perspectiva, em simples ruído de fundo. Isto já ocorre,
especialmente com os informes publicitários. É uma acumulação de dados não só
pela densidade de informações bem como pela sucessão rápida com que chega. Se
no passado o problema era o de acesso e coleta, agora está sendo o da seleção e
avaliação. A possibilidade de recolher, processar, difundir e recuperar
informação de maneira quase instantânea implica numa certa desvalorização da
notícia. A informação em doses exageradas acaba por tornar-se ruído. Por muita
informática que exista, se não se tem capacidade de tratamento que a converta
em significativa é ruído: nos tornamos incapazes de assimilar e tratar tanta
abundância informativa. É necessário que se enfatize cada vez mais a análise da
informação e que se encorajem as inovações técnicas nesse campo. Já surgem os
grandes sistemas de manipulação dedados, gigantescos depósitos de dados com
seus ‘Data Minds’, softwares usando técnicas de IA que trazem, por mecanismos
de inferência, a informação desejada ou a possível informação desejada.
As possíveis reações ante esse fenômeno
da‘poluição informativa’ ocorreriam em três direções [Sor92]. Uma primeira via
seria a seleção da informação, sem redundâncias nem repetições, como se
mencionou algumas linhas acima. A outra seria a redução da informação,
acomodando-a em função de interesses específicos e especializados do público e
a terceira via é a fuga da informação. A fuga da informação seria o
florescimento de ideologias simplificadoras, a semeadura do irracional, o
voluntarismo irreflexivo, o empobrecimento das relações sociais e o
desenvolvimento do mais passivo consumismo. É uma hipótese reducionista,
somente esboçada em determinados nichos sociais. Uma futura linha de fuga seria
a exploração através da venda e compra da informação, das mensagens
informativas, a um determinado custo (como avaliar?), orientando-se a radio televisão
ao volume de informação e tipo de informação que o assinante deseja.
8.2
O equilíbrio entre o toque humano e a tecnologia
As citações e considerações deste
capítulo estão baseadas em uma palestra do prof. Dr. Valdemar Setzer, do
Instituto de Matemática e Estatística da USP, em 03-IV-96, no Museu de Arte
Contemporânea da USP. Como citado anteriormente, o computador também exerce
aquelas três ações das demais máquinas, isto é, transformar, armazenar e
transportar, mas não mais matéria ou energia, e sim dados. Dados podem ser
considerados abstrações do mundo real, não fáceis de se estabelecer muitas
vezes. Como traduzirem símbolos uma personalidade, ou um sentimento? Para serem
processados por um computador eles terão que ser tratados como símbolos formais
(que já é um empobrecimento), por exemplo, introduzindo-se uma gradação
numérica: tal intervalo entre números x e y representará uma gradação da
intensidade de um determinado sentimento, o que é um empobrecimento ainda
maior.
Conforme o prof. Setzer: “É importante
fazer aqui uma distinção necessária entre o armazenamento de textos, imagens e
som, que são pura e simplesmente reproduzidos, talvez com alguma edição da sua
forma (por exemplo, alinhamento de parágrafos, saliência de contrastes em
fotos, eliminação de ruídos), e o processamento de dados. Este último é o
tratamento que se dá aos dados, transformando seu conteúdo, isto é, a semântica
que se associa aos mesmos. Por exemplo, traduzir textos de uma língua para
outra, extrair características de estilo de autores em pesquisas de lingüística
computacional, gerar desenhos a partir de programas como no conhecido caso dos
fractais, etc.”.
“De onde provem o empobrecimento da
informação? Do fato de que os dados não têm nada a ver com a realidade, sendo
na verdade representações simbólicas de pensamentos abstratos formais,
lógico-simbólicos, e como tal eles não precisam ter consistência física. Aliás,
é justamente a imponderabilidade dos dados e sua alienação em relação ao físico
que permitiu que os computadores fossem construídos cada vez menores, o que não
pode acontecer com todas as outras máquinas. De fato, estas podem ser caracterizadas
como máquinas concretas, ao passo que os computadores são máquinas matemáticas,
e, portanto abstratas, virtuais. Assim, todo processamento de dados deve
utilizar-se exclusivamente de pensamentos formais expressos sob a forma de um
programa de computador. Esse processamento lógico-simbólico, por ser
extremamente restrito e unilateral, acaba por restringir enormemente o espaço
de tratamento das informações, que devem ser expressas sob forma de dados; daí
o empobrecimento das informações que são representadas por esses dados. Note-se
que essa restrição é até de natureza matemática: não é possível colocar no
computador as noções de infinito e de contínuo, apenas aproximações das
mesmas”.
“A caracterização do computador como
máquina abstrata fica mais clara ao notar-se que todas as linguagens de
programação são estritamente formais, isto é, passíveis de serem descritas
matematicamente. O próprio funcionamento lógico do computador pode ser descrito
por formulações lógico-matemáticas. As outras máquinas não têm essa
característica, pois atuam diretamente na matéria (aí incluída a energia), e
esta escapa a uma descrição matemática”.
“Mas não são só as linguagens de
programação que são formais. Qualquer linguagem de comandos, mesmo icônica, de
um software qualquer, também é matematicamente formal. Por exemplo, qualquer
comando de um editor de textos produz uma ação do computador que é uma função
matemática sobre o texto sendo trabalhado ou sobre o estado do computador.
Portanto, para se programar ou usar um computador, é necessário formular os
pensamentos dentro de um espaço estritamente abstrato, matemático, apesar de
aparentemente não ser o tradicional, pois os símbolos e as funções são em
grande parte diferentes. Programar ou usar um computador são funções estritamente
matemáticas, como fazer cálculos ou provar teoremas. Assim, a programação ou
uso de um computador exigem o mesmo grau de consciência e abstração que a
atividade matemática. Isso não se passa com todas as outras máquinas, que
exigem certa coordenação motora automática, semiconsciente (por exemplo, só se
aprende a andar de bicicleta quando não é mais necessário pensar sobre os
movimentos e o equilíbrio)”.
Como uma das conseqüências dessas
afirmações, pode-se propor que o uso do computador deva estar acompanhado de um
novo tipo de educação, seja no âmbito da família ou das escola, das
universidades ou das empresas, que aponte para uma abertura maior do
entendimento humano. E esse saber vital, que faz com que um homem se sinta
interiormente livre −porque tem respostas às questões da vida −, e que tenha
uma visão mais ampla da realidade, é a cultura, a literatura, a filosofia, a
história, etc., ou seja, as humanidades ou artes liberais, como antes eram
chamadas algumas ciências humanas.
Nas ciências técnicas e para os
profissionais da Computação isto é mais premente. O maior problema que a
especialização das ciências técnicas trouxe foi essa perda do sentido de
conjunto. Continuando com as considerações da citada palestra: “Um
empobrecimento que também pode dar-se em outro sentido que é o uso da
computação na arte. Há um elemento informal e intuitivo na arte que leva a
dizer que na criação artística deve haver um elemento inconsciente, que nunca
poderá ser conceituado totalmente. Já a criação científica deve poder ser
expressa por meio de pensamentos claros, universais e não-temporais, isto é,
independentes da particular interpretação do observador, talvez até certo ponto
(dependendo da área) formais, matemáticos. Imagine-se uma descrição do Altar de
Isenheim através dos seus pixels e seus comprimentos de onda: ele perderia
totalmente o senso estético e não produziria mais a reação interior provocada
no observador pelas cores, formas e motivos, isto é, não teria o efeito
terapêutico para o qual foi criado por Grünewald”.
“O elemento emocional foi realçado por
Freud, quando afirmou em sua ‘Introdução à Psicanálise,’ Aula 23, e no ensaio
‘Além do Princípio do Prazer,’ que a arte é emoção ou expressão subconsciente e
não imitação ou comunicação (dentro de seu típico raciocínio unilateral da
teoria da sublimação da emoção e do desejo através da arte). Comparando-se com
a arte como comunicação de uma realidade espiritual, de Kandinsky, vê-se bem o
contraste entre materialismo e espiritualismo; neste pode haver algo superior a
ser comunicado”.
“Apesar de que a idéia expressa em um
objeto de arte seja de conteúdo objetivo, a sensação e emoção que ela desperta
é subjetiva. Por exemplo, ouça-se uma terça maior seguida de uma menor, ou uma
sétima seguida de uma oitava. Estamos seguros que qualquer pessoa terá
sensações diferentes em cada caso, que ficam claras pelo contraste entre cada
intervalo e o seguinte. Mas provavelmente quase todas as pessoas dirão que a
terça menor é 'mais triste' e a sétima produz uma tensão aliviada pela oitava.
Cada um sente essas emoções diferentemente, mas há claramente algo universal
por detrás delas, como as sensações que temos do amarelo limão (alegre,
radiante, abrindo-se) e do azul da
Prússia (triste, introspectivo, fechando-se) ”.
“É necessário considerar também uma
distinção essencial entre obra artística e científica o fato da primeira dever
sempre ter contextos temporais e espaciais ligados à sua criação. Como
contraste, uma teoria científica não depende do tempo, desde que seja
consistente e corresponda às observações, se for o caso. Um exemplo simples é o
do conceito de uma circunferência, como, por exemplo, o lugar geométrico dos
pontos eqüidistantes de um ponto. Essa definição formal não dependeu das
condições de seu descobridor. Ela é impessoal e eterna. O fato de podermos
captá-la com nosso pensamento levou Aristóteles a conjeturar, por um raciocínio
puramente lógico (precursor de nossa maneira de pensar hodierna), que temos
dentro de nós também algo de eterno, e que não poderia ter ocorrido em Platão,
pois este tinha sido um iniciado nos Mistérios (em A Escola de Atenas, de
Rafael há uma representação da diferença entre os dois)”.
“A dependência espaço-temporal da
criação artística aliada ao elemento de expressão individual semiconsciente do
artista faz com que haja sempre um elemento de imprevisibilidade na criação. O
artista deve observar sua obra durante o processo de criação, para influir no
mesmo e chegar a algo que não podia inicialmente prever. Isso pode ser um processo
puramente interior, como no caso de um compositor que não precisa ouvir os sons
de sua obra; no entanto, a sensação auditiva ao ouvi-la tocada nunca é a mesma
que a que pode imaginar interiormente. Poder-se-ia argumentar que a pesquisa
científica também tem elementos de imprevisibilidade. Isso pode ocorrer até na
matemática: um teorema pode ser descoberto, e o seu autor ou outros ainda não
saberem como se poderá prová-lo (um exemplo recente foi a prova do último
teorema de Fermat, formulado no século XVII). Uma grande diferença reside no
fato do resultado ser de um lado um conceito e de outro um objeto. Além disso,
uma vez estabelecido um conceito científico, toda vez que se refizer a
experiência ou a teoria correta o resultado será o mesmo (dentro das eventuais
aproximações experimentais); no caso da criação artística, o objeto de arte
deverá sempre mudar, pois a sua simples presença deve influenciar o criador,
que terá outras inspirações na hora de repetir a criação (lembremos da frase de
Freud de que simples imitação não é arte). Dá-se a esse fator o nome de
dinamismo da criação artística”.
“Portanto o uso do computador para fazer
arte, sem considerar sua grande utilidade como banco de dados das obras
artísticas, pode ser empobrecedor”. “Como instrumento passivo na criação
artística, como é o caso do uso de uma ferramenta CORELDRAW, existe o problema
do usuário fazer uso de um raciocínio formal ao utilizar os comandos do
computador submetendo a criação artística a uma consciencialização e
formalização e o problema da ausência do elemento inconsciente, assim como do
contato físico que desperta diferentes reações, como por exemplo, no pintor com
seu pincel, no pianista ao dedilhar o piano”.
O autor se refere ao famoso quadro onde
vários filósofos gregos aparecem, e, caminhando lado a lado, estão Platão e
Aristóteles, um apontando o dedo para cima e outro para baixo, respectivamente,
indicando o mundo das idéias e o mundo real. “Uma outra forma de usar um
computador em arte é fazer um programa para gerar imagens ou sons (quem sabe,
no futuro, até fazer uma escultura ou construir uma casa). Um exemplo conhecido
disso são os fantásticos desenhos produzidos por funções fractais; programas
para produzir desenhos com essas funções provavelmente estarão logo no mercado.
Nesse caso, não há apenas a substituição de um instrumento informal por outro
formal; o próprio processo de criação torna-se totalmente formal. A criação
deve ser expressa de maneira estritamente matemática, como é o caso de um
programa. Com isso, elimina-se totalmente o elemento inconsciente. É também
eliminado o elemento individual, no sentido de qualquer pessoa poder entender
totalmente como a obra foi produzida - basta examinar detalhadamente o
programa. É eliminado ainda o elemento temporal e espacial ligado à criação. Em
outras palavras, a atividade artística tornou-se atividade científica. A
propósito, é muito importante compreender-se o que significa produzir um
programa para fazer uma obra de 'arte' segundo um certo estilo. Um computador
pode produzir desenhos e música que se assemelham aos de Mondrian e de J. S. Bach,
mas estes tiveram que desenvolver seus estilos para poder ser depois analisados
e expressos em elementos puramente formais e programados em um computador, para
gerar algo que aparentemente é semelhante. Sem Bach, não haveria programas que
imitam sua música. Além disso, a ‘criação’ do computador não exprime nenhuma
idéia além da contida no estilo, desde que este seja expresso matematicamente,
o que representa um empobrecimento”.
Encerradas as considerações, o que se
deseja chamar a atenção é a mentalidade do uso do computador sem o
correspondente desenvolvimento de outros aspectos da inteligência do homem.
Depois de tudo o que foi dito, seria redundante e supérfluo falar das vantagens
desse instrumento de trabalho que potencializou e impulsionou o desenvolvimento
das ciências em geral. Mas é bom lembrar que os computadores não inovam, não se
relacionam, não são flexíveis e não sabem tomar iniciativas diante de situações
não pré-determinadas por algoritmos internos. A imersão na informática traz o
risco de se deixar de lado o cultivo ou mesmo a perda de aptidões fundamentais
como a leitura, a reflexão, a criatividade, etc. Será tarefa primordial
principalmente nos estabelecimentos de ensino, onde o computador se faz cada
vez mais presente, preocupar-se em dar ao lado dos conhecimentos técnicos e
informáticos, uma sólida formação humanística que garanta o exercício integral
da inteligência humana em seus vários âmbitos.
9 CONCLUSÃO
Voltando a algumas das primeiras
observações feitas no capítulo introdutório, foi dito que a exposição histórica
não é apenas a narrativa de acontecimentos, cronológica e tematicamente
ordenados. Esses são somente a “ponta do iceberg”, pois escondem motivações,
esforços, entrelaçamentos e a própria evolução anterior. A tarefa do
historiador não se conclui com a obtenção de dados fidedignos, depurados e
exatos, bem como o estabelecimento de séries desses fatos de maneira coerente e
significativa.
São somente pontos de partida para se
inquirir e perguntar sobre o próprio homem, o verdadeiro protagonista da
História. Esse “saber” histórico produz assim um enriquecimento da experiência
humana, permite enfrentar o desafio dos novos problemas com melhores recursos.
Há mais possibilidades de crescimento e criação de coisas novas quando se
possui uma herança. A criatividade não se faz sobre o nada. Ao jovem que o
procurou dizendo que queria fazer versos livres, Manuel Bandeira recomendou que
estudasse a fundo poesia clássica, metrificada: e que só então estaria apto a
fazer versos livres. A criatividade é antes extrapolar e reorganizar dados já
incorporados, numa configuração nova. Mas, para extrapolar ou reorganizar
dados, é preciso, antes de mais nada, tê-los.
Ao lado disso, é uma aspiração constante
de qualquer cultura entender o momento presente, formar uma imagem coerente,
selecionando os fatos do passado que afetaram a evolução do ser humano, que
permitam construir uma explicação. Essa idéia pode ser levada também a qualquer
campo do conhecimento humano e técnico. Quando se abandona o conhecimento
histórico, uma ciência, uma comunidade social, o homem, ou qualquer outro
âmbito, ficam privados de uma dimensão essencial na ordem do tempo: o
entrelaçamento entre presente e passado em uma unidade lógica.
A Computação atravessa um tempo de
expansão em várias direções, tornando-se uma tarefa necessária guardar seu
patrimônio, discernindo as realidades e conceitos mais importantes. Tudo isso é
importante para o ensino, pois a Computação não surgiu do nada: há uma história
por trás de cada conceito. Cada conceito tem o seu lugar, a sua importância e a
sua história que é necessário ser ensinada
Este trabalho sobre História da
Computação, um entre outros que estão surgindo e alguns que já existem, faz uma
retrospectiva enfatizando as idéias, os paradigmas, pretendendo apenas ser uma
pontualização, visando uma futura expansão, sobre alguns aspectos abstratos do
desenvolvimento dos computadores. Ele e sua futura expansão são apenas um
começo, porque a área sobre a qual se falou continua em constante evolução e
mudança. O campo de estudo ainda tem uma história muito recente e por demais
volátil, não se podendo chegar a algo definitivo.
Apesar dessas dificuldades, deve-se
continuar a chamar a atenção sobre a importância de se registrar e estudar o
desenvolvimento dos computadores eletrônicos e a conseqüente evolução dos temas
anexos: Linguagens de Programação, a Teoria da Computação, estudo da
Complexidade dos Algoritmos, etc., assim como a importância decisiva do fator
humano. Quando tantos se maravilharam com a derrota do campeão mundial de
xadrez Kasparov para o computador da IBM, o Deep Blue, (abril/maio de 1997),
surpreende a pouca atenção dada à equipe de técnicos que construiu e programou
a máquina, às heurísticas utilizadas e aos objetivos que estão por detrás desse
novo engenho, como se alguém ficasse maravilhado com o quadro e os pincéis de
uma obra de arte e se esquecesse do artista. A história tem o dom de focalizar
com especial nitidez aquele que é o seu personagem principal: o homem.
10
REFERÊNCIAS BIBLIOGRÁFICAS
[AG81]
ANAWATI, M-M & GARDET, LOUIS. Introduction a la Théologie Musumane.
Paris: Vrin, 1981, apud [Lau97].
[AGA86]
AGAZZI, EVANDRO. La
logica simbolica.Barcelona: Herder, 1986.
[ARA78]
ARACIL, J. Introducción
a la dinámica de sistemas.Madrid: Alianza, 1978, apud [Tir2002].
[ARB87]
ARBIB, MICHAEL A.
Brain, Machines and Mathematics.New York: Spring-Verlag, 1987.
[ART94]
ARTIGAS, MARIANO.
El desafio de la racionalidad. Barcelona: EUNSA, 1994.
[ASP90]
ASPRAY, WILLIAN.
John von Neumann and the origins of modern computing. New Baskerville:
Massachusetts Institute of Technology, 1990.
[BAR67]
BARKER, STEPHEN F.
Filosofia da matemática. Rio de Janeiro: Zahar, 1969.
[BAR84]
BARENDREGT, H.P.
The lambda calculus, its syntax and semantics.Amsterdan: Elsevier Science
Publishers B.V., 1984.
[BBF82]
BERG, H.K. & BOEBERT, W.E & FRANTA, W.R. & MOHER, T.G. Formal methods
of program verification and specification. New Jersey: Prentice-Hall, Inc.,
1982.
[BEL37]
BELL, E. T.
Men of Mathematics.New York: Simon & Schuster, Inc, 1937.
[BL74]
BRAINED, W. & LANDWEBER. Theory of computation. New York:
Wiley-Interscience Publication, 1974.
[BOC66]
BOCHENSKI, J. M.
Historia de la logica formal. Madrid: Biblioteca Hispânica de Filosofia, 1966.
[BOL84]
BOLTER, J. DAVID.
Turing’s man, western culture in the computer age.Carolina do Norte:
Universidade da Carolina do Norte, 1984.
[BOO84]
BOOLE, GEORGE.
El analises matematico de la lógica.Madrid: Catedra, 1984.
[BOW94]
BOWEN, JONATHAN P.
A brief history of algebra and computing: an ecletic oxonian view. Oxford:
Librarian, Oxford University Computing Laboratory, 1994.
[BOY74]
BOYER, CARL B.
História da Matemática. São Paulo: Edgard Blucher, 1974. 148
[BRI79A]
ENCYCLOPEDIA BRITANNICA THE NEW, MACROPAEDIA. USA: Helen Hemingway Benton,
1979.
[BRI79B]
ENCYCLOPEDIA BRITANNICA THE NEW, MICROPAEDIA. USA: Helen Hemingway Benton,
1979.
[BUR51A]
BURKS, ARTHUR W.
[1951]. An intermediate program
language as an aid in program synthesis.Engineering Research Institute, Report
for Burroughs Adding Machine Company, 1951.
[BUR51B]
BURKS, ARTHUR W.
[1980]. From de ENIAC to the stored-program computer, in A history of computing
in the twentieth century (a collection of essays). London: Academic Press,
1980.
[BUR92A]
BURKE, PETER.
A escola dos annales, 1929-1989-A revolução francesa da historiografia. São
Paulo: Editora UNESP, 1992.
[BUR92B]
BURKE, PETER.
A escrita da história-novas perspectivas.São Paulo: Editora UNESP, 1992.
[CAS97]
CASTI, JOHN L.
Five golden rules-great theories of 20th-century Mathematics and why they
matter. Canadá: John Wiley Sons, Inc., 1997.
[CO98]
CARVALHO, ROBERTO LINS DE & OLIVEIRA, CLÁUDIA MARIA G.M. DE. Modelos de
computação e sistemas formais. Rio de Janeiro: DCC/IM, COPPE/Sistemas, NCE/UFRJ,
11ª Escola de Computação, 1998.
[COE95]
COELHO, CLARIMAR J.
Monografia: apresentação das bases teóricas para o desenvolvimento de um
sistema de apoio a decisão utilizando resolução de equações booleanas. Goiás:
Depto. Matemática e Física da Universidade de Goiás, 1995.
[COF91]
COFFA, J.
Alberto Wessels. The semantic tradition from Kant to Carnap. Cambridge:
Cambridge University Press, 1991.
[COH87]
COHEN, DANIEL E.
Computabilty and logic. England: Ellis Horwood Series in Mathematics and Its
Aplications, 1987.
[COS77]
COSTA, NEWTON C. A.
Introdução aos fundamentos da Matemática. São Paulo: Editora Hucitec, 1977.
[DAN54]
DANTZIG, T.
Number, the language of science. New York: Doubleday Anchor Books, 1954.
[DIE81] DIEUDONNÉ, J. Von Neumann,
Johann (or John), in Gillespie, Charles C., Dictionary of Scientific Biography.
New York: Charles Scribner's Sons, 1981.
[FER85]
FERNANDEZ, LUIZ SOARES. Historia Universal, Volume 1. Pamplona: Edições
Universidade de Navarra, 1985.
[GAT95]
GATES, BILL.
A estrada do futuro. São Paulo: Companhia das Letras, 1995.
[GM95]
GOSLING, JAMES & MCGILTON, HENRY [1995]. The Java language environment- a
white paper. California: Sun Microsystems, Inc, 1995.
[GN88]
LE GOFF, JACQUES & NORA, PIERRE. História: novos problemas.Rio de
Janeiro: Livraria Francisco Alves Editora, 1988.
[GOF94]
LE GOFF, JACQUES.
História e memória.Campinas: Editora da UNICAMP, 1994.
[GOL72]
GOLDSTINE, HERMAN H. The
computer from Pascal to von Neumann. New Jersey: Princeton University Press,
1972.
[GOM97]
GOMES, NELSON GONÇALVES. Lógica Matemática, Curso de Lógica da Faculdade de
Filosofia da UnB, apostila para apontamentos de aula, 1997.
[H30]
H.W.B., JOSEPH [1916|1930]. Introduction to Logic. Oxford: Clarendon Press,
1930.
[HAR96]
HARRISON, JOHN. The
history of formal logic.. Revista Mathesis Universalis, 1996, nº 2, Formalized
Mathematics. Disponível na internet http://saxon.pip.com.pl/MatUniversalis/2/harrison/jrh03.html.
[Her69] Hermes, Hans. Enumerability,
decidability, computability-an introduction to the theory of recursive
functions. New York: Springer-Verlag, 1969.
[HOD83]
HODGES, ALAN.
Alan Turing: the Enigma. New York: Simon & Schuster, 1983.
[HUR80]
HURD, CUTHBERT.
Computer Development at IBM,in A history of computing in the twentieth century
(a collection of essays). London: Academic Press, 1980.
[IEEE95]
IEEE.
Computer Society, Edição comemorativa dos 50 anos da revista. Disponível na
Internet, http://www.computer.org/50.
[IFR89]
IFRAH, GEORGES.
Os números, a história de uma grande invenção.Rio de Janeiro: Globo, 1989.
[KAH67]
KAHN, D.
The Code Breakers.New York: Macmillan, 1967.
[KAR61]
KARLSON, PAUL.
A magia dos números.Rio de Janeiro: Editora Globo, 1961.
[KNE68]
KNEALE, WILLIAN & KNEALE, MARTHA. O desenvolvimento da lógica. Lisboa:
Fundação Calouste Gulbenkian, 1968.
[KNU69]
KNUTH, D. E.
The Art of Computer Programming, volume 1.Massachusetts: Addison-Wesley, 1969.
[KNU76]
KNUTH, D. E.
Ancient babylonian algorithms.In Comm. ACM 15, 671-677(1972); Errata, Comm. ACM
19, 108, 1976.
[KOW96]
KOWALTOWSKI, TOMASZ.
Von Neumann: suas contribuições à Computação,in Estudos Avançados 10(26).
Campinas: UNICAMP, 1996.
[KP80]
KNUTH, D. E. & PARDO, L. T. The early development of programming
languages, in A history of computing in the twentieth century (a collection of
essays). London: Academic Press, 1980.
[LAU97]
LAUAND.
Luis Jean. Ética e antropologia: estudos e traduções. São Paulo: Mandruvá,
1997.
[LEE95]
LEE, J. A. N..
Relatório preparatório sobre o estudo da História da Computação, e propostas
preliminares para inclusão de aspectos da História da Computação curriculum das
universidades e colégios, apresentado no Grupo de Trabalho 9.7 (História da
Computação), do IFIP (International Federation for Information Processing), 24
a 29 de julho de 1995.
[LEE96]
LEE, JOHN A. N.
Annals of the History of Computing,Volume 18, nº 2. EUA: Institute of
Electrical and Electronics Engineers, Inc., 1996.
[LIL45]
LILLEY, S.
Machinery in Mathematics, a historical survey of calculating machines. London:
Discovery, 1945.
[LIN96]
LINDEN, PETER VAN DER. Just Java.California: The Sunsoft Press, 1996.
[LSSK79]
LUCCHESI, C. L. & SIMON, I. S. I. & SIMON, J. & KOWALTOWSKI, T. Aspectos
Teóricos da Computação. Rio de Janeiro: Livros Técnicos e Científicos S.A.,
1979.
[LUC82]
LUCENA, CARLOS J.P.
Análise e síntese de programas de computador. Brasília: Editora Universidade de
Brasília, 1982.
[MAY80]
MAY, KENNETH O.
Historiography: a perspective for computer scientists,in A history of computing
in the twentieth century (a collection of essays). London: Academic Press,
1980.
[MOO77]
MOORE, DORIS LANGLEY.
Ada, countess of Lovelace: Byron’s legitimate daughter. New York: Harper and
Row, 1977.
[MOR61]
MORRISON, PHILIP & MORRISON, EMILY. Charles Babbage and his calculatings
engines. New York: Dover, 1961.
[MOS92]
MOSSES, PETER D.
Action Semantics. Cambridge: Cambridge University Press, 1992.
[MOT96]
MOTOYAMA, SHOZO.
In História da técnica e da tecnologia no Brasil.São Paulo: UNESP, 1996.
[MP43]
MCCULLOCH , WARREN & PITTS, WALTER. A logical calculus of the ideas
immanent in nervous activity,Bulletin of Mathematical Biophysics, volume 5,
1943.
[MS98]
MICHELSON, A..A..
& Stratton, S.W. A New Harmonic Analyzer. American Journal of Science, 4ª série,
vol V, 1898.
[NAU69]
NAUR, P. RANDELL B.
Software Engineering. Rept. NATO Sci. Comm., 1969.
[NEE59]
NEEDHAM, JOSEPH.
Science and civilization in China, volume 3. Cambridge: Cambridge University
Press, 1959.
[NEW56]
NEWMAN, J. R.
The world of mathematics. New York: Simon & Schuster, 1956.
[NN56]
NAGEL, ERNEST & NEWMAN, J. R. “Gödels Proof”, the world of
mathematics.New York: Simon e Schuster, 1956.
[PER88]
PÉREZ, RAFAEL GOMES.
História básica da filosofia. São Paulo: Nerman, 1988.
[RA91]
REALLE, G. & ANTISSERI, DARIO. História da Filosofia.São Paulo:
Edições Paulinas, 1991.
[RHE85]
RHEINGOLD, HOWARD.
Tools for thought: the people and Ideas of the next computer revolution. New York:
Simon & Schuster, 1985.
[RN95]
RUSSELL, STUART & NORVIG, PETER. Artificial Intelligence, a modern
approach.New Jersey: Prentice Hall Series in Artificial Intelligence, 1995.
[ROC81] ROCES, WENCESLAO. Lecciones sobre
la historia de la filosofia, III. (trad. Vorlesungen über die Geschichte der
Philosophie. Karl Ludwig Michelet, 1842). México: Fondo de Cultura Económica,
1981.
[RYD67]
RYDER, JOHN D.
Engineering Electronics with Industrial Applications and Control.Toquio:
McGraw-Hill Kogakuska, Ltd., 1967.
[SAN82]
SANGUINETI, JUAN JOSE. Lógica. Pamplona: EUNSA, 1982.
[SCH31]
SCHOLZ, H..
Abriss der Geschichte, apud [Aga86], pag. 61
[SHO67]
SHOENFIELD, JOSEPH R. Mathematical logic. Massachusetts: Addison-Wesley
Publishing Company, 1967.
[SIN99]
SINGH, SIMON. O
último teorema de Fermat. Rio de Janeiro: Record, 1999.
[SHO71]
SHOENFIELD, JOSEPH R.
Degrees of Unsolvability. Amsterdam: North-Holland Publishing Company, 1971.
[STE91]
STEINER, GEORGE. Presencias
reales. Barcelona: Destino, 1991.
[SOR92]
SORIA, CARLOS.
De la metáfora del cuarto poder a la sociedad de la información, in Veinte
claves para la nueva era. Madrid: Ediciones Rialp S/A, 1992.
[STI80]
STIBITZ, GEORGE R. Early
computers,in A history of computing in the twentieth century (a collection of
essays). London: Academic Press, 1980.
[TAN92]
TANENBAUM, A. S.
Organização Estruturada de Computadores.Rio de Janeiro: Prentice-Hall do
Brasil, 1992.
[TEI97]
TEIXEIRA, JOÃO DE FERNANDES TEIXEIRA MENTES E MÁQUINAS.Porto Alegre:
Artes Médicas, 1997.
[TIR2002]
ANDRÉS, TIRSO DE.
Homo cybersapiens, la inteligência artificial y la humana.Pamplona: EUNSA,
2002.
[TOY87]
TOYNBEE, ARNOLD.
Um estudo da história. Brasília: Martins Fontes & Editora Universidade de
Brasília, 1987.
[TUR36]
TURING, A. M.,
On computable numbers, with an aplication to the Entscheidungsproblem.
Proceedings of the London Mathematical Siciety, volume 42, Londres, 1936.
[TUR50]
TURING, A. M.
Computing machinery and intelligence.England: Mind, volume 59, nº 236, 1950.
[ULA80]
ULAM, S. M.
Von Neumann: The Interaction of Mathematics and Computing,in A history of
computing in the twentieth century (a collection of essays). London: Academic
Press, 1980.
[VEY82]
VEYNE, PAUL M.
[1982]. Como se escreve a história. Brasília: Editora Universidade de Brasília,
1982.
[WAT90]
WATT, DAVID A..
Programming language concepts and paradigms. Cambridge: Prentice Hall, 1990.
[WEX80]
WEXELBLAT, R. L. [1980]. ACM History of programming language conference, Los
Angeles. New York: ACM Monograph, Academic Press, 1980.
[WIE70]
WIENER, NORBERT.CIBERNÉTICA.São Paulo: Editora da Universidade de
São Paulo e Editora Polígono, 1970.
[WIL65]
WILDER, RAYMOND L.
Introduction to the foundations of Mathematics. Tóquio: John Wiley & Sons,
Inc., 1965.
[WIL97]
WILLIANS, MICHAEL R. History
of computing technology. California: IEEE Computer Societ Press, 1997.
[ZUS80]
ZUSE, KONRAD [1980].
Some remarks of the history of computing in Germany, in A history of computing
in the twentieth century (a collection of essays). London: Academic Press,
1980.
ANEXO
– CRONOLOGIA (ATÉ O ANO 2013): DATA
EVOLUÇÃO CONCEITUAL EVOLUÇÃO
TECNOLÓGICA
4000 AEC - Registros de transações
comerciais em pequenas tábuas;
3000 AEC - Provável aparecimento do
ÁBACO;
1800 AEC - Babilônia, métodos para
resolver problemas numéricos;
1650 AEC - Rhind Papyrus: palavra
álgebra (al-jabr, reunião de partes separadas);
500 AEC - Egito, ábaco com fios;
384 AEC - Aristóteles: início da ciência
lógica (Organon, cj. de obras editadas posteriormente: lógica formal e
filosófica);
330 AEC - Euclides, em sua obra
Elementos, método axiomático: postulados, proposições, teoremas;
250 AEC - Crivo de Eratóstenes para
números primos;
79 AEC - Dispositivo “Antikythera”, para
cálculo de calendário lunar;
830 EC - Abu Ja’far Muhammad ibn Musa
al’Khwarizmi, álgebra;
1000 EC - Gerbert de Aurillac ou Papa
Silvestre II, ábaco mais eficiente;
1300 EC - Raymundus Lullus, Ars magna: o
1º dispositivo de texto ocidental para produção de sentenças logicamente
corretas;
1445 EC - Al-Kashi: Tabac al-Manatec -
dispositivo para simplificar cálculos de importantes tempos associados aos
eclipses lunares;
1614 EC - John Napier, ponto decimal,
tabela de logaritmos dispositivo que usa ossos para demonstrar a divisão
através de subtrações e John Napier, dispositivo que usa ossos para demonstrar
a divisão através de subtrações e multiplicação por adições.
1622 EC - William Oughtred, régua de
cálculo circular baseada nos logaritmos de Napier;
1624 EC - Wilhelm Schickard, “relógio de
calcular” para multiplicação de grandes números;
1642 EC - Blaise Pascal, 1ª máquina
numérica de calcular;
1666 EC - Leibniz: De Arte Combinatoria;
‘characteristica universalis;
1673 EC - Leibniz, dispositivo mecânico
de calcular que multiplica, divide, soma e subtrai;
1750 EC - Artesão suiço cria autômatos
com mecanismos de trabalho temporais para bater teclas e escrever letras;
1780 EC - Benjamin Franklin,
eletricidade;
1801 EC - Joseph-Marie Jacquard, cartões
perfurados para automatizar seus teares;
1814 EC - J.H.Herman, primeiro
planímetro, dispositivo analógico para medir área coberta por uma curva em um
gráfico;
1822 EC - Charles Babbage, projeto
Engenho Diferencial para calcular logaritmos;
1829 EC - Willian Austin Burt, EUA, 1ª máquina
de escrever;
1833 EC - Charles Babbage, projeto
Máquina Analítica, cartões perfurados: 1º modelo teórico de um computador;
1838 EC - Samuel Morse e Alfrdd Vail
demonstram os elementos do sistema de telégrafo;
1842 EC - Lady Ada Byron, 1º programa
para a máquina de Babbage;
1847 EC - George Boole, The Mathematical
Analysis of Logic - nasce a Lógica Simbólica; sistema binário;
1854 EC - George Boole, An Investigation
of the Laws of Thougt;
1855 EC - James Clerk Maxwell:
planímetro rotacional;
1855 EC - George e Edvard Scheutz de
Estocolmo, 1º computador mecânico, baseados no trabalho de Babbage.
1858 EC - Jako Amsler: planímetro polar
(pré-computador analógico);
1876 EC - O telefone é inventado por
Alexander Graham Bell;
1878 EC - Sir Willian Thomson (Lord
Kelvin): analisador harmônico (pré-computador analógico);
1879 EC - Gottlob Frege: Begriffsschrift
(Ideografia ou Conceitografia) - rigor formal;
1874-1897 EC - Cantor - desenvolvimento
da Teoria dos Conjuntos;
1886 EC - William Burroughs, 1ª máquina
mecânica de calcular;
1889 EC - Herman Hollerith, patente de
máquina tabuladora;
1890 EC - Herman Hollerith, máquina
eletromecânica, cartões perfurados, censo EUA;
1893 EC - Gottlob Frege: Grundgesitze
(Leis Fundamentais da Aritmética, Ideograficamente deduzidas) - redução da
aritmética à logica, teoria da linguagem;
1895 EC - Guglielmo Marconi transmite um
sinal de rádio;
1900 EC - Hilbert, 10º problema: existe
procedimento de decisão para solucão das equações diofantinas? Hollerith funda
a Tabulating Machine Co. e constrói um dispositivo classificador;
1903 EC - Nikola Tesla, patenteia um
circuito lógico elétrico chamado porta ou chave;
1904 EC - John A. Fleming patenteia um
tubo de diodo a vácuo (válvula);
1908 EC - G. Peano: Formulário
Matemático, simbolismo conectado com estrutura das linguagens naturais;
1913 EC - Bertrand Russell e Whitehead:
Principia Mathematica, deduções matemáticas a partir do cálculo lógico;
1911 EC - Kamerlingh Onnes, físico, na
Universidade de Leiden descobre a supercondutividade;
1911 EC - Computer-Tabulating-Recording
Company é formada da união de Tabulating Company, Computing Scale Company,e
International Time Recording Company;
1915 EC - O uso de microchips é
prefigurado pelo f’ísico Manson Benedicks que descobre que o cristal de
germânio pode ser usado para converter corrente alternada para corrente direta;
1919 EC - Eccles e Jordan, físicos
americanos, inventam o chaveamento eletrônico flip-flop, crítico para altas
velocidades;
1921 EC - A palavra “robot” é usada pela
1ª vez por Karel Câpek, em seu trabalho Rossum’s Universal Robots;
1924 EC - Computing-Tabulating-Recording
Company muda seu nome para International Business Machines;
1925 EC - Vannevar Bush, inicia a
construção de dispositivo para resolver equações diferenciais, em MIT;
1927 EC - Radio-telefonia torna-se
operacional entre Londres e Nova Iorque;
1927 EC - Powers Accounting Machine
Company torna-se Tabulating Machines Division da Remington-Rand Corp;
1928 EC - Aparece o relógio de cristal
de quartzo;
1928 EC - Vladimir Zworykin, inventa o
tubo de raios catódicos;
1930 EC - O Analisador Diferencial,
inventado por Vannevar Bussh e colegas, no MIT, resolve inúmeras equações
diferenciais;
1930 EC - Gödel: Teorema da Incompletude;
1931 EC - Reynold B. Johnson, professor
em Michigan, inventa um processo de
marcar em uma folha de respostas através de uma caneta sensível à
condutividade. A IBM comprou mais tarde esta tecnologia;
1931 EC - 1º computador mecânico é construido
na Alemanha, por Konrad Zuse
1933 EC - 1ª máquina eletrônica que se
comunica, Voder, é construída por Dudley, que seguiu em 1939 com o Vocoder
(codificador de voz);
1936 EC - Konrad Zuse compreende que
programas compostos de combinações de bits podem ser armazenados;
1936 EC - Alonso Church: funcões
computáveis, indecidibilidade da lógica de 1ª ordem;
1936 EC - Alan M. Turing, Universidade
de Princeton: computabilidade e Máquina de Turing;
1937 EC - George Stibitz, 1º circuito
binário baseado na álgebra booleana, Bell Telephone Laboratories;
1937 EC - Claude Shannon: princípios
para um somador eletrônico de base 2;
1937 EC - Howard Aiken submete à IBM
proposta de máquina calculadora digital, capaz de fazer as 4 operações
fundamentais e operar mediante instruções sequenciais;
1937 EC - John Vincent Atanasoff elabora
os princípios para um computador eletrônico digital;
1938 EC - Zuse completa o Z1, computador
eletromecânico binário e o refina desenhando o Z2;
1938 EC - Hewlett-Packard Co. fundada
para fazer equipamentos eletrônicos;
1938 EC - Isaac Asimov: termo “robot”;
1939 EC - Trabalhando de outubro a
novembro, John Vincent Atanasoff com Clifford E. Berry, controem um protótipo
de computador eletrônico digital que usa aritmética binária;
1940 EC - Bell Labs, George Stibitz,
Calculador de Números Complexos, computador digital;
1940 EC - TV a cores;
1940 EC - Bell Laboratories, 1º terminal;
1940 EC - Konrad Zuze completa o Z2;
1941 EC - Colossus é projetado por Alan
M. Turing e iniciada a sua construção por M.H.A. Neuman e Tommy Flowers,
Universidade de Manchester, 1º dispositivo de calcular eletrônico(participação
de Alan Turing)
1941 EC - Konrad Zuse constrói o
computador Z3 a 1ª máquina de calcular com controle automatico de suas operações
1943 EC - 31-V, começa a construção do
ENIAC, na Moore School of Electrical Engineering, Filadelfia;
1943 EC - Dezembro, Colossus, torna-se
operacional em Bletchley Park;
1943 EC - Post: 1º sistema gerativo para
computação simbólica;
1944 EC - Mark I (IBM Automatic Sequence
Controlled Calculator) é terminado pelo
prof. Howard H. Aiken em Harvard junto à IBM: baseado em relês;
1944 EC - Grace Murray 1º programador do
Mark I;
1945 EC - Z4 de Zuze sobrevive à II
Guerra;
1945 EC - J. Presper Eckert e John
Mauchly assinam contrato para construir o EDVAC (Electronic Discrete Variable
Automatic Computer). John von Neumann introduz o conceito de programa
armazenado, no rascunho do projeto do EDVAC;
1945 EC - Na primavera deste ano ENIAC
esá pronto e executando;
1945 EC - Trabalhando em um protótipo do
Mark II, Grace Murray Hopper encontra o 1º “bug,” uma mariposa que causou uma
falha em um dos relês;
1946 EC - Binac (Binary Automatic
Computer), computador para operar em tempo real, iniciado por Eckert and
Mauchly; completado em 1949;
1946 EC - Wiener: cibernética;
1946 EC - ENIAC (Electronic Numerical
Integrator and Computer), J. Presper Eckert e John Mauchly, Universidade de
Pensilvânia. Tinha 18.000 válvulas; realizava 5.000 adições e 360 multiplicações
por segundo;
1946 EC - Arthur Burks, Herman
Goldstine, e John Von Neumann escrevem “Preliminary Discussion of the Logical
Design of an Electronic Computing Instrument”;
1946 EC - Eckert-Mauchly Computer
Corporation é constituida como Electronic
Control Co., Universal Automatic Computer (Univac);
1946 EC - John Tukey, conceito de bit;
1947 EC - Alan M. Turing, artigo sobre
Máquinas Inteligentes, início da IA;
1947 EC - Association for Computing
Machinery (ACM) é constituida;
1947 EC - Howard Ayken e equipe
completam o Harvard Mark II;
1948 EC - EDSAC (Electronic Delay
Storage Automatic Calculator), na Universidade Cambridge, por Maurice V. Wilkes;
1948 EC - IBM introduz o computador
eletrônico;
1948 EC - IBM constrói o Selective
Sequence Electronic Calculator (SSEC), computador com 12.000 válvulas;
1948 EC - Invenção do Transistor,
William Bradford Shockley e John Bardeen e Walter H. Brattain;
1948 EC - Manchester Mark I, ou “baby
machine”, computador digital operacional, com programa armazenado;
1948 EC - Claude E. Shannon publica “A
Mathematical Theory of Communication”, formulando as bases para uma moderna
compreensão dos processos de transmissao de informação;
1948 EC - Richard Hamming encontra e
corrige erros em blocos de dados. O código Hamming é usado posteriormente em
computadores e chaveamentos telefônicos;
1949 EC - EDVAC (Electronic Discrete
Variable Automatic Computer) é testado com os 1os discos magnéticos;
1949 EC - Computador Whirlwind, MIT: 1º computador
de tempo-real, Jay Forrester e Ken Olsen;
1949 EC - EDSAC (Electronic Delayed
Storage Automatic Computer), computador com programa armazenado, Maurice
Wilkes, Universidade de Cambridge, faz seu 1º cálculo dia 6 de maio;
1949 EC - Short Order Code, desenvolvido
por John Mauchly, a 1ª linguagem de programação de alto nível;
1949 EC - Claude Shannon inventa a 1ª máquina
de jogar xadrez. Claude Shannon inventa a 1ª máquina de jogar xadrez;
1949 EC - Jay Forrester inventa a
memória de núcleos magnéticos;
1950 EC - Maurice V. Wilkes,
universidade de Cambridge, usa uma
linguagem simbólica de montagem(assembler) no EDSAC;
1950 EC - SEAC (Standards Eastern
Automatic Computer) é desenvolvido para o National Bureau of Standards;
1951 EC - William Shockley inventa o
transistor de junção;
1951 EC - 1ª conferência internacional
sobre computadores;
1951 EC - Maurice V. Wilkes, conceito de
microprogramação;
1951 EC - IEEE Computer Society é
constituida;
1951 EC - UNIVAC I é instalado no Bureau
of Census americano, usando fita magnética como um buffer de memória;
1952 EC - 1º manual de computador, Fred
Gruenberger;
1952 EC - Kleene: teorema da forma
normal, funções recursivas;
1952 EC - Computador IAS (von Neumann):
a maioria das máquina atuais utiliza este projeto;
1952 EC - IBM 701;
1952 EC - Nixdorf Computer ié fundada na
Alemanha;
1952 EC - RCA desenvolve o Bizmac, com
memória de núcleos magnéticos e um tambor magnético para o 1º banco de dados;
1953 EC - 1º computador da IBM para
grandes massas de dados: utilizando tambores magnéticos;
1953 EC - Burroughs Corp. instala o
Universal Digital Electronic Computer (UDEC) na universidade de Wayne State;
1953 EC - Remington-Rand, para uso no
Univac, 1ª impressora de alta velocidade;
1953 EC - 1º dispositivo de fita
magnética, o IBM 726, 100 caracteres-por-polegada de densidade e 75 polegadas
por segundo de velocidade;
1954 EC - Earl Masterson’s Uniprinter,
ou impressora de linha, desenvolvida para computadores, 600 lpm;
1954 EC - FORTRAN é desenvolvido por
John Backus, IBM. Harlan Herrick executa com sucesso o 1º programa em FORTRAN;
1954 EC - Gene Amdahl, 1º sistema
operacional, IBM 704;
1954 EC - Univac 1103ª: a 1ª máquina
comercial com memória de núcleos de ferrite;
1956 EC - APT (Automatic Programmed
Tool) é desenvolvido por D.T. Ross;
1956 EC - Edsger Dijkstra: algoritmo
eficiente para caminhos curtos em grafos e minimizar expansão de árvores;
1956 EC - A. Newell, D. Shaw e F. Simon
inventam o IPL (Information Processing Language.);
1956 EC - “Logic Theorist”: dispositivo
baseado em IA capaz de provar prpoposições lógicas (Dartmouth College);
1956 EC - John McCarthy e Marvin Minsky
reúnem-se em Dartmouth College onde o conceito de inteligência artificial é
desenvolvido;
1956 EC - O termo Inteligência
Artificial é usado por John McCarthy;
1957 EC - Control Data Corporation é
formada por William C. Norris e grupo de engenheiros da Sperry-Rand;
1957 EC - Ford e Fulkerson: avanços na
combinatória e algoritmos eficientes para cáculo de fluxo máximo em redes;
1957 EC - Digital Equipment Corporation
é fundada por Ken Olsen;
1957 EC - John Backus e colegas da IBM
desenvolvem o 1º compilador FORTRAN para a Westinghouse;
1958 EC - ALGOL, primeiramente chamado
IAL (International Algebraic Language), é apresentado em Zurich;
1958 EC - A 1ª máquina de memória
virtual, Atlas, é instalada na
Inglaterra por Ferranti. Desenvolvida ne Universidade de Manchester por R.M.
Kilburn;
1958 EC - 1os computadores
eletrônicos no Japão: NEC-1101 e -1102;
1958 EC - Frank Rosenblatt contrói o
Perceptron Mark I usando uma CRT (character caracter recognation) como
dispositivo de saída;
1958 EC - LISP, IBM 704, MIT, John
McCarthy: processamento de listas, recursividade, lambda calculus, aceleração
pesquisas IA;
1958 EC - Seymour Cray constrói o 1º supercomputador
totalmente transistorizado para a Control Data Corp., o CDC 1604;
1958-1959 EC - N. Chomski, M. Rabin:
especificações formais;
1958 EC - “Ultimate”, 1º robot,
F.Engleberger e George C. Devol, na Gen.Motors, controlar máq. Térmicas;
1958 EC - Jack Kilby da Texas
Instruments elabora o 1º circuito integrado;
1959 EC - COBOL é definido pela
Conference on Data System Languages (Codasyl);
1959 EC - IBM monta seus 1os
computadores transistorizados: 1620 e 1790;
1959 EC - Jack S. Kilby na Texas
Instruments arquiva uma patente para o 1º circuito integrado;
1959 EC - Robert Noyce da Fairchild
Semiconductor desenvolve a ideia de um bloco de circuitos integrados;
1960 EC - Benjamin Curley, 1º minicomputador,
o PDP-1, na Digital Equipment Corporation;
1960 EC - Control Data Corporation, CDC
1604, 1º computador científico;
1960 EC - Métodos heurísticos para
problemas intratáveis: Karp e Kernigan;
1960 EC - Hoare, Dijkstra, Bobo Floyd:
métodos formais para corretude de programas;
1960 EC - Inst.Pesq.Stanford & Univ.
Edimburg: equipe de IA para projetar robot com visão;
1960 EC - Algol 60 é desenvolvido por
cientistas da computação americanos e europeus;
1961 EC - O conceito de multiprogramação
é implementado no IBM 7030. Time-sharing é implementado no MIT no IBM 709 and
7090 por F. Corbato;
1961 EC - IBM desenvolve o IBM 7030 para
Los Alamos: transistorizado, 64-bit data paths, 1º de byte de 8 bits; em uso
até l971;
1962 EC - APL (A Programming Language),
Ken Iverson, Universidade de Harvard University e IBM;
1962 EC - Linguagens de simulação de uso
geral: (1) SIMSCRIPT, por Rand Corporation; (2) GPSS por IBM;
1962 EC - IBM 1311 discos removíveis;
1962 EC - H. Ross Perot funda EDS
(Electronic Data Systems), Dallas, TX;
1963 EC - Código ASCII padrão para troca
de informações entre computadores
1963 EC - B5000 (Burroughs): primeira
máquina projetada para uma linguagem de alto nível;
1963 EC - Consoles gráficas, General
Motors (DAC-1) e MIT Lincoln Laboratories (Sketchpad), resultando em
computer-aided design (CAD). 1ª light-pen, desenvolvida por Ivan Sutherland;
1963 EC - DEC, PDP-5 minicomputador;
1964 EC - IBM System 360, 1ª família de
computador e compatíveis (circuíto integrado);
1964 EC - Control Data Corporation, CDC
6000, palavra de 60 bits, processamento paralelo. CDC 6600, o mais poderoso
computador por longos anos. Projetado por Seymour Cray;
1964 EC - BASIC (Beginners All-purpose
Symbolic Instruction Language) é criado por Tom Kurtz e John Kemeny of
Dartmouth;
1965 EC - Universidade de Belgrado,
Rajko Tomovic faz uma das 1as tentativas de desenvolver um mecanismo
artificial sensível ao toque;
1965 EC - Robin M., Yamada, Edmond,
Hartman & Stearns: Teoria da Complexidade Computacional;
1966 EC - Texas Instruments oferece a 1ª
calculadora de mão baseada em estado sólido;
1967 EC - A.H. Bobeck, na Bell
Laboratories desenvolve a 1ª memória de bolha magnética;
1967 EC - Ole-Johan Dahl e Kristen Nygaard,
no Norwegian Computing Centre terminam uma versão da linguagem de uso geral
Simula, a 1ª orientada a objeto;
1968-1973 EC - Donald Knuth: The Art of
Computer Programming, algoritmos e estruturas de dados como entidades separadas
dos programas;
1968 EC - Edsger Dijkstra escreve sobre
programação estruturada;
1968 EC - Dendral, 1º programa de
diagnóstico médico, Joshua Lederberg, Universidade de Stanford;
1969 EC - Edson de Castro deixa a DEC to
começar a Data General Corp. e introduz o Nova, 1º minicomputador de 16 bits;
1969 EC - 1ª Confer. Internacional sobre
Inteligência Artificial;
1969 EC - IBM “abre” hardware e
software; introduz linha de minicomputador, Sistema/3;
1969 EC - Complilador PASCAL, by
Nicklaus Wirth, instalado no CDC 6400;
1970 EC - Shakey, desenvolvido na SRI
International, é o 1º robot que usa inteligência artificial para se deslocar;
1970 EC - DEC, PDP-11/20, 1º mini de 16
bits;
1970 EC - 1º torneio de xadrez entre
máquinas da ACM;
1970 EC - IBM monta o 1º Sistema 370,
computador de 4ª geração;
1971 EC - Floppy disks são introduzidos
para carregar o microcódigo do IBM;
1971 EC - Cook, Levin: problemas
NP-completos;
1971 EC - Intel Corporation anuncia o 1º
microprocessador, o Intel 4004, equipe liderada por Marcian E. Hoff;
1971 EC - John Blankenbaker, 1º computador
pessoal, Kenbak I;
1972 EC - 1ª calculadora eletrônica, por
Jack Kilby, Jerry Merryman, e Jim VanTassel, da Texas;
1972 EC - Gary Kildall, Naval
Postgraduate School escreve o PL/1, a 1ª linguagem de programação para o
microprocessador Intel 4004;
1972 EC - SIRCH, dispositivo capaz de
reconhecimento e orientação, Universidade de Nottingham;
1972 EC - Intel 8008, microprocessador
de 8 bits;
1972 EC - Dennis Ritchie desenvolve a
linguagem C nos Bell Labs;
1972 EC - Teorias de análise de
complexidade desenvolvem a idéia da
incompletude dos problemas NP, mostrando a intratabilidade de determinados
problemas computacionais como o do caixeiro viajante;
1973 EC - Linguagem PROLOG, Alain
Comerauer, Universidade de Marseilles-Luminy, França;
1973 EC - R2E comercializa o MICRAL, 1º microcomputador
da França;
1973 EC - Winchester disk drives, pela
IBM, nome usado para seu dispositivo de acesso direto à memória, Modelo 3340;
1974 EC - Intel 8080, microprocessador
de 8 bits, usado em muitos microcomputadores;
1974 EC - Zilog é formada;
1975 EC - Cray-1, supercomputador;
1975 EC - Impressora laser (IBM);
1975 EC - MITS, computador pessoal
Altair, Ed Roberts and Bill Yates;
1975 EC - Cincinnati Milacron T3, 1º robot
da indústria aeroespacial;
1975 EC - Microsoft é formada após Bill
Gates e Paul Allen adaptarem e venderem um BASIC para o Altair PC da MITS;
1976 EC - Impressoras jato de tinta
(IBM);
1976 EC - MYCIN, expert system,
Stanford, por E. Shortliffe;
1976 EC - NEC System 800 e 900,
mainframes;
1976 EC - Seymour Cray desenvolve o Cray
1 com 100 milhões de operações de ponto flutuante por segundo (MFLOP);
1976 EC - Kernigan: algoritmos
aproximativos; Solovai e Strassen: algoritmos randomizados;
1976 EC - Superminicomputadores são
apresentados por Perkin-Elmer e Gould SEL;
1976 EC - Zilog Z-80 chip;
1977 EC - Apple Computer é formada e
apresenta o computador pessoal Apple II;
1977 EC - DEC, supermini VAX-11/780, 32
bits;
1977 EC - Datapoint , sistema ARC
system, a 1ª área de rede local;
1978 EC - Popularização da análise
estruturada (Tom de Marco);
1978 EC - Texas Instruments, brinquedo
educacional Speak-and-Spell, síntese de voz;
1978 EC - 1ª COMDEX;
1979 EC - Linguagem Ada, CII-Honeywell Bull
(França), Jean Ichbiah;
1979 EC - Benoit Mandelbrot continua sua
pesquisa sobre fractais, gerando o
conjunto Mandelbrot, derivado de z(n +
1) = z(n) * z(n) - (0);
1979 EC - VisiCalc, software de planilha
eletrônica;
1979 EC - Wordstar, software de
processamneto de texto, Micropro (agora
Wordstar International);
1980 EC - Control Data Corporation,
Cyber 205 supercomputador;
1980 EC - Análise probabilística de
algoritmos;
1980 EC - Microsoft licencia o sistema
operacional UNIX, da Bell Laboratories e
aprsenta sua adaptação, o XENIX;
1980-90 EC - Criptografia: protocolos de
chave pública, baseados na geração de números primos;
1981 EC - Commodore, VIC-20 computador
para uso doméstico;
1981 EC - IBM entra no mercado de
computadores pessoais;
1981 EC - Osborne Computer, Osborne 1, o
1º laptop;
1981 EC - Linguagens robóticas para
facilitar gargalos de programação;
1982 EC - John Warnock desenvolve o
PostScript, linguagem para definição de páginas e com Charles Geschke funda a
Adobe Systems;
1982 EC - Sun Microsystems é formada;
1982 EC - Microsoft, MS-DOS;
1983 EC - Cray 2, 1 bilhão de FLOPs
(floating point operations per second);
1983 EC - At AT&T Bell Labs, Bjarne
Stroustrup continua seu trabalho sobre o C++, uma extensão orientada a objeto
para C;
1984 EC - Apple, computador Macintosh;
1984 EC - IBM introduz o PC AT;
1984 EC - Programação Linear: algoritmo
de Karmakar;
1984 EC - Linguagem funcional Standard
ML;
1984 EC - CD-Rom, Sony e Philips;
1985 EC - Aldus apresenta o PageMaker,
para o Macintosh: início da era da edição desktop;
1986 EC - Início da popularização da
palavra e conceito Case;
1986 EC - Compaq, série Fortune 500; 1º Intel
80386-based PC;
1986 EC - HP, linha Spectrum,
computadores com tecnologia RISC (reduced instruction set computers);
1986 EC - Eiffel, linguagem orientada
objeto;
1987 EC - IBM PS/2;
1987 EC - Cray Research, Cray 2S, 40%
mais rápido que Cray 2;
1987 EC - ETA Systems, ETA-10,
supercomputadores;
1987 EC - Sun Microsystems, 1ª workstation
baseada microprocessador RISC
1987 EC - Watts Humphrey e William
Sweet, Instituto de Engenharia de Software, EUA, publicam uma “estrutura de
processos” que se torna um modelo para ajudar desenvolvimento de software
confiável;
1987 EC - Aldus, PageMaker para IBM PC e
compatíveis;
1987 EC - Texas Instruments: 1º chip
microprocessador baseado em IA;
1988 EC - Cray Research, Cray Y-MP,
supercomputador de 20 milhõesde dólares;
1988 EC - IBM, sistema operacional
MVS/ESA;
1988 EC - Motorola, 88000, um microprocessador
RISC;
1988 EC - O 1º supercomputador para
aplicações gráficas, por Apollo, Ardent e Stellar;
1988 EC - AT&T anuncia plano de
adquirir 20% da Sun Microsystems, que irá ajudar no desenvolvimento de nova
versão para UNIX;
1988 EC - Sun Microsystems 80386-based
workstations;
1988 EC - Next workstation computer: 1º computador
usando discos óticos apagáveis;
1988 EC - Internet network Internet network;
1988 EC - Barry Boehm publica uma
descrição do modelo espiral para desenvolvimento de software;
1989 EC - DEC workstation usando
computadores com tecnologia RISC;
1989 EC - Intel 80486 microprocessador e
I860 RISC/coprocessador. Chips com mais de um milhão de transistores;
1989 EC - Sun Microsystems, SPARCstation;
1989 EC - Cray se reestrutura em duas
cias: Cray Research e Cray Computer Corp., esta liderada por Seymour Cray, o
qual desenvolverá um supercomputador baseado em gálio-arsênio;
1989 EC - Mais de 100 milhões de
computadores no mundo;
1989 EC - Pocket anuncia o 1º computador
de pequeno porte com MS-DOS;
1989 EC - Grid introduz um laptop
sensível ao toque, que reconhece escrita a mão;
1989 EC - Notebook com bateria: LTE e
LTE/286 da Compaq;
1989 EC - DEC mainframe VAX 9000;
1989 EC - O 1º computador pessoal com
tecnologia EISA;
1989 EC - O 1º computador baseado no
chip 80486;
1990 EC - Berners-Lee escreve um
protótipo inicial para a World Wide Web, que usa suas outras criações: URLs,
HTML, e HTTP;
1990 EC - Motorola microprocessador
68040;
1990 EC - IBM RISC Station 6000;
1990 EC - DEC VAX tolerante a falhas;
1990 EC - Cray Research,
supercomputador, Y-MP2E;
1990 EC - Haskell, a última evolução das
linguagens funcionais, para uso geral;
1990 EC - Microsoft Windows 3.0;
1990 EC - IBM PS/1;
1990 EC - IBM System 390, mainframe dos
ano 90;
1990 EC - Microsoft Windows 3.0;
1990 EC - Apple, Classic, LC e IISI;
1990 EC - Intel i486 e iPSC/860 e
Motorola 68040;
1990 EC - Sun Microsystems SPARCstation
2;
1990 EC - As primeiras estações SPARC
compatíveis;
1991 EC - Advanced Micro Devices,
microprocessador AMD 386 microprocessor, para competir com chip Intel 386;
1991 EC - Notebook PCs;
1991 EC - HP, série 700 RISC-based 9000;
1991 EC - Intel 486SX;
1991 EC - NCR é assumida pela AT&T;
1991 EC - Sistema operacional Apple 7.0;
1991 EC - Microsoft DOS 5.0;
1991 EC - Borland compra Ashton-Tate;
1991 EC - SunSoft, subsidiária da Sun
Microsystems anuncia o Solaris, sist.operacional UNIX para SPARC workstations e
386/486 PCs;
1991 EC - Wavetracer, Zephyr, computador
paralelo com 8192 processadores;
1992 EC - IBM OS/2 2.0;
1992 EC - Microsoft Windows 3.1;
1992 EC - Sun Microsystems lança família
SPARCstation;
1992 EC - Digital Equipment anuncia sua
próxima geração de computadores com arquitetura baseada tecnologia RISC, o
Alpha;
1992 EC - Microsoft Windows for
Workgroup;
1992 EC - Intel Pentium;
1992 EC - Hewlett-Packard LaserJet 4, de
alta resolução (600 x 600);
1992 EC - Novell adquire UNIX Systems
Laboratory;
1993 EC - Estudante e o staff do Centro
de Aplicações Supercomputadores, Universidade de Illinoiscriam, criam uma
interface gráfica para usuário para navegação na INTERNET chamada NCSA Mosaic;
1993 EC - CARMEL, robot de Univ. de
Michigan, robótica auxiliada por computador;
1993 EC - Novell NetWare 4.0;
1993 EC - Motorola PowerPC,
microprocessador;
1993 EC - Microsoft Windows NT;
1993 EC - Microsoft Plug and Play e
Microsoft at Work (MAW);
1993 EC - IBM workstation baseada em
chip PowerPC;
1993 EC - IBM OS/2 para Windows;
1993 EC - Sun Microsystems licensia
NextStep;
1994 EC - Leonard Adleman, da
Universidade de Southern California demonstra que o DNA pode ser usado como um
medium para computadores;
1994 EC - O 1º browser para o Netscape
torna-se disponível e possibilta o rápido crescimento de surfistas WEB;
1994 EC - Em abril, Jim Clark e Marc
Andreesen fundam a Netscape Communications (originalmente Mosaic
Communications);
1994 EC - Intel introduduz o 486DX4;
1995 EC - Linguagem de programação Java,
apresentada em maio, possibilita desenvolvimento de aplicações com
independência de plataforma;
1995 EC - Em julho de 1995,
pesquisadores da 1ª Universidade de Tokyo quebram a barreira do 1º teraflop com
o processador 1.692-GRAPE-4(GRAvity PipE número 4), computador para aplicações
especiais: simulações astrofísicas, especialmente os problemas gravitacionais;
1995 EC - Windows 95 é lançado dia 24 de
agosto;
1996 EC - O Intel Pentium Pro é
anunciado;
1996 EC - CRAYT3E-900, computador de uso
geral com 1.8 teraflop;
1997 EC - Sistema StarMax 6000 da
Motorola;
1997 EC - Lançamento do Windows NT 5.0;
1997 EC - Seagate Technology lança drive
rígido para disco de 3,5” de 2,5 Gigabytes: o Seagate Medalist;
1998 EC - Versão 333 Mhz do processador
Intel II. Nomeado Deschutes, este processador usa o novo processo industrial
que o torna mais rápido, gerando menos calor que antes;
1998 EC - Nova versão do Windows 98;
1999 EC - Nova versão do kernel do
Linux, a 2.2.0. O número de pessoas que usam Linux é calculado em mais de 10
milhões;
1999 EC - Nova versão do processador AMD
Athlon: 750 Mhz 2000 MS Windows 2000;
2000 EC - Novas versões dos
processadores AMD Athlon e Intel Pentium III: 1 GHz;
2000 EC - Compaq iPAQ, para a plataforma
DEC Itsy;
2000 EC - Mac OS X da Apple. Sistema operacional
com interface gráfica baseada em Unix;
2000 EC - Polêmica do bug do milénio
(Y2K Bug);
2001 EC - Lançamento do Kernel do Linux
2.4;
2001 EC - Lançamento do primeiro iPod da
Apple MS Windows XP;
2002 EC - Lançamento do Lindows Lindows
alia-se à Microtel Lançamento do Kernel do Linux 2.6;
2003 EC - Microsoft Office 2003;
2003 EC - 2003 Motherboard Intel
Canterwood;
2003 EC - Surge o vírus Worm Blaster 2003;
2003 EC - Intel Prescott 2003 Multithreading;
2003 EC - Comunicações WiFi;
2004 EC - Mozilla Firefox 1.0;
2004 EC - nVidia releases GeForce 6800;
2005 EC - Windows Vista;
2005 EC - Migração da plataforma Macintosh para processadores Intel;
2006 EC - Web 2.0;
2006 EC - Apple lança o iPod Nano, o
menor iPod com tela LCD e o iPod Video, com capacidade de armazenamento de até
80GB;
2007 EC - Maio: novo sistema Cray XT4
paraprevisão de tempo instalado no CSCS-Swiss National Supercomputing Centre:
2.6 GHz, 4.5 Tflops.
2008 EC - Os usuários de internet do
mundo ultrapassam 1,5 bilhões de pessoas. O total só na China chega a 250
milhões, ultrapassando os Estados Unidos como o país com a maior população
usuária de internet do mundo. Os desenvolvedores do Netscape interrompem o navegador
pioneiro, embora seu "sucessor", Firefox, permaneça forte.
Importantes companhias aéreas intensificam o uso de serviços de internet nos
voos;
2008
EC -
O número de chineses ligados à rede chegou a 250 milhões. E a China ultrapassou
os Estados Unidos como o país com a maior população usuária de internet do
mundo. No planeta os usuários de internet ultrapassaram 1,5 bilhões de pessoas.
A "AOL" anunciou a descontinuação do navegador Netscape
em 1º de fevereiro de 2008. Esse navegador dominou o mercado de navegadores em
meados dos anos 90. Mesmo descontinuado a sua influência deve perdurar pois
fragmentos do código original estão presentes em qualquer browser existente e/ou
em produção, incluindo o Firefox
e o Internet Explorer. Em 23 de junho, um estudo do órgão de pesquisas Gartner
informou que o número de computadores pessoais em uso no mundo superou um
bilhão de unidades. Também previu que esse número deverá dobrar até 2014,
com forte crescimento em países em desenvolvimento. Até o início de 2008 os
países desenvolvidos tinham cerca de 58% dos equipamentos,mas esse número
deverá baixar para cerca de 30% do próximo bilhão, devido à rápida penetração
em mercados emergentes determinada pela contínua queda no preço médio dos pcs
, da expansão tanto da conectividade sem fio como da banda larga e, também, da
percepção generalizada que computadores são indispensáveis ao desenvolvimento. Em
26 de junho o conselho do ICANN
(= Corporação de Nomes e Números Designados da Internet, na sigla em inglês),
em sua conferência anual, em Paris, aprovou, por unanimidade, a liberação das
terminações de endereços dos sites, permitindo opções além das tradicionais
como .com ou .org. Assim, o final dos endereços dos sites não
precisam mais se restringir a poucas categorias que indicam a natureza do
negócio ou da organização, seguidos ou não da sigla do país onde estão
hospedados. O ICANN também aprovou outra proposta que permitiu nomes de
domínios escritos total ou parcialmente em caracteres como o chinês e o árabe. Várias
companhias aéreas intensificaram o uso de serviços de internet nos voos.
2009 EC - O "Seattle
Post-Intelligencer" torna-se o primeiro grande jornal diário a ficar
exclusivamente online. O Google anuncia o desenvolvimento de um sistema
operacional com foco na web;
2009
EC -
Foi comemorado os 25 anos do lançamento da primeira impressora
pessoal a
laser. A "HP" já vendeu mais de 132
milhões de impressoras LaserJet por todo o mundo. O Google
anunciou, em 7 de Julho de 2009, o desenvolvimento de um sistema
operacional baseado na web. O Google
Chrome OS em princípio prometia ser um sistema em código aberto e
orientado inicialmente para netbooks. O vídeo a sequir
resume os dados, inclusive incuindo quantidade de acessos, quantidade de
páginas servidas pelo Facebook e número de mensagens no Twitter...). Vídeo: 2010 Random Internet Facts http://www.youtube.com/watch?v=pUok8Rb_u48
(acessado em 14/04/2011) (Fatos sobre a Internet). No Brasil existiam 64,8
milhões de internautas com mais de 16 anos;
2011
EC - A internet
depende fortemente de cabos submarinos que carregam a informação sob
as águas dos oceanos;
2012 EC – A Microsoft lança o Windows 8,
o Microsoft System Center 2012, o Microsoft Visual Studio 2012 e o Tablet
Surface;
2013 EC – A Microsoft lança o Pacote
Microsoft Office 2013, com capacidade para suportar arquivos em formato PDF;
Nenhum comentário:
Postar um comentário
Sintam-se à vontade para enriquecer a participação nesse blog com seus comentários. Após análise dos mesmos, fornecer-lhe-ei um feedback simples.