Pré-história tecnológica

 

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 desenvolvido 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. A descoberta desse dispositivo, datada 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.

 

Logaritmos e os primeiros dispositivos mecânicos de cálculo
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.

 

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 Babbage (1792-1871), considerado unanimemente um dos grandes pioneiros da era dos computadores. No ano de 1822 ele apresentou a sua Máquina de Diferenças 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 então compunham 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". 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 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 ou por meio de medições físicas. 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 Engine de 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. Em 1833, Babbage projetou a sua Máquina Analítica ou Diferencial, semelhante ao computador atual, pois dispunha de programa, memória, unidade de controle e periféricos de entrada e saída. Todos os seus 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. 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 consequências decisivas. 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 seria 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.

 

A máquina de Jacquard, inspiração de Babbage
É importante fazer uma menção a Joseph-Mariae Jacquard (1752-1834), o francês que introduziu a primeira máquina para substituir o trabalho humano. Na verdade, Babbage despertou para seu novo projeto observando a revolução produzida pelos teares de Jacquard. Era uma máquina que automatizava os processos de fabricação de tecido. Para executar um determinado trançado, a fiandeira deveria ter um plano ou programa que lhe dissesse que fios deveria 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 11.000 teares de Jacquard. 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.

 

Uma Lady como primeira programadora
Bem cedo Ada Augusta Byron (1851 – 1852) demonstrou ter grandes talentos na área. Apresentada a Babbage durante a primeira demonstração da Máquina de Diferenças, tornou-se uma 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, 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. Esta publicação e outro ensaio a colocam como patrona da arte e ciência da programação. 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.

 

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. Um sueco, George Scheutz, editor de um jornal técnico de Estocolmo, leu e ficou entusiasmado pela máquina descrita por Lardner e, sem comunicar-se com Babbage, propôs-se a construir a sua Máquina de Diferenças, junto com seu 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.
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.

 

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 funcionário 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.
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.
Em 1887, o francês Leon Bolle construiu uma máquina de multiplicar que executava essa operação de maneira direta, sem utilizar o processo de somas sucessivas. Também no final dos Séc. XIX, um espanhol residente nos E.U.A, Ramón Verea, construiu uma máquina semelhante à máquina de Bolle, que realizava a multiplicação de forma direta.
Em 1893, o suíço otto Steiger, construiu a primeira calculadora a obter sucesso comercial, chamada A Milionária, que foi utilizada em grandes transações e em algumas aplicações de cálculos científicos.

 

Computadores Analógicos
Muitos dispositivos analógicos foram desenvolvidos a partir do ano 400 a.C. Típicos instrumentos deste tipo são os astrolábios, o mecanismo Antikythera, os instrumentos de sinalização e os planetários. Um computador analógico é um dispositivo no qual os números são representados por quantidades 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.
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.
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.
Em todos os dispositivos analógicos que começaram a aparecer, a operação fundamental é a da integral, isto é, todos eles produziam como saída , dado f(x) como entrada.Dentro da evolução das máquinas analógicas, os analisadores diferenciais foram os dispositivos analógicos que mais tarde passaram a ser chamados propriamente de computadores analógicos.

 

Primeiras evoluções: século XV
É por volta do século XV que aparecem dispositivos analógicos mais sofisticados, utilizados para prever os tempos de 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 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 cosseno, Lord Kelvin construiu uma máquina analógica para avaliar essa fórmula. Chamou-a analisador harmônico.
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é (...)". Uma análise harmônica consiste em se formar um número de integrais do tipo geral , onde g é uma função seno ou cosseno.
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. 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 consequentemente ele não pode fornecer uma entrada 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.

 

Michelson e seu analisador harmônico; I Guerra Mundial
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 destes problemas é o de como determinar a função de deslocamento, observando-se a resistência do ar, em função da velocidade. 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 Inglaterrra, cujas principais descobertas estão nos procedimentos numéricos para solução de equações diferenciais com grande precisão.

 

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, na General Electric, e outros lugares. Eles 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. 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.
A partir de 1927 até 1931, Vannevar Bush e sua equipe no MIT desenvolveram mecanismos para resolver equações diferenciais ordinárias. Bush deve especialmente a C. W. Niemann, engenheiro e inventor do amplificador de 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. Entram aqui conceitos de servo-mecanismos e amplificadores operacionais.
Ainda dentro do mundo dos computadores analógicos, deve-se destacar o trabalho do físico inglês Douglas Hartree, 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.
As novas descobertas da indústria e da ciência no campo da eletricidade - proporcionando rapidez e precisão nos 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 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.

 

Circuitos elétricos e formalismo lógico: Claude Elwood Shannon
Aos poucos, juntando idéias, vamos chegando à construção do computador digital. Paralelamente aos matemáticos, também um jovem engenheiro, Claude E. Shannon, 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. 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 .
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. 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. Com 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 breve já seria possível a construção de 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é e nos dez anos seguintes ao seu primeiro trabalho, Shannon dirigiu seu interesse para o estudo da comunicação, parte de um trabalho já iniciado por Norbert Wiener.
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. Shannon 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 meio onde a "desordem" é muito alta. Chegou a equações muito parecidas às do físico Boltzmann sobre as leis da entropia.
Em 1948 Shannon publicou dois trabalhos que originaram a Teoria da Informação. 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, linguística e termodinâmica.
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 de hardware e software de algumas operações do cérebro humano.

 

As primeiras máquinas

 

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. Pode-se dividir esta primeira etapa em 3 partes:
1. o trabalho do alemão Konrad Zuse;
2. a produção, pelos laboratórios da Bell Telephone, de uma série de computadores baseados em tecnologia de relés e os projetos de Howard Aiken em Harvard;
3. os projetos de computadores eletromecânicos de pequeno e grande porte da IBM .

 

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 longos cálculos com dispositivos mecânicos era guardar os resultados intermediários para depois utilizá-los nos lugares apropriados nos passos seguintes . 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" . 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, que foi terminado dois anos após o 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 de possuir 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 que simultaneamente 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 .

 

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 em 1944, e George Stibitz, nos laboratórios da Bell Telephones. Eles procuravam componentes eletromecâ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 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.
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, não totalmente baseada nos relés, já incorporando uma nova tecnologia que seria amplamente utilizada mais tarde: as memórias de núcleo de ferrite. 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. Quando terminado em 1944, foi imediatamente adotado pela marinha americana, para fins militares. Novas versões foram produzidas até 1952.

 

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 variaram 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 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 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.
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 na produçã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.

 

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.
Ocupa também um importante lugar na História da Computação o computador ENIAC: esta máquina e a equipe que a projetou e a construiu serão responsáveis por um grande avanço no desenvolvimento dos computadores eletrônicos. Eckert (1919-1995) e um pouco mais tarde John Mauchly (1907-1980), físico, e Herman H. Goldstine, matemático, tornaram-se os principais protagonistas na construção do Electronic Numerical Integrator and Computer, o primeiro computador onde cada unidade era composta de válvulas eletrônicas e relés.
trabalho sobre projetos de computadores, que foi fundamental nos 40 anos que se seguiram. Em 30 de junho de 1945 ele publicou o First Draft of a Report on the EDIVAC, que estabeleceu o paradigma de projetos de computadores para várias gerações seguintes de máquinas. Esta arquitetura ficou conhecida com o nome de "arquitetura de von Neumann", e entre outras coisas incluía o conceito de programa armazenado. John von Neumann foi o responsável pela criação do código a ser usado no ENIAC e elaborou o projeto lógico do dispositivo eletrônico para executá-lo. O ENIAC começou a operar em 1943, tendo sido terminado totalmente em 1946, encerrando suas operações em 1955.
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 Oxforf, para tentar construir uma máquina capaz de decodificar o alfabeto produzido pela versão germânica de um dispositivo inventado nos Estados Unidos, o ENIGMA. 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, que 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 projetado especialmente 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.
Um importante aspecto do desenvolvimento dos computadores foi a produção de dispositivos chamados de 'memória'. A memória de núcleos magnéticos acabou preponderando, tendo sido utlizada 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 a performance dos computadores.
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. Von Neumann, um dos envolvidos no projeto do ENIAC, foi para Princeton construir a sua própria versão do EDVAC (Electronic Discrete Variable Automatic Computer), que tinha sido projetado por Eckert e Mauchly na Pensilvânia. Era evidente para von Neumann que a programação de computadores com um grande número de chaves e cabos era lenta e pouco flexível. Ele começou a perceber que o programa poderia ser representado em forma digital na memória do computador, juntamente com os dados. Seu projeto básico, hoje conhecido como máquina de von Neumann, foi utilizado no EDSAC, o primeiro computador de programa armazenado. Esta técnica de usar uma "memória de armazenamento" assim como a "transferência de controle por condição", que permitiam parar e reiniciar o processamento a qualquer instante, abriu enorme perspectiva para a programação de computadores. O elemento chave dessa arquitetura 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ível que utilizava esses conceitos.

 

As Primeiras Linguagens

 

Alguns aspectos teóricos
Um dos pontos fundamentais do projeto formalista de Hilbert para a solução de problemas matemáticos era descobrir um procedimento efetivo para verificar a validade de proposições matemáticas. Depois do Teorema de Gödel evidenciou-se que tal proposta é irrealizável. Tornou-se claro o que é um procedimento efetivo, tornando-se claro ao mesmo tempo o que é um problema computável.
Um procedimento efetivo é uma sequência finita de instruções que podem ser executadas por um agente computacional, seja ele homem ou não. Esse procedimento efetivo também é chamado de algoritmo. A descrição finita do algoritmo deve ser feita através de uma determinada linguagem. Esta linguagem algoritmica deve pertencer a um conjunto não ambíguo de uma linguagem natural, tal como Francês ou Inglês, ou de uma linguagem artificial como FORTRAN ou LISP. As frases da linguagem descreverão as operações a serem executadas. A forma ou formato de procedimentos efetivos em uma linguagem algoritmica qualquer é especificada por um conjunto de regras chamada regras de sintaxe. Esta sintaxe refere-se aos programas corretamente escritos nela e o relacionamento entre os símbolos e frases que ocorrem nesses programas. Uma linguagem de programação torna-se assim uma notação formal para a descrição de um algoritmo, entendo-se por notação formal um 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 e qualquer problema que tenha solução por computador pode ser escrito com ela. Qualquer linguagem em que se possa definir uma função recursiva será universal. 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.
Uma linguagem de programação também possui uma semântica. A semântica de um programa irá depender exclusivamente do que se deseja causar objetivamente 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' através de 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 signifca falar das características que tornam tais linguagens implementáveis, independentemente de ser este ou aquele computador. Portanto a semântica é uma entidade abstrata: ela modela o que o programa quer causar quando é executado, independente do seu uso nesse ou naquele computador. A semântica de uma linguagem de programação é a mesma semântica de todos os programas escritos nela.

 

Desenvolvimentos anteriores a 1940
Os mais antigos algoritmos escritos que se conhecem são os da velha Mesopotâmia. Eram sequências de cálculos sobre conjuntos particulares de dados e não uma abstração de procedimento como entendido na programação atual. Na civilização grega, vários algoritmos não triviais foram estudados, como por exemplo o de Euclides.
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 tido um bom desenvolvimento. Na Computação, Babbage e Lady Lovelace elaboraram, entre outros, um programa para o cálculo dos números de Bernoulli. 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.
O próprio Alan M. Turing, para tratar do problema da indecidibilidade de Hilbert construiu uma linguagem muito primitiva para sua má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, as 'tabelas' de Turing 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.

 

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
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 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. 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çaram a surgir as chamadas linguagens de alto nível.

 

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 é fornecer um 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.

 

O diagrama de fluxos
Em Princeton, 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. Eles propuseram então uma representação pictórica. Eles descreveram fluxogramas que continham uma caixa denominada "caixa de anotação (especificação)". Nesta caixa descreviam-se certos fatos sobre o resultado de uma computação O conteúdo desta 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. A ênfase era no poder de cálculo e foi largamente difundido entre as pessoas envolvidas com computadores na época. O conceito matemático de igualdade foi substituído pelo de atribuição.

 

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 pela maneira estranha com que analisava e dividia os problemas. O principal ponto de interesse no trabalho de Curry, não foi a sua linguagem de programação, mas os algoritmos que ele analisou para conversão de parte desses em código de máquina. Com isso ele 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.

 

Interpretadores algébricos e linguagens intermediárias
Em 1951 apareceu um trabalho de John Mauchly, o Short Order Code, que, 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 interpretador algé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çou 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.
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 loops enquanto 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.

 

Os primeiros 'compiladores'

Conforme Knuth e Trabb, o termo compilador não era ainda utilizado nessa época. Na verdade falavam 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 transcedentais. Junto com a idéia de um endereçamento realocável foram criadas rotinas de montagem para facilitar a tarefa de uso das subrotinas e de endereçamento relativo, idéia desenvolvida por M. V. Wilkes. Para isso foi inventada uma pseudo linguagem de máquina. Uma rotina interpretativa iria processar estas instruções, emulando um computador hipotético.
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 isto fácil deve-se elaborar um código compreensível. Isto somente pode ser feito melhorando-se a notação da programação". John Backus discute esta 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 estes primeiros sistemas denominados genericamente de programação automática 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 subsequentemente. 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 um có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.

 

A Revolução do Hardware e do Software

 

Da segunda geração de 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 um novo avanço e com eles surgiram os computadores de terceira geração (1964 - 1970). As tecnologias LSI, VLSI e ULSI abrigam 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.

 

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 especial atenção pelo seu pioneirismo e pelos novos paradigmas que introduziram as linguagens, chamadas de alto nível: FORTRAN e LISP.
Com relação ao FORTRAN, em 1954 ocorreu um simpósio sobre 'computação automática', e seu maior evento foi a apresentação do compilador algébrico de Laning e Zierler. 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, para 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?". Em novembro de 1954 a equipe de Backus tinha criado o IBM Mathematical FORmula TRANslation System, o FORTRAN. 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 chamadas de procedimento, estão em sua forma mais pura, e isto influenciará diretamente linguagens como LISP e Algol.
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.
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 formal adequada, 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 LISP pode-se visualizar melhor um importante conceito na computação moderna que é o uso de estruturas de dados como objetos abstratos..
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/I surgiu 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. Foi a linguagem Pascal entretanto que se tornou a mais popular das linguagens do estilo Algol, porque é simples, sistemática e facilmente implementável nos diferentes computadores. 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, introduziu o 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 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 é induzida pelo hardware, com preocupação de que os dados trafeguem o mais rapidamente possível. Daí alguns de seus aspectos relevantes: sequência de comandos, atribuição, controles (loopings), etc. É ainda o paradigma dominante. Já as linguagens que seguem o paradigma funcional 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, memória, sequê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, com a produção de efeitos colaterais. 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. Simula foi um ancestral de tais linguagens.
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.
No início da década de 1990 ocorreu um difusão intensa do paradigma da orientação a objeto. Este paradigma esteve em gestação por cerca de 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. Apareceram C++ e linguagens como Eifell, Objective C, Cedar/Mesa (elaborada pela Xerox, para fazer pesquisa de dados), Delphi (uma evolução da lingaugem Pascal) entre outras. E, surge a linguagem JAVA.
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 refocalizou seus esforços para criar uma linguagem para aplicações multimídia on line.
Conforme Linden, 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 destas qualidades, todas importantes, na verdade duas outras realmente fazem a diferença e tornam Java extremamente atrativa: sua portabilidade e o novo conceito de arquitetura neutra.
Portabilidade significa que Java foi projetada objeticando 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.
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 conceitualemente de Máquina Virtual Java.
Com a linguagem Java começou superar-se a barreira para a Internet tornar-se um computador: a barreira que impede o uso de um software utilizado em um determinado lugar, executando-o em qualquer plataforma.

 

Arquiteturas de computadores e sistemas operacionais
O termo arquitetura de computador vem da possibilidade de se visualizar uma máquina como um conjunto hierárquico de níveis que permite entender como os computadores estão organizados. Os primeiros computadores digitais por exemplo somente possuiam 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 0 e 1, 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 conjunto de instruções do nível anterior ou examinar uma instrução de cada vez e executar a sequê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, surgiu o conceito de barramento de dados, que acelerou a velocidade dos computadores. Ao mesmo tempo apareceram os grandes sistemas operacionais, 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.
É a era das arquiteturas mainframes: o suporte às tarefas computacionais e o desenvolvimento das aplicações eram feitos numa área central, denominada centro de computação. Terminais conectados diretamente à máquina eram 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 escalar que 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.
Há primariamente três limites para a performance dos supercomputadores: a velocidade do processador, o gasto de tempo, 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 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 caminha para o uso de um maior número de processadores, dando maior velocidade ao computador pelo uso desses processadores através do processamento paralelo.
Com a tecnologia VLSI (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 de desempenho pela eliminação do conceito de microprograma. De qualquer maneira estas 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 de rede que possibilitaram a universalização do uso da tecnologia da Computação, fizeram emergir e desenvolver as arquiteturas paralelas de hardware.
A idéia 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 de máquina paralela. Constituído por dois processadores e de três posições de entrada e saída, esse multiprocessador primitivo tanto era capaz de executar dois programas distintos como 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 evoluiram 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 mais nova arquitetura, que determinou a mais recente evolução da Computação foi o resultado da rápida convergência das tecnologias de comunicações de dados, telecomunicações e a própria informática. É a Internet, ou modelo computacional baseado em uma rede, que teve sua origem 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árias outras redes de rádio e satélites. Espalhou-se logo em seguida nos meios acadêmicos e está bastante popularizada.

 

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 Computacional e 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 da Computaçã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 porcessadores específicos a que se destinam 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 indutivas para a verificação de programas e uma técnica envolvendo conjuntos com ordenação bem fundada para provar a terminação de um programa.
Uma extensão das idéias de Floyd foi proposta por C. A. Hoare em 1969. Hoare formulou uma teoria axiomáticana 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 de um programa e não apenas para sua verificação.
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 consequência de erros detectados ao longo desta 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 rigorosa já apresenta um sistema linguí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.
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, que propiciaram a base para o 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 de Knuth 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-completos e 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 de computadores 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 fundamental para 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 problemas poderiam levar a idade do universo para serem processados.

 

A Inteligência Artificial É aquela área da Computação, 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, compreeder de partes específicas de uma linguagem como por exemplo o português, etc.
Os primórdios da Inteligência Artificial (IA) remontam à década de 1940. Começou a predominar nestes anos o movimento ciberneticista, que acreditava entre outras coisas que a atividade humana poderia um 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 ideal de formalizar a noção de procedimento e sobre o que poderia ser feito através de um algoritmo e vieram a tona os trabalhos de Turing, Church, Kleene e Post.
No ano de 1943 foram publicados os trabalhos de Warren McCulloch e Walter Pitts, que propuseram um modelo de neurônios artificiais, 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úmero de 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. A fusão das idéias de Shannon e Boole, junto 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. 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 Walter Pitts tiveram grande sucesso e outros trabalhos apareceram, mas logo foram objeto de fortes 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. 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 linguí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 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 . 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.
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. Allen Newell e Herbert Simon, da Carnegie Mellon 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. Em 1952, 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 ser 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 NP, as limitações das estruturas básicas usadas para gerar comportamento inteligente, como por exemplo os algoritmos de aprendizado por back-propagation.
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. 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. De qualquer maneira surgiram os sistemas especialistas para diagnóstico médico, manipulação de linguagens, etc.
Lembrando o trabalho de H.J. Bremermann, sobre os limites físicos que impedem a construção de um dispositivo com velocidade 'ilimitada', 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 e funciona de maneira algorítmica, as operações mentais tem algo a mais do que as características físicas do cérebro humano. Ou então há processamentos mentais não algorítmicos, e se cai no problema da impossibilidade de uma representação formal disso. 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.

 

A Cibernética O nascimento da cibernética como ciência está associado aos trabalhos de Norbert Wiener (1894-1964). 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. O fenômeno de auto-regulação recebeu o nome de realimentação (feedback).
Wiener alcunhou o termo "cibernética" 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.
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.
Embora a cibernética como ciência não tenha como objetivo o computador, ela criou juntamente com a teoria da informação de Shannon um novo caminho para se 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 um modo que possam ser expressados 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.

Bibliografia

Home Page : http:/www.cic.unb.br/tutores/hci/hcomp/hcomp.html

Data : 14/04/1999 De autoria de : Cléuzio Fonseca Filho

----

Informática Básica

Autores : Eduardo A. Lancharro , Miguel C. Lopez , Salvador P. Fernandez

Tradução : Sérgio MolinaEditora : McGraw-Hill