sábado, 19 de janeiro de 2013

RESUMO DA ORIGEM E DA EVOLUÇÃO DAS CIÊNCIAS DA COMPUTAÇÃO, DA INFORMAÇÃO E DA COMUNICAÇÃO - TÓPICO 3 - PARTE 2



Blog “Ciências Exatas Contemporâneas”, de autoria de Álaze Gabriel.

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;
2010 EC - Ao terminar 2009 obteve-se esses dados, que foram apresentados por sexo, idade, nível de renda e nacionalidade. Também estão apresentadas velocidades médias de banda larga, tanto para usuários de linhas fixas como para móveis. Nota-se que 58% dos entrevistados possuíam computador de mesa e 46% tinham um computador portátil (laptop ou netbook). Quanto mais alto é o nível de renda é mais provável o acesso ser efetuado por banda larga. A semelhança é total ao se comparar o acesso quanto ao gênero: 74% dos homens e, também, 74% das mulheres acessam a Internet. Há diferenças notáveis no acesso de faixas etárias: 93% das pessoas com idades entre 18 - 29 anos acessam, mas apenas 38% das pessoas com 65 anos ou mais o fazem, entretanto, 70% das pessoas entre 50 e 64 anos estão online. Entre as pessoas que mantêm um blog, a maioria, 53%, está na faixa entre 25 e 44 anos de idade, sendo 25% entre 25 e 34 e 28% entre 35 e 44 anos. Apenas 7% de menores que 25 anos tem blogs. Há alta correlação com o nível educacional: 94% dos graduados universitários estão on-line, mas só 39% das pessoas com ensino médio ou menos estão. A frequência de números de acessos domésticos está aumentando: em 2005, 27% dos entrevistados usavam a Internet "várias vezes por dia". No final de 2009 chegavam a 38%. O Japão tem as conexões mais rápidas à Internet, em média. Seguem-se Japão, Coréia, Finlândia Suécia e França. A Noruega é o país com o maior nível de penetração da Internet. É seguida por Suécia, Finlândia, Holanda e Estados Unidos. A média de conexão à Internet móvel está em torno de 700 Kbps;
2011 EC - A internet depende fortemente de cabos submarinos que carregam a informação sob as águas dos oceanos;
2011 EC – Apple lança iPad 2 e iPhone 5;
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;
2013 EC – Apple lança iPhone 5S e novo design iPhone 5;

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.