Você está na página 1de 44

Assine o DeepL Pro para traduzir arquivos maiores.

Mais informações em www.DeepL.com/pro.

CIÊNCIA DA COMPUTAÇÃO: A DISCIPLINA


Peter J. Denning

Agosto de 1997
Revisado em julho de 1999

© Copyright 1999 by Peter J. Denning. Você pode fazer uma cópia exata para
uso pessoal. Qualquer outra cópia ou distribuição requer permissão explícita.
Este artigo será publicado na edição de 2000 da Encyclopedia of Computer
Science (A. Ralston e D. Hemmendinger, Eds).

A profissão de computação é composta por pessoas e instituições que f o r a m


criadas para cuidar das preocupações de outras pessoas no processamento e
coordenação de informações por meio de sistemas de comunicação mundial. A
profissão contém várias especialidades, como ciência da computação, engenharia
da computação, engenharia de software, sistemas de informação, aplicativos
específicos de domínio e sistemas de computação. A disciplina de ciência da
computação é o conjunto de conhecimentos e práticas usados pelos profissionais
de computação em seu trabalho.
Este artigo, com muitas referências cruzadas a outros artigos desta enciclopédia,
discute esses aspectos da profissão e as relações entre eles.

A disciplina da ciência da computação nasceu no início da década de 1940 com


a confluência da teoria dos algoritmos, da lógica matemática e da invenção d o
computador eletrônico com programa armazenado. Exemplos são os trabalhos
de Alan Turing e Kurt Godel na década de 1930 sobre algoritmos e suas
realizações como máquinas ou sistemas de regras, os algoritmos criados por Ada
Lovelace sessenta anos antes, os computadores analógicos construídos por
Vannevar Bush na década de 1920 e o s computadores eletrônicos construídos
por Howard Aiken e Konrad Zuse na década de 1930.
Os escritos de John von Neumann demonstram uma profundidade intelectual
considerável para a disciplina emergente no final da década de 1940. No
início da década de 1960, já havia um corpo de conhecimento suficiente para
merecer os primeiros departamentos acadêmicos e programas de graduação.
Essa disciplina também é chamada de ciência e engenharia da computação,
computação e informática.

O corpo de conhecimento da computação é frequentemente descrito como o


estudo sistemático de processos algorítmicos que descrevem e transformam
informações: sua teoria, análise, projeto, eficiência, implementação e aplicação.
A questão fundamental subjacente a toda a computação é: O que pode ser
automatizado (eficientemente)?
Essa caracterização comum é muito austera. Ela apenas sugere a riqueza total da
disciplina. Ela não chama a atenção para as conexões entre o conhecimento de
computação e as preocupações das pessoas para as quais esse conhecimento
contribui, principalmente as preocupações universais com a confiabilidade, a
dependência, a robustez, a integridade, a segurança e a modificabilidade dos
sistemas de computação. Ele oculta o contexto social e histórico do campo e os
valores das pessoas que o praticam. A discussão a seguir sobre a disciplina
chama a atenção para essas importantes questões mais amplas.

O domínio da ciência da computação

Embora a ciência da computação aborde tanto os processos de informação


naturais quanto os criados pelo homem, o principal esforço da disciplina tem
sido direcionado aos processos criados pelo homem, especialmente os sistemas e
máquinas de processamento de informações. Até meados da década de 1980,
grande parte do trabalho da área se referia aos computadores como contadores de
números, manipuladores de símbolos e processadores de dados, mas o
computador pessoal e a Internet ampliaram o foco para incluir a coordenação e a
comunicação. Grande parte do corpo de conhecimento da computação diz
respeito ao computador digital e aos fenômenos que o cercam
--- A estrutura e a operação dos sistemas de computação, os princípios
subjacentes ao projeto e à programação de sistemas de computação, os métodos
eficazes de uso de computadores para tarefas de processamento de informações e
as caracterizações teóricas de suas propriedades e limitações. O campo está
lidando com novas questões decorrentes de interações com outros campos, onde
os computadores são ferramentas, mas não objetos de estudo, e onde outras
considerações, como transparência, usabilidade, confiabilidade e segurança, são
fundamentais.

A computação também está contribuindo para outros campos, mostrando-lhes


como modelar seus processos como processos de informação. Vários deles têm
se d e s t a c a d o . Os biólogos agora veem o DNA como uma codificação de
informações necessárias para gerar um organismo único; eles buscam algoritmos
que possam construir sequências completas do genoma a partir de fragmentos
espalhados em muitos bancos de dados. Os psicólogos e cientistas cognitivos,
que colaboraram por muitos anos com os cientistas da computação em modelos
de cognição, foram acompanhados por neurocientistas que buscam modelar
sistemas neurais e usar os modelos para explicar o comportamento cognitivo dos
organismos. Os físicos descobriram novos materiais que têm sido usados em
chips cada vez menores e em meios de comunicação cada vez mais rápidos.
Outras disciplinas estão começando a contribuir com ideias para a construção de
novas máquinas, como chips de silício que simulam partes do corpo como olhos
e ouvidos, memórias biológicas, soluções químicas de DNA que computam
problemas combinatórios ou processos quânticos para computação e criptografia
superparalelas.

-2-
Preocupações padrão do campo

O computador digital desempenha o papel central no campo porque é uma


máquina de computação universal: com memória suficiente, um computador
digital é capaz de simular qualquer sistema de processamento de informações,
desde que a tarefa possa ser especificada como um conjunto inequívoco de
instruções. Se essa especificação for possível, a tarefa pode ser representada
como um programa que pode ser armazenado na memória de um computador.
Assim, uma máquina é capaz de explorar e estudar uma enorme variedade de
conceitos, esquemas, simulações e técnicas de processamento de informações.

Todo praticante da disciplina deve ser hábil em quatro áreas básicas: pensamento
algorítmico, representação, programação e design. O pensamento algorítmico é
uma interpretação do mundo em que uma pessoa entende e formula ações em
termos de procedimentos passo a passo que dão resultados inequívocos quando
executados por qualquer pessoa (ou por uma máquina adequada). Ele se
assemelha ao pensamento científico padrão, que busca inventar formas
padronizadas de observação que permitam a qualquer pessoa ver e reproduzir
efeitos físicos.
O pensamento algorítmico enfatiza o procedimento padrão e o pensamento
científico o observador padrão.

A representação trata da maneira como os dados são armazenados para que as


perguntas que serão feitas sobre eles possam ser respondidas com eficiência. Por
e x e m p l o , a lista telefônica padrão é organizada para responder rapidamente à
pergunta: "Qual é o número de telefone atribuído à pessoa N?" Quando
armazenada em u m b a n c o de dados de computador, a máquina vai
rapidamente para a parte alfabética da lista que contém o nome N. Essa não é
uma organização eficiente para a pergunta "A quem é atribuído o número de
telefone N?", pois a lista telefônica padrão teria de ser pesquisada entrada por
entrada até que o número de telefone fornecido fosse encontrado. Uma
organização de dados mais adequada para a segunda pergunta é a lista telefônica
invertida, na qual os números de telefone são listados em sua ordem numérica,
acompanhados dos nomes de seus proprietários. A habilidade de representação
vai além de saber como organizar os dados para recuperação ou processamento
eficiente. Trata-se de inventar maneiras de codificar fenômenos para permitir o
processamento algorítmico. Os exemplos incluem a representação de uma
expressão matemática para que possa ser diferenciada, a representação de um
documento para que "O que você vê [na tela] é o que você obtém [na
impressora]"; a representação de códigos postais manuscritos para
reconhecimento e classificação automáticos pelo Serviço Postal; a representação
da fala codificada para que se possa falar com um computador ou para que o
computador possa falar; a representação de uma peça de motor para que possa
ser mostrada na tela de gráficos e também possa ser fabricada automaticamente.

A programação permite que as pessoas utilizem o pensamento e as


representações algorítmicas e as incorporem em um software que fará com
-3-
que uma máquina

-4-
executar em um determinado modo. Essa habilidade inclui o conhecimento
prático de diferentes linguagens de programação (cada uma com seus próprios
pontos fortes e limitações), ferramentas de desenvolvimento de programas
(que auxiliam nos testes, na depuração, na modularidade e na
compatibilidade) e sistemas operacionais (que controlam as operações internas
dos computadores).

O design conecta as outras três habilidades às preocupações das pessoas, por


meio dos sistemas que as atendem. O design inclui muitas considerações
práticas, como compensações de engenharia, integração de componentes
disponíveis, cumprimento de restrições de tempo e custo e atendimento a
requisitos de segurança e confiabilidade.

Embora se espere que todos na disciplina conheçam essas habilidades, é um erro


equiparar a ciência da computação a qualquer uma d e l a s , p o r exemplo,
programação. Como será mostrado em breve, há muitos aspectos da disciplina que
não envolvem programação, embora envolvam pensamento algorítmico,
representação e design.

Principais subdivisões do campo

O assunto da computação pode ser amplamente dividido em duas partes. A


primeira estuda as tarefas de processamento de informações e suas respectivas
representações de dados. A segunda estuda estruturas, mecanismos e esquemas
de processamento de informações. Dentro do campo, essas duas partes são
chamadas de aplicativos e sistemas, respectivamente. Um dos principais
objetivos da educação em computação é elucidar as relações entre aplicativos e
sistemas de computador.

Os aplicativos de computador podem ser subdivididos em categorias numéricas


e não numéricas. Os aplicativos numéricos são aqueles em que os modelos
matemáticos e os dados numéricos são dominantes; eles são apoiados por
análise numérica, otimização, simulação, bibliotecas matemáticas, geometria
computacional e ciência da computação. As aplicações não numéricas são
aquelas em que os problemas e as informações são representados como
símbolos e regras; elas s ã o a p o i a d a s por inteligência artificial, sistemas
multimídia, processadores de linguagem, gráficos, sistemas de expressão
matemática, sistemas de banco de dados, sistemas de recuperação de
informações e processos combinatórios.

Os sistemas de computador podem ser subdivididos em sistemas de software e


sistemas de hardware. Os sistemas de software estão relacionados a
representações de programas e dados no nível da máquina, esquemas de controle
da execução de programas, compiladores, ambientes de programação,
comunicações e gerenciamento de redes e sistemas operacionais. Os sistemas de
hardware tratam do projeto lógico, da organização da máquina, dos
-5-
processadores, da memória e dos dispositivos em vários níveis.

-6-
tecnologias como VLSI, silício e GaAs. A arquitetura de computadores e a
engenharia de computação se preocupam tanto com o software quanto com o
hardware.

Essas categorias não definem linhas claras de divisão. A maioria das áreas de
aplicativos também se preocupa com problemas de sistemas relacionados, como
linguagens, sistemas operacionais e redes. A maioria das áreas de sistemas
também se preocupa com ambientes de tarefas, práticas da área de aplicativos e
modos de interação humana.

Relacionamento com outras disciplinas

A ciência da computação tem, por tradição, uma relação mais estreita com a
matemática do que com a física, a química e a biologia. Isso se deve ao fato de
que a lógica matemática, os teoremas de Turing e Godel, a álgebra booleana
para o projeto de circuitos e os algoritmos para resolver equações e outras
classes de problemas em matemática desempenharam um papel importante no
desenvolvimento inicial do campo.
Por outro lado, a ciência da computação influenciou fortemente a matemática,
muitos ramos da qual se preocuparam em demonstrar algoritmos para construir
ou identificar uma estrutura matemática ou executar uma função. Em alguns
casos, os computadores foram essenciais para a matemática; por exemplo, a
solução do teorema das quatro cores se baseou em um programa que pesquisou
um grande número finito de casos em busca de contraexemplos. Por esses
motivos, alguns observadores gostam de dizer que a computação é uma ciência
matemática.

O vínculo entre a engenharia e a ciência da computação é muito mais forte do que


entre muitas disciplinas de ciências naturais e suas contrapartes de engenharia
-- Por exemplo, engenharia química e química, projeto de aeronaves e dinâmica de
fluidos, farmácia e biologia e engenharia de materiais e física.
Isso ocorre porque a ciência da computação tem uma forte herança na
engenharia elétrica e porque muitos métodos algorítmicos foram projetados
originalmente para resolver problemas de engenharia. Os exemplos incluem
circuitos eletrônicos, telecomunicações, gráficos de engenharia, projeto de
engenharia, engenharia de sistemas, fabricação e manufatura. Por outro lado, os
computadores se tornaram indispensáveis em muitas disciplinas de engenharia,
por exemplo, simuladores de circuitos, s i m u l a d o r e s d e elementos finitos,
simuladores de campo de fluxo, gráficos, sistemas CAD e CAM, ferramentas
controladas por computador e sistemas de fabricação flexíveis. Por esses
motivos, alguns observadores gostam de dizer que a computação é uma ciência
da engenharia.

Um novo vínculo está se formando entre as ciências físicas e a ciência da


computação. Líderes da física, química, biologia, geologia, sismologia,
astronomia, oceanografia e meteorologia trouxeram à tona alguns problemas
-7-
muito difíceis, do tipo "grande desafio", que exigem cálculos maciços de alta
velocidade, realizados em novas gerações de computadores paralelos de
grande porte.

-8-
computadores com novos tipos de algoritmos. Esses problemas incluem estrutura
cristalina, eletrodinâmica quântica, cálculo de propriedades químicas de
materiais a partir da equação de Schroedinger, simulação de aeronaves em voo,
exploração do espaço, modelagem do clima global, exploração de petróleo,
modelos do universo (cosmologia), previsão do tempo de longo alcance,
previsão de terremotos, fluxo de fluido turbulento e sequenciamento do genoma
humano. Muitos líderes da ciência agora dizem que a computação surgiu como
um terceiro paradigma da ciência, juntando-se à teoria e à experimentação. Por
esses motivos, alguns observadores identificam a computação com a ciência da
computação.

Quem está certo? Todos estão, demonstrando a riqueza da disciplina e sua herança
em ciências e engenharia mais antigas. Além das influências da matemática, da
engenharia e da ciência incorporadas à própria disciplina, a computação interage
estreitamente com muitas outras disciplinas. Aqui estão alguns exemplos
importantes:

• A biblioteconomia se preocupa com o arquivamento de textos e com a


organização de sistemas de armazenamento e recuperação para oferecer
acesso eficiente aos textos. À medida que os sistemas de bibliotecas digitais
forem construídos e conectados à Internet, as bibliotecas deixarão de ser
locais de armazenamento de livros e passarão a ser centros de dados
eletrônicos, garantindo acesso muito além de suas comunidades locais. As
bibliotecas têm uma preocupação especial com o problema da migração de
dados de mídias de armazenamento mais antigas para a s m a i s novas.

• A ciência da administração está preocupada com o uso de modelos de


computador para planejar e prever as condições econômicas dos
negócios. Também se p r e o c u p a com o armazenamento de registros
de negócios em bancos de dados e com a geração de relatórios sobre o
estado dos negócios e sobre as preferências dos clientes a partir desses
registros.

• A economia se preocupa com o uso de modelos de computador para prever as


condições econômicas e avaliar os possíveis efeitos das políticas
macroeconômicas.

• A medicina e a biologia têm usado modelos e algoritmos de computador de


maneiras engenhosas para diagnosticar e tratar doenças. Os métodos
modernos de geração de imagens, como e x a m e s de ressonância magnética,
exames coronarianos e tomografia, têm se valido muito da ciência da
computação. Os pesquisadores médicos usam modelos de computador para
ajudá-los a rastrear mutações de vírus e a restringir o escopo dos
experimentos aos casos com maior probabilidade de resolver a questão da
pesquisa. O projeto Genoma Humano utilizou grandes bancos de dados
distribuídos e novos tipos de algoritmos de correspondência de cadeias d e
c a r a c t e r e s para agregar dezenas de milhares de experimentos de
-9-
sequenciamento de DNA.

• A ciência forense usa modelos de computador e grandes bancos de dados


para identificar evidências e descobrir se outros dados forenses
correspondem às evidências atuais.

-10-
• As ciências psicológicas, cognitivas e comportamentais estão preocupadas
em entender o pensamento e as emoções humanas. Elas usam modelos de
computador para obter insights sobre a operação do cérebro humano e dos
sistemas nervosos e para projetar intervenções eficazes nos problemas
humanos.

• A linguística se preocupa com o uso de computadores para reconhecer a


fala, traduzir entre idiomas e entender o papel da linguagem nos assuntos
humanos.

• A filosofia se preocupa com a forma como as pessoas adquirem


conhecimento, criam realidades sociais e agem de forma moral e ética. Os
filósofos contribuíram muito para os debates sobre se as máquinas podem
pensar ou se os modelos formais são suficientes para sistemas de software
confiáveis. A subdisciplina da teoria dos atos de fala contribuiu muito para
nossa compreensão de como as pessoas realizam o trabalho nas
organizações e ajudou a dar origem ao setor de fluxo de trabalho.
Recentemente, as tecnologias de "realidades virtuais" reacenderam os
debates sobre a natureza da realidade e os mundos em que as pessoas vivem.

• As ciências humanas começaram a usar extensivamente o computador para


correlacionar e pesquisar artefatos históricos que podem ser representados
digitalmente. Um dos exemplos mais coloridos é o uso de computadores para
determinar a autoria de textos históricos, como as peças de Shakespeare.

Essa lista não é exaustiva. O número de contatos entre a computação e outras


disciplinas cresce rapidamente a cada ano. Alguns dos trabalhos mais inovadores
estão sendo feitos por pessoas que conhecem outra disciplina e a computação ao
mesmo tempo.

Processos

No início da seção anterior, observamos que a matemática, a ciência e a


engenharia têm relações históricas especiais com a computação. Essas raízes se
manifestam em três paradigmas ou processos principais dentro do campo:

• TEORIA: construção de estruturas conceituais e notações para


compreender as relações entre objetos em um domínio e as consequências
lógicas de axiomas e leis.

• EXPERIMENTAÇÃO: explorar modelos de sistemas e arquiteturas em


determinados domínios de aplicativos e testar se esses modelos podem

-11-
prever novos comportamentos com precisão. (Esse paradigma às vezes é
chamado de
<I>abstração</I> por cientistas da computação).

• PROJETO: construção de sistemas de computador que dão suporte ao


trabalho em determinadas organizações ou domínios de aplicativos.

Esses três paradigmas interagem constantemente no trabalho dos cientistas da


computação; de fato, a interação faz parte do vigor da área. Muitas controvérsias
no campo estão associadas ao fato de alguém de um paradigma criticar o
trabalho de alguém de outro paradigma sem estar ciente da diferença.

Em áreas de tecnologia em rápido desenvolvimento, como bancos de dados,


interfaces humanas e sistemas baseados na Web, os teóricos têm como objetivo
principal colocar ordem em uma massa de experiência que se acumula
rapidamente por meio de amplas estruturas conceituais, taxonomias e métodos
analíticos. Em áreas maduras, c o m o complexidade computacional, algoritmos,
estruturas de dados, autômatos, linguagens formais, teoria da comutação, teoria
dos gráficos, combinatória e linguagens formais, os teóricos se concentram em
análises mais profundas e abrangentes dos fenômenos para os quais existem
modelos formais. Com algumas exceções notáveis, incluindo design lógico,
gráficos, análise de algoritmos e compiladores, a teoria t e v e u m impacto
limitado sobre os problemas complexos de sistemas e aplicativos práticos.

Os experimentadores constroem modelos de fenômenos ou de possíveis


sistemas; os modelos geralmente suprimem os detalhes e permitem previsões
rápidas. Exemplos são a medição de programas e sistemas, a validação de
hipóteses, a criação de protótipos para estender as abstrações à prática, a
simulação lógica, as simulações de sistemas e de processos físicos, o teste de
protocolos, a análise de desempenho do sistema e as comparações de diferentes
arquiteturas. A ciência da computação experimental depende muito de
laboratórios. Com frequência, ela estimula novos desenvolvimentos no design e
no uso de computadores. Mais atenção está sendo dada à ciência da computação
experimental porque a intuição humana geralmente não funciona bem com
sistemas complexos.

Os projetistas se preocupam em criar sistemas que atendam a especificações


claras e satisfaçam seus clientes. Eles se orgulham de muitas realizações
significativas, como sistemas de desenvolvimento de programas, simuladores,
sistemas de design de microchip, VLSI, CAD, CAM, gráficos, bancos de dados
e supercomputadores. Os projetos mais bem-sucedidos ocorreram com hardware
e pacotes de software autônomos, sistemas para os quais especificações
funcionais precisas podem ser fornecidas desde o início. Os projetos menos bem-
sucedidos têm sido os grandes sistemas de software, muitos dos quais não são
confiáveis, não são seguros, são muito caros, muito difíceis de mudar e muito
complexos para serem compreendidos. Muitos projetistas estão recorrendo a
outros domínios, incluindo análise organizacional, fluxo de trabalho,
antropologia e etnografia, para ajudá-los a entender como um sistema irá
-12-
interagir com as práticas das pessoas que o utilizam.

-13-
Além dos três processos e dos especialistas que os praticam, a disciplina de
computação tem uma série de preocupações amplas que atingem todos o s
subcampos. As principais são a computação paralela e distribuída, a análise de
desempenho, a confiabilidade, a segurança, a proteção e a ética.

Subáreas do campo

A ciência da computação pode ser dividida em várias subáreas coerentes, cada


uma com questões teóricas, experimentais e de design substanciais, e cada uma
com sua própria versão das preocupações compartilhadas. Foram estabelecidos
setores e instituições importantes em cada uma dessas áreas. O gráfico abaixo
descreve a disciplina como uma matriz com 11 subáreas como linhas e os 3
processos como colunas. Cada uma das caixas pode ser preenchida com
descrições detalhadas dessa categoria de atividades e realizações da subárea. Os
limites entre as áreas e os processos costumam ser imprecisos; às vezes, é uma
questão de julgamento pessoal para definir a posição d e determinados itens.
Colunas adicionais podem ser acrescentadas para representar as preocupações
compartilhadas, e suas caixas podem ser preenchidas da mesma forma.

A discussão a seguir é uma visão geral do conteúdo das caixas d a matriz, com
profundidade suficiente para revelar a linguagem e o vocabulário da ciência da
computação. Muito mais informações sobre essas áreas podem ser encontradas
nos artigos individuais deste volume e no Handbook of Computer Science and
Engineering (Tucker, 1996). A última área, a bioinformática, é uma área
emergente.

Teoria Abstração Design


1 Algoritmos e estruturas de dados
2 Linguagens de programação
3 Arquitetura
4 Sistemas operacionais e redes
5 Engenharia de software
6 Bancos de dados e recuperação de
informações
7 Inteligência Artificial e Robótica
8 Gráficos
9 Interação humano-computador
10 Ciência da computação
11 Informática organizacional
12 Bioinformática

1 Algoritmos e estruturas de dados

-14-
A teoria dos algoritmos engloba a teoria da computabilidade, a t e o r i a d a
complexidade computacional, a t e o r i a d a concorrência, a t e o r i a d o s
algoritmos probabilísticos, a teoria dos bancos de dados, os algoritmos
aleatórios, o s a l g o r i t m o s d e correspondência de padrões, os algoritmos
de gráficos e redes, os algoritmos algébricos, a otimização combinatória e a
criptografia. Ela é apoiada pela matemática discreta (teoria dos gráficos,
funções recursivas, relações de recorrência, combinatória), cálculo, indução,
lógica de predicados, lógica temporal (um cálculo de eventos dependentes do
tempo), semântica, probabilidade e estatística.

A experimentação tem sido muito útil com algoritmos e heurísticas complexos


para os quais não se c o n h e c e nenhuma análise teórica viável. Os algoritmos
podem ser avaliados aplicando-os a conjuntos de casos de teste e analisando
seu desempenho. Os testes produziram caracterizações valiosas de
determinados métodos, como dividir e conquistar, algoritmos gulosos,
programação dinâmica, interpretadores de máquinas de estado finito,
interpretadores de máquinas de pilha, buscas heurísticas e algoritmos
aleatórios. Os testes p r o d u z i r a m percepções significativas sobre o
desempenho de algoritmos paralelos e distribuídos.

Muitos algoritmos úteis e práticos foram projetados e colocados em bibliotecas de


programas - por exemplo, software matemático, pesquisa, classificação, geração
de números aleatórios, correspondência de padrões textuais, hashing, gráficos,
árvores, protocolos de rede de comunicação, atualizações de dados distribuídos,
semáforos, detectores de deadlock, sincronizadores, gerenciadores de
armazenamento, listas, tabelas e algoritmos de paginação. Muitos resultados
teóricos foram traduzidos em sistemas úteis e práticos, como o sistema de
criptografia de chave pública RSA, compiladores com qualidade de produção e
layout de circuitos VLSI.

2 Linguagens de programação

Essa área lida com notações para máquinas virtuais que executam algoritmos e
com notações para algoritmos e dados; os conjuntos de sequências de símbolos
gerados por essas notações são chamados de linguagens. Ela também trata de
traduções eficientes de linguagens de alto nível para códigos de máquina.
As perguntas fundamentais incluem: Quais são as possíveis organizações da
máquina virtual apresentadas pela linguagem (tipos de dados, operações,
estruturas de controle, mecanismos para a introdução de novos tipos e
operações)? Como essas abstrações são implementadas nos computadores?
Que notação (sintaxe) pode ser usada de forma eficaz e eficiente para
especificar o que o computador deve fazer?
Como as funções (semântica) estão associadas às notações de linguagem? Como
as máquinas podem traduzir entre idiomas?

A teoria das linguagens de programação estuda modelos de máquinas que geram


-15-
e traduzem linguagens e de gramáticas para expressar cadeias de caracteres
válidas

-16-
nas linguagens. Os exemplos incluem modelos de linguagens formais e
autômatos, máquinas de Turing, sistemas Post, lambda-calculus, pi-calculus e
lógica proposicional. A teoria trata da semântica, o estudo das relações entre as
cadeias de caracteres da linguagem e os estados das máquinas virtuais
subjacentes. Ela lida com tipos, que são classes de objetos. A matemática
relacionada é a lógica de predicados, a lógica temporal, a álgebra moderna e a
indução matemática.

Os modeladores desenvolveram classificações de linguagens com base em seus


modelos sintáticos e semânticos, por exemplo, tipagem estática, tipagem
dinâmica, funcional, procedural, orientada a objetos, especificação lógica,
passagem de mensagens e fluxo de dados. Eles desenvolveram classificações
por aplicativo, por exemplo, processamento de dados comerciais, simulação,
processamento de listas e gráficos. Eles desenvolveram classificações por
estrutura funcional, por exemplo, hierarquias de procedimentos, composição
funcional, tipos de dados abstratos e processos sequenciais de comunicação.
Desenvolveram modelos de implementação abstratos para cada tipo principal
de linguagem, incluindo imperativa, orientada a objetos, lógica e restrição,
simultânea e distribuída.

Os projetistas de linguagens de programação desenvolveram muitas linguagens


práticas, incluindo linguagens procedimentais (Cobol, Fortran, Algol, Pascal,
Ada e C), linguagens orientadas a objetos (Clu, Smalltalk, C++, Eiffel, Java),
linguagens funcionais (Lisp, ML, Haskell), linguagens de fluxo de dados
(Sisal, Val, Id Nouveau), lógica (Prolog), cadeia de caracteres (Snobol, Icon) e
concorrência (Concurrent Pascal, Occam, SR, Modula-3).

Eles implementaram modelos de tempo de execução, modelos de execução


estáticos e dinâmicos, verificação de tipos, armazenamento e alocação de
registros, compiladores, compiladores cruzados, intérpretes, analisadores que
encontram paralelismo em programas e ambientes de programação que auxiliam
os usuários com ferramentas para verificação eficiente de erros sintáticos e
semânticos, criação de perfis, depuração e rastreamento. Uma das maiores
conquistas foram os programas que utilizam a descrição de uma linguagem e
produzem automaticamente um compilador que traduzirá os programas d e s s a
linguagem em código de máquina (exemplos incluem YACC e LEX em
ambientes Unix); compiladores muito eficientes foram criados dessa forma.
As linguagens de programação são amplamente usadas em domínios de
aplicativos para criar tabelas, gráficos, fórmulas químicas, planilhas, equações,
entrada e saída e consultas de dados; em cada caso, o designer cria uma
minilinguagem e um analisador.

3 Arquitetura

Essa área lida com métodos de organização de hardware (e software associado)


em sistemas eficientes e confiáveis. As questões fundamentais incluem: Quais
são os bons métodos de implementação de processadores, memória e
-17-
comunicação em uma máquina? Como projetar e controlar grandes sistemas de
computação e demonstrar de forma convincente que eles funcionam como
pretendido, apesar de erros e falhas? Que tipos de arquiteturas podem incorporar
com eficiência muitos elementos de processamento que podem trabalhar
simultaneamente em uma computação? Como é possível medir o desempenho?
Os dispositivos de hardware podem imitar sensores humanos selecionados, como
olhos e ouvidos?

A teoria da arquitetura inclui: lógica digital, álgebra booleana, teoria da


codificação e teoria das máquinas de estado finito. A matemática de apoio
i n c l u i estatística, probabilidade, teoria das filas, teoria da confiabilidade,
matemática discreta, teoria dos números e aritmética em diferentes sistemas
numéricos.

Os arquitetos de computação são ávidos experimentadores. Seus modelos


favoritos incluem máquinas de estado finito, métodos gerais de sintetização de
sistemas a partir de componentes básicos, modelos de circuitos e máquinas de
estado finito para funções aritméticas de computação em campos finitos,
modelos de caminho de dados e estruturas de controle, otimização de conjuntos
de instruções para vários modelos e cargas de trabalho, confiabilidade de
hardware, espaço, tempo e compensações organizacionais no projeto de
dispositivos VLSI, organização de máquinas para vários modelos
computacionais e identificação de "níveis de abstração" nos quais o projeto pode
ser visualizado.
-- por exemplo, configuração, programa, conjunto de instruções, registros e
portas. Os arquitetos usam simuladores com frequência para avaliar as
compensações do projeto e determinar as melhores proporções de memória,
capacidade de processamento e largura de banda para um dispositivo. Eles têm
discursos bem desenvolvidos para barramentos (canais de dados entre
dispositivos), sistemas de memória, aritmética de computador, entrada e saída e
máquinas paralelas.

A arquitetura de computadores está repleta de projetos bem-sucedidos. Eles


incluem unidades de função aritmética, cache, a chamada máquina de von
Neumann, RISCs (Reduced Instruction Set Computers), CISCs (Complex
Instruction Set Computers), métodos eficientes de armazenamento e registro de
informações e de detecção e correção de erros; recuperação de erros, sistemas
CAD (Computer Aided Design) e simulações lógicas para o projeto de circuitos
VLSI, programas de redução para layout e diagnóstico de falhas, compiladores
de silício (compiladores que produzem instruções para a fabricação de um chip
de silício). Eles também incluem os principais sistemas, como fluxo de dados,
árvore, Lisp, hipercubo, vetor e multiprocessadores; e supercomputadores, como
as máquinas Cray, Cyber e IBM. Os arquitetos colaboraram com outros
cientistas para projetar protótipos de dispositivos que podem imitar os sentidos
humanos.

4 Sistemas operacionais e redes


-18-
Essa área lida com mecanismos de controle que permitem que vários recursos
sejam coordenados com eficiência em cálculos distribuídos em muitos sistemas
de computadores conectados por redes locais e de longa distância. As questões
fundamentais incluem: Em cada nível de granularidade temporal (por exemplo,
microssegundo, minuto,

-19-
hora ou dia) na operação de um sistema de computador, quais são os objetos
visíveis e as operações permitidas sobre eles? Para cada classe de recurso
(objetos visíveis em algum nível), qual é o conjunto mínimo de operações que
permite seu uso eficaz? Como as interfaces podem ser organizadas para que os
usuários lidem apenas com versões abstratas dos recursos e não com detalhes
físicos do hardware? Quais são as estratégias de controle eficazes para
agendamento de tarefas, gerenciamento de memória, comunicações, acesso a
recursos de software, comunicação entre tarefas simultâneas, confiabilidade e
segurança? Quais são os princípios pelos quais os sistemas podem ser ampliados
em sua função por meio da aplicação repetida de um pequeno número de regras
de construção? Como as computações distribuídas devem ser organizadas, sendo
que os detalhes dos protocolos de rede, os locais dos hosts, as larguras de banda
e a nomeação de recursos são praticamente invisíveis? Como um sistema
operacional distribuído pode ser um ambiente de preparação e execução de
programas?

Os principais elementos da teoria em sistemas operacionais incluem: teoria da


simultaneidade (sincronização, determinação e deadlocks); teoria do
agendamento; comportamento do programa e teoria do gerenciamento de
memória; teoria do fluxo de rede; modelagem e análise de desempenho. A
matemática de apoio inclui empacotamento de caixas, probabilidade, teoria das
filas, redes de filas, teoria da comunicação e da informação, lógica temporal e
criptografia.

Assim como os arquitetos, os projetistas de sistemas operacionais são ávidos


modeladores. Seus principais modelos incluem: princípios de abstração e
ocultação de informações; vinculação de objetos definidos pelo usuário a
estruturas computacionais internas; gerenciamento de processos e threads;
gerenciamento de memória; agendamento de tarefas; armazenamento
secundário e gerenciamento de arquivos; análise de desempenho; computação
distribuída; chamadas de procedimentos remotos; sistemas em tempo real;
computação segura; e rede, incluindo protocolos em camadas, protocolos da
Internet, nomenclatura, uso de recursos remotos, serviços de ajuda e protocolos
de roteamento de rede local, como token- passing e barramentos
compartilhados.

Os sistemas operacionais e as redes sempre foram, antes de tudo, um campo de


design. Esse campo produziu métodos padrão eficientes, incluindo sistemas de
compartilhamento de tempo, alocadores automáticos de armazenamento,
agendadores multinível, gerenciadores de memória e sistemas de arquivos
hierárquicos. Produziu sistemas operacionais bem conhecidos, como Unix,
Multics, Mach, VMS, MacOS, OS/2, MS-DOS e Windows NT. Produziu
utilitários padrão, incluindo editores, formatadores de documentos,
compiladores, vinculadores e drivers de dispositivos. Produziu abordagens
padrão para arquivos e sistemas de arquivos. Produziu pacotes de modelagem e
simulação de redes de enfileiramento para avaliar o desempenho de sistemas
reais; arquiteturas de rede como Ethernet, FDDI, redes token ring, SNA e
DECNET. Produziu técnicas de protocolo incorporadas no conjunto de
-20-
protocolos do Departamento de Defesa dos EUA (TCP/IP), protocolos de
circuito virtual, Internet, conferência em tempo real e X.25. Dedicou
considerável atenção às questões de segurança e privacidade na Internet.

-21-
5 Engenharia de software

Essa área lida com o design de programas e grandes sistemas de software que
atendem às especificações e são seguros, protegidos, confiáveis e confiáveis.
As perguntas fundamentais incluem: Quais são os princípios por trás d o
desenvolvimento de programas e sistemas de programação? Como se faz um
mapa das ações recorrentes que as pessoas realizam em um domínio e se usa o
mapa para especificar um sistema de componentes de hardware e software para
dar suporte a essas ações? Como provar que um programa ou sistema atende às
suas especificações? Como desenvolver especificações que não omitam casos
importantes e que possam ser analisadas quanto à segurança? Por quais
processos os sistemas de software evoluem por meio de diferentes gerações?
Por quais processos o software pode ser projetado para ser compreensível e
modificável? Quais métodos reduzem a complexidade no projeto de sistemas de
software muito grandes?

Três tipos de teoria são usados na engenharia de software: verificação e prova de


programas (que trata de formas de provas e algoritmos eficientes para construí-
las), lógica temporal (que é o cálculo de predicados estendido para permitir
declarações sobre eventos ordenados no tempo) e teoria da confiabilidade (que
relaciona a probabilidade geral de falha de um sistema às probabilidades de falha
de seus componentes ao longo do tempo). A matemática de apoio inclui o
cálculo de predicados e a semântica axiomática. A engenharia de software
também se baseia na teoria da psicologia cognitiva.

Os modelos e as medições desempenham funções importantes na engenharia


de software. Há nove categorias principais. (1) Especificação das funções de
entrada e saída de um sistema: transformadores de predicados, cálculos de
programação, tipos de dados abstratos, notações orientadas a objetos e
notações axiomáticas Floyd-Hoare.
(2) O processo pelo qual um programador constrói software: refinamento
gradual, design modular, compilação separada, ocultação de informações,
fluxo de dados, modelos de ciclo de vida de software, camadas de abstração.
(3) Processos de desenvolvimento de sistemas de software: orientado por
especificação, e v o l u t i v o , iterativo, formal e de sala limpa. (4) Processos
para auxiliar os programadores a evitar ou remover bugs em seus programas:
editores de texto orientados por sintaxe, rastreadores de execução de
programas em etapas, ambientes de programação e ferramentas de software.
(5) Métodos para melhorar a confiabilidade dos programas: tolerância a falhas de
software, programação de N versões, redundância de múltiplas vias,
checkpointing, recuperação, segurança do fluxo de informações, testes e garantia
de qualidade. (6) Medição e avaliação de programas. (7) Combinação de
sistemas de software com arquiteturas de máquinas (os computadores de alto
desempenho mais especializados não são de uso geral). (8) Estratégias
organizacionais e gerenciamento de projetos. (9) Ferramentas e ambientes de
software.

-22-
Assim como os sistemas operacionais, a engenharia de software é principalmente
uma especialidade de design. Muitos dos modelos mencionados acima têm sido
usados na prática sob determinadas

-23-
designações. Exemplos de linguagens de especificação incluem PSL2 e IMA JO.
Os projetos de software usam sistemas de controle de versão para rastrear as
versões d o s módulos do sistema emergente; exemplos são RCS e SCCS.
Muitos editores dirigidos por sintaxe, editores de linha, editores de tela e
ambientes de programação foram implementados; exemplos são o Turbo C e o
Turbo Pascal.
As metodologias para organizar o processo de desenvolvimento de software
t ê m nomes genéricos como HDM ou os nomes de seus inventores (por
exemplo, Dijkstra, Jackson, Mills, Yourdon, Weinberg). Essas metodologias de
processo incorporam procedimentos para testes, garantia de qualidade e
gerenciamento geral do projeto (por exemplo, passo a passo, simulação manual,
verificação de interface, enumerações de caminhos de programas para conjuntos
de testes e rastreamento de eventos). O Departamento de Defesa dos EUA
promulgou critérios e métodos de teste adicionais para a computação segura.
Muitas ferramentas de software foram criadas para auxiliar no desenvolvimento,
na medição, na criação de perfil, na formatação de texto e na depuração de
programas. Um número significativo de designers está preocupado com a
interface do usuário; especialmente em sistemas dos quais dependem vidas
humanas, eles procuram organizar a interface do usuário para minimizar a
possibilidade de má interpretação humana, especialmente em momentos de
estresse. O crescimento da Internet para mais de 20 milhões de computadores
em todo o mundo em 1998 gerou uma nova especialidade no projeto de
computações com processos de componentes em computadores individuais em
todo o mundo; ela tem vários nomes, como programação em grande escala,
composição de programas distribuídos e megaprogramação.

6 Sistemas de banco de dados e recuperação de informações

Essa área lida com a organização de grandes conjuntos de dados persistentes e


compartilhados para consulta e atualização eficientes. O termo banco de dados é
usado para uma coleção de registros que podem ser atualizados e consultados de
várias maneiras. O termo sistema de r e c u p e r a ç ã o é usado para uma coleção
de documentos que serão pesquisados e correlacionados; as atualizações e
modificações de documentos não são frequentes em um sistema de recuperação.
As perguntas fundamentais incluem: Quais modelos são úteis para representar
elementos de dados e seus relacionamentos? Como as operações básicas, como
armazenar, localizar, combinar e recuperar, podem ser combinadas em
transações eficazes? Como o usuário pode interagir de forma eficaz com essas
transações? Como as consultas de alto nível podem ser traduzidas em
programas de alto desempenho? Quais arquiteturas de máquina levam a uma
recuperação e atualização eficientes? Como os dados podem ser protegidos
contra acesso, divulgação ou destruição não autorizados? Como proteger
grandes bancos de dados contra inconsistências devido a atualizações
simultâneas? Como a proteção e o desempenho podem ser alcançados quando
os dados são distribuídos entre várias máquinas? Como o texto pode ser
indexado e classificado para uma recuperação eficiente?

-24-
Várias teorias foram criadas e usadas para estudar e projetar sistemas de
recuperação de informações e bancos de dados. Elas incluem álgebra relacional e
cálculo relacional, teoria da simultaneidade, transações serializáveis, deadlock

-25-
prevenção, atualizações sincronizadas, inferência estatística, inferência baseada
em regras, classificação, pesquisa, indexação, análise de desempenho e
criptografia, no que se refere a garantir a privacidade das informações e a
autenticação das pessoas que as armazenam ou tentam recuperá-las.

Os modelos e as medições associadas foram usados de pelo menos nove maneiras.


(1) Modelos de dados para a estrutura lógica de dados e relações entre
elementos de dados: baseados em objetos, baseados em registros e objeto-
relacionais. (2) Armazenamento de arquivos para recuperação rápida,
principalmente índices, árvores, inversões e armazenamentos associativos. (3)
Métodos de acesso. (4) Otimização de consultas. (5) Controle de simultaneidade
e recuperação. (6) Integridade (consistência) de um banco de dados sob
atualizações repetidas, incluindo atualizações simultâneas de várias cópias. (7)
Segurança e privacidade do banco de dados, incluindo proteção contra
divulgação ou alteração não autorizada de dados e minimização da inferência
estatística. (8) Máquinas virtuais associadas a linguagens de consulta (por
exemplo, texto, dados espaciais, figuras, imagens, conjuntos de regras). (9)
Integração de hipertexto e multimídia de diferentes tipos de dados (texto, vídeo,
gráficos, voz).

Existe um rico conjunto de técnicas práticas de design para o projetista de bancos


de dados ou sistemas de recuperação. Elas incluem abordagens gerais para
bancos de dados relacionais, hierárquicos, de rede, distribuídos e sistemas de
recuperação. Elas são usadas em sistemas de bancos de dados comerciais, como
Ingres, System R, dBase, Sybase e DB-2, e em sistemas de recuperação
comerciais, como Lexis, Osiris e Medline, e em sistemas de hipertexto
comerciais, como NLS, NoteCards, HyperCard, SuperCard, Intermedia e
Xanadu. Muitas técnicas foram criadas para sistemas de bancos de dados seguros
nos quais os dados são marcados por nível de classificação e compartimento e os
usuários não podem ver dados inconsistentes com seus próprios níveis de
classificação e compartimentos. Existem métodos padrão de arquivamento de
conjuntos de dados em mídias de longo prazo, como fita e disco óptico, além de
métodos de migração de grandes conjuntos de dados de mídias mais antigas para
mídias mais novas. Mídias de grande capacidade, como CD/ROM, tornaram-se
suficientemente baratas para que muitos produtos de informação comerciais,
como revisões de literatura, artigos selecionados e extratos de livros e revistas de
software, estejam disponíveis.

7 Inteligência Artificial e Robótica

Essa área lida com a modelagem da cognição animal e humana, com a intenção
final de criar componentes de máquinas que as imitem ou aumentem. Os
comportamentos de interesse incluem o reconhecimento de sinais sensoriais,
sons, imagens e padrões; aprendizado; raciocínio; solução de problemas;
planejamento; e compreensão da linguagem. As perguntas fundamentais
incluem: Quais são os modelos básicos de cognição e como as máquinas podem
simulá-los? Como o conhecimento do mundo p o d e ser representado e
-26-
organizado para permitir que as máquinas ajam de forma razoável? Até que
ponto a inteligência é descrita por busca, heurística, avaliação de regras,
inferência, dedução, associação e computação de padrões?

-27-
Quais são os limites que restringem as máquinas que usam esses métodos?
Qual é a relação entre a inteligência humana e a inteligência das máquinas?
Como os dados sensoriais e motores são codificados, agrupados e associados?
Como as máquinas podem ser organizadas para adquirir novos recursos de ação
(aprendizado), fazer descobertas e funcionar bem apesar de dados incompletos,
ambíguos ou errôneos? Como as máquinas podem entender as linguagens
naturais, que são repletas de ambiguidades, paráfrases, elipses, alusões,
contexto, suposições não ditas e interpretações dependentes do ouvinte? Como
os robôs podem ver, ouvir, falar, planejar e agir?

Nove ramos principais de teoria foram desenvolvidos para a inteligência artificial.


(1) Sistemas lógicos para raciocínio mecânico, como lógica de primeira ordem,
lógica difusa, lógica temporal, lógica não monotônica, lógica probabilística,
dedução e indução. (2) Modelos formais para representar e traduzir conhecimento,
incluindo objetos, gramáticas, regras, funções, quadros e redes semânticas.
(3) Métodos para pesquisar os espaços muito grandes que surgem ao enumerar
soluções para problemas; eles incluem branch-and-bound, alfa-beta, poda de
árvore e algoritmos genéticos. (4) Teorias de aprendizado, incluindo inferência,
dedução, analogia, abdução, generalização, especialização, abstração,
concretização, determinação e dependência mútua. (5) As redes neurais tratam
de estruturas de interconexão neural, computando respostas a estímulos,
armazenando e recuperando padrões e formando classificações e abstrações.
(6) Visão computacional. (7) Reconhecimento e compreensão de fala. (8)
Tradução de linguagem natural. (9) Sistemas de robôs. Todos os ramos da
teoria se baseiam fortemente nas disciplinas relacionadas de mecânica
estrutural, teoria dos gráficos, linguagens formais, linguística, lógica,
probabilidade, filosofia e psicologia.

Modelos e medições têm sido amplamente utilizados em vários subdomínios de


sistemas inteligentes e máquinas de aprendizado. (1) Os modelos de
representação do conhecimento incluem regras, quadros, lógica, redes
semânticas, redes neurais, dedução, inferência para frente e para trás, herança,
instanciação, resolução, ativação de propagação, p r o p a g a ç ã o d e erros para
trás.
(2) Os modelos de solução de problemas incluem raciocínio baseado em casos,
r a c i o c í n i o qualitativo, raciocínio baseado em restrições e oportunista,
raciocínio distribuído e cooperativo e planejamento não linear. (3) A heurística
para pesquisar grandes espaços de alternativas está no centro de máquinas
eficientes para damas, xadrez e outros jogos de estratégia. A busca heurística
deu origem a um novo campo chamado Computação Evolutiva, que são
métodos inspirados n o princípio biológico da evolução de uma população de
candidatos na qual os melhores se tornam predominantes. O mais conhecido
entre eles são os algoritmos genéticos. (4) Os modelos de aprendizado
aprimoraram a capacidade das máquinas de resolver problemas; eles incluem a
aquisição de conhecimento a partir de dados ou especialistas, regras de
aprendizado a partir de exemplos, revisão de teorias, descoberta de padrões e
leis quantitativas em conjuntos de dados, classificação e agrupamento de dados
e modelos de aprendizado com várias estratégias. (5) Os modelos de
-28-
compreensão de linguagem ajudaram a representar formas sintáticas e
semânticas, encontrar respostas para

-29-
perguntas e traduzir entre idiomas. (6) Os modelos de fala são usados para
produzir a fala (com bons resultados) e reconhecer a fala (ainda relativamente
primitiva). (6) Os modelos de visão oferecem algoritmos para localizar e
reconhecer objetos em campos visuais. (7) Os modelos de redes neurais foram
testados extensivamente para avaliar sua capacidade de armazenar padrões,
remover o ruído dos padrões, recuperar padrões, generalizar padrões e armazenar
um grande número de padrões sem perda ou interferência. (8) Modelos de
memória humana armazenam grandes padrões e formam associações entre eles.
(9) Robôs de conhecimento ("knowbots") foram propostos para a Internet para
fazer descobertas, classificar objetos ou deduzir regras de descrição para grandes
conjuntos de dados e dados de séries temporais.

A inteligência artificial promoveu muitas implementações e seus próprios


princípios de design. (1) A programação lógica foi realizada em linguagens,
principalmente o Prolog, com base na comprovação eficiente de teoremas,
resolução de regras e avaliação de regras. (2) Os sistemas especializados, que
usam um mecanismo de inferência para processar regras armazenadas em uma
base de conhecimento para deduzir e propor ações, foram b e m - s u c e d i d o s
em vários domínios restritos e bem focados, como diagnóstico médico,
planejamento, reparo de máquinas, configuração de sistemas e previsão
financeira. (3) Os ambientes de engenharia do conhecimento podem ser
instanciados em sistemas especializados quando suas bases de conhecimento são
carregadas com regras e fatos para o domínio em que serão usados. (4) Os
sistemas de resolução de problemas em linguagem natural (por exemplo, Margie
e SHRDLU) foram bem-sucedidos em casos limitados. (5) Jogos de estratégia,
especialmente damas e xadrez, são jogados por máquinas em níveis de campeões
mundiais. (6) As redes neurais têm sido usadas para reconhecimento de padrões,
reconhecimento de fala, reconhecimento de visão, simulação da memória
humana de longo prazo e avaliação da competência de estudantes. (7) A lógica
difusa foi implementada em chips que produzem sistemas de controle em
aparelhos comuns, como condicionadores de ar e máquinas de lavar. (8) Os
sintetizadores de fala estão amplamente disponíveis. (9) Os reconhecedores de
fala estão se tornando comuns e já podem funcionar bem com a fala contínua de
um indivíduo
em cuja voz o sistema foi treinado. (10) Os robôs são padrão nas linhas de
montagem, nos rovers de Marte e até mesmo em tarefas de rotina, como limpeza
doméstica ou manutenção de laboratórios. Insetos-robôs foram criados como
modelos de máquinas ambulantes que podem realizar tarefas simples, como
limpeza e exploração. (11) Os algoritmos genéticos têm sido usados em diversas
aplicações.

8 Gráficos

Essa área se preocupa com os processos de representação de objetos físicos e


conceituais e seus movimentos visualmente em uma tela de computador 2D ou
em um holograma 3D. As perguntas fundamentais incluem: Quais são os
métodos eficientes de representação de objetos e de criação automática de
-30-
imagens para visualização? Para projetar movimentos de objetos complexos na
tela de visualização em tempo real?
Para exibir conjuntos de dados para ajudar na compreensão humana? Para
realidades virtuais --

-31-
ou seja, simulações de situações reais que são difíceis de distinguir da
realidade?

A teoria da computação gráfica se baseia muito na geometria computacional.


Ela estuda algoritmos para projetar objetos na superfície de visualização,
remover linhas ocultas da projeção, rastreamento de raios, sombreamento de
superfícies, exibição de reflexos e renderização de superfícies translúcidas. Ela
produziu novos algoritmos para computação de formas geométricas. Ela usou a
teoria do caos para criar algoritmos eficientes para gerar estruturas complexas
que se assemelham a formações naturais, como árvores, litorais, nuvens e
montanhas. A teoria dos gráficos também usa a teoria das cores, que relaciona
as cores formadas pela luz nas telas às cores formadas pelos pigmentos nas
superfícies impressas. A teoria da amostragem é usada para reconstruir imagens
a partir de dados com ruído, filtrar efeitos indesejados e remover padrões
espúrios causados pela exibição de dados amostrados em telas orientadas por
pixels. As áreas de apoio importantes são a análise de Fourier, a teoria da
amostragem, a álgebra linear, a teoria dos gráficos, os autômatos, a física, a
análise, os sistemas não lineares e o caos.

Os modelos têm sido essenciais para os sistemas gráficos práticos. Estudos


extensivos produziram algoritmos eficientes para renderização e exibição de
imagens, incluindo métodos de suavização, s o m b r e a m e n t o , remoção de
linhas ocultas, traçado de raios, superfícies ocultas, superfícies translúcidas,
sombras, iluminação, bordas, mapas de cores, representação por splines,
renderização, texturização, antialiasing, coerência, fractais, animação e
representação de imagens como hierarquias de objetos.
Os modelos para realidade virtual e simulação interativa distribuída estão
entre as adições mais recentes.

Todos os modelos mencionados acima foram implementados e muitos estão


disponíveis comercialmente. Por exemplo, os algoritmos gráficos estão
disponíveis nas bibliotecas gráficas comumente distribuídas com estações de
trabalho gráficas. Editores de vídeo e programas de desenho sofisticados estão
disponíveis para computadores pessoais.
Os gráficos para auxiliar na compreensão de grandes conjuntos de dados
científicos agora são comuns como parte da computação de alto desempenho,
onde são conhecidos como "ferramentas de visualização". Os modelos de cores
foram usados para produzir impressoras práticas que imprimem com matizes
naturais e concordam com as cores em uma tela gráfica. Foram promulgados
padrões gráficos (por exemplo, GKS, PHIGS, VDI), juntamente com linguagens
de impressão padrão (por exemplo, PostScript), pacotes gráficos especializados
para disciplinas individuais (por exemplo, Mogli para química) e realidades
virtuais em páginas da Web (por exemplo, VRML). Os sistemas de
aprimoramento de imagens têm sido usados há anos; por exemplo, o Jet
Propulsion Laboratory divulga regularmente imagens de planetas da NASA, e os
visualizadores em 3D estão agora disponíveis para ajudar os médicos a
interpretar dados de tomografia computadorizada e ressonância magnética.

-32-
9 Interação Humano-Computador

-33-
Essa área lida com a coordenação eficiente da ação e a transferência de
informações entre humanos e máquinas por meio de vários sensores e motores
semelhantes aos humanos e com estruturas de informações que refletem as
conceitualizações humanas. Contribuintes importantes para esse campo são os
gráficos de computador e as interfaces de usuário. As questões fundamentais
incluem: Quais são os métodos eficazes para receber entrada ou apresentar
saída? Como minimizar o risco de percepção errônea e o consequente erro
humano? Como os gráficos e outras ferramentas p o d e m ser usados para
entender fenômenos físicos por meio de informações armazenadas em conjuntos
de dados? Como as pessoas podem aprender com mundos virtuais simulados
para elas?

A teoria da interação humano-computador envolve psicologia cognitiva e


análise de risco. A psicologia cognitiva é importante para entender como os
seres humanos percebem as telas e reagem; ela fornece aos designers os meios
para avaliar se os seres humanos interpretarão erroneamente as informações
apresentadas a eles, especialmente em momentos de pressão. A análise de risco
é importante porque muitas interfaces de usuário controlam e monitoram
sistemas complexos e críticos para a segurança. As áreas de apoio importantes
são estatística, probabilidade, teoria das filas e teoria da coordenação.

Os modelos e as medidas associadas são essenciais para a interação homem-


computador (HCI). Os sistemas de CAD (Computer-Aided Design) surgiram da
aplicação desses modelos ao domínio do design de peças mecânicas; um script
para a execução de uma linha de fabricação pode ser derivado automaticamente
do banco de dados de CAD. Os sistemas de CAD incorporam muita experiência
de diferentes abordagens à modelagem geométrica, a representação eficiente de
formas físicas por estruturas de dados de computador. Foram desenvolvidos
métodos sofisticados de processamento e aprimoramento de imagens que
permitem a interpretação de fotografias de sondas de espaço profundo a exames
de tomografia computadorizada e ressonância magnética de seres humanos.
Os princípios para projetar telas e painéis de controle para facilitar o uso e
resistir à má interpretação humana foram deduzidos de estudos experimentais.

O design é o foco central da HCI. Engenharia de usabilidade é o nome dado aos


processos de design de engenharia para interfaces de usuário. Foram
desenvolvidas abordagens sofisticadas para entrada, saída, interação e
multimídia. Os sistemas CAD são amplamente usados na fabricação e no design
de chips de computador; pequenas versões desses sistemas estão disponíveis
para computadores pessoais e estações de trabalho. A área de design da interface
do usuário desenvolveu vários padrões populares, como ícones e menus para
exibição de possíveis funções e o mouse para uso como dispositivo de entrada.
Novas interfaces de usuário criadas em computadores baseados em caneta foram
lançadas no mercado e os computadores operados por voz não estão muito
longe. Os sistemas de simulação de voo têm s i d o usados pela NASA há anos
para ajudar a treinar pilotos; versões reduzidas estão disponíveis para
computadores pessoais. Os sistemas de Simulação Interativa Distribuída (DIS)
são usados regularmente em aplicativos de defesa para treinar pessoas a lidar
-34-
com

-35-
com situações de campo de batalha; o DIS apresenta a cada participante uma
imagem em tempo real do mundo visto da perspectiva do participante.

10 Ciência da computação

Essa área lida com explorações em ciência e engenharia que não podem
prosseguir sem computação e comunicações de alto desempenho. A computação
é vista como uma terceira abordagem da ciência, unindo-se às abordagens
tradicionais de teoria e experimento. Ela está sendo usada para resolver
problemas muito difíceis, às vezes chamados de "grandes desafios". No lado da
computação, essa área lida com métodos gerais de resolução eficiente e precisa
de equações resultantes de modelos matemáticos de sistemas físicos; exemplos
incluem o fluxo de ar em torno de asas, o fluxo de água em torno de obstáculos,
o fluxo de petróleo na crosta terrestre, o fluxo de plasma das estrelas, a
progressão do clima e as colisões galácticas. Dentro da ciência da computação,
essa área foi chamada de "computação numérica e simbólica" por muitos anos;
desde meados da década de 1980, ela deu frutos à medida que muitas outras
disciplinas científicas e de engenharia incorporaram a computação em seus
próprios processos de investigação e projeto.
As perguntas fundamentais incluem: Como os processos contínuos ou infinitos
podem ser aproximados com precisão por processos discretos finitos? Como os
algoritmos podem minimizar os efeitos dos erros decorrentes dessas
aproximações? Com que rapidez uma determinada classe de equações pode ser
resolvida para um determinado nível de precisão? Como podem ser
r e a l i z a d a s as manipulações simbólicas nas equações, como integração,
diferenciação e redução a termos mínimos? Como as respostas a essas perguntas
podem ser incorporadas a pacotes de software matemático eficientes, confiáveis
e de alta qualidade? Como os conjuntos de dados gerados por esses modelos
podem ser visualizados de forma mais eficaz para a compreensão humana?

Essa área faz uso extensivo da matemática: a teoria dos números lida com
representações binárias finitas de números e propagação de erros em cálculos
aritméticos; a álgebra linear lida com a solução de sistemas de equações lineares
expressos como matrizes; a análise numérica lida com algoritmos de solução
complexos e propagação de erros quando são usados; a dinâmica não linear lida
com sistemas caóticos. A matemática de apoio inclui cálculo, análise real,
análise complexa, matemática discreta e álgebra linear. Outras áreas da teoria
t a m b é m contribuem aqui, notadamente algoritmos paralelos, otimização de
compiladores, computação distribuída, organização de grandes conjuntos de
dados, descoberta automática de dados, geometria computacional, gráficos
(muitas vezes, nesse contexto, chamados de visualização científica) e estatística.
Essa teoria é mesclada com a teoria da área específica da ciência na qual uma
investigação computacional está sendo realizada. Por exemplo, as teorias da
mecânica quâ n t i c a estão sendo usadas para explorar um novo paradigma de
"computação quântica" super-rápida.

-36-
Os cientistas da computação são ávidos modeladores. Eles têm modelos
validados experimentalmente para: problemas físicos, aproximações discretas,
propagação de erros para trás e estabilidade, métodos especiais, como
Transformada Rápida de Fourier e Solucionadores de Poisson, modelos de
elementos finitos, métodos iterativos e convergência, algoritmos paralelos,
geração e refinamento automático de grades, visualização científica e
integração e diferenciação simbólicas. Como na teoria, os modelos de
computação são combinados com modelos de outras áreas científicas nas quais
uma investigação computacional está sendo realizada.

Os cientistas da computação projetaram muitos pacotes e sistemas importantes,


como Chem, Web, Linpack, Eispack, Ellpack, Macsyma, Mathematica, Maple e
Reduce. Eles contribuíram com modelos e algoritmos em muitas outras
disciplinas, especialmente com os problemas do "grande desafio", como na física
(por exemplo, demonstrar a existência de determinados quarks), aerodinâmica e
dinâmica de fluxo (por exemplo, simulação numérica do campo de fluxo de ar
em torno de um avião em voo), química (por exemplo, projetar enzimas e
proteínas que possam ser usadas para criar um sistema de computação em tempo
real), criação de enzimas e proteínas que atacam vírus seletivamente), biologia
(por exemplo, união de fragmentos de sequência de DNA no genoma humano
completo, microscopia, t o m o g r a f i a , cristalografia e dobramento de
proteínas), geologia (por exemplo, previsão de terremotos), astronomia (por
exemplo locating the missing mass of the universe), meteorology (e.g., long term
weather forecasting), earth sciences (e.g., charting the relation between ocean
currents and world climate), structural mechanics (e.g., effects of wind and
earthquake on stability of buildings, bridges, boats, cars, and planes),
electromagnetics (e.g., forças dos campos dentro de isoladores parciais,
posicionamento ideal de antenas e guias de ondas, propagação de ondas na
atmosfera e no espaço) e engenharia (por exemplo, interação entre superfícies de
controle e movimentos dinâmicos de tensão em estruturas). O grande apoio
federal nos EUA para esses problemas de grandes desafios ajudou não só a
resolver esses problemas, mas também a construir grandes supercomputadores
paralelos e redes rápidas de gigabits.

11 Informática organizacional

Essa área lida com informações e sistemas que apóiam os processos de trabalho
das organizações e a coordenação entre as pessoas que participam desses
processos. Os sistemas de informação são essenciais para o sucesso do comércio
e dos negócios no crescente mercado global. Como a maior parte do trabalho das
organizações ocorre em processos humanos, os sistemas de informação devem
ser projetados com uma compreensão do trabalho humano. Portanto, essa tem
sido uma das principais áreas de colaboração entre o pessoal da computação, da
engenharia de sistemas e das disciplinas organizacionais, como administração,
marketing, ciências da decisão, ciências da administração, sistemas
organizacionais e antropologia. As questões fundamentais vêm da organização

-37-
disciplinas que não são da computação, mas que inspiram consideravelmente as
áreas associadas da computação.

Muitas partes da computação contribuem com teorias para a informática


organizacional, principalmente linguagens, sistemas operacionais, redes, bancos
de dados, inteligência artificial e comunicação humano-computador. A
linguística forneceu teorias, como atos de fala, que foram usadas para mapear
processos de trabalho. As ciências organizacionais, como as ciências da decisão
e a dinâmica organizacional, t a m b é m contribuem com suas teorias. Os fatores
humanos e as teorias cognitivas da psicologia desempenham papéis importantes.
As teorias sociais da antropologia têm sido usadas para entender o trabalho.

Modelos, abstrações e medições são ainda mais dominantes do que as teorias


nessa área. A maioria das teorias mencionadas acima é descritiva; portanto,
modelos e simulações são comumente usados para obter previsões.

Os Sistemas de Informações Gerenciais (MIS) são uma área comercial de longa


data em que sistemas de computação compostos por estações de trabalho, bancos
de dados, redes e sistemas de relatórios são implantados em organizações para
ajudá-las em seu trabalho. Muitos sistemas de suporte à decisão estão
disponíveis comercialmente; eles variam de modelos matemáticos e de
simulação que preveem condições de mercado, econômicas e competitivas a
sistemas de trabalho cooperativo que ajudam as pessoas a tomar decisões em
grupo ou a colaborar em uma rede. Um novo domínio de software, os sistemas
de gerenciamento de fluxo de trabalho, tornou-se um setor de bilhões de dólares.

12 Bioinformática

Essa é uma área emergente de colaboração íntima entre a computação e as


ciências biológicas. Os pesquisadores estão explorando uma variedade de
modelos e arquiteturas que podem revolucionar a computação, a biologia e a
medicina.
Exemplos: (1) A química do DNA tem sido usada para codificar e resolver
problemas combinatórios, abrindo a possibilidade de computação química. (2)
Novos algoritmos de análise de cadeias de caracteres estão pesquisando
sequências de pares de bases na ampla rede de bancos de dados compilados no
Projeto Genoma Humano, tentando construir o genoma geral a partir de muitos
fragmentos.
(3) Arquitetos e médicos produziram implantes cocleares que restauram a
audição e protótipos de retinas de silicone, abrindo a possibilidade de próteses
biônicas práticas. (4) As análises computadorizadas são amplamente utilizadas
na engenharia genética para determinar as estruturas químicas adequadas das
enzimas para tratar doenças. (5) Estão sendo estudados novos tipos de
dispositivos de memória orgânica que seriam capazes de armazenar dados em
densidades mil vezes maiores do que a atual.

-38-
O futuro

O padrão de evolução exibido na matriz de doze subáreas e três processos


continua. A disciplina de computação terá seu desenvolvimento mais rápido nos
domínios de sobreposição significativa com outros campos, como ciência da
computação, c i ê n c i a cognitiva, b i b l i o t e c o n o m i a , informática
organizacional, bioinformática, manufatura e arquitetura. Todas as subáreas
receberão novos conceitos e terminologias das áreas de maior colaboração, bem
como de muitos domínios de aplicativos.

À medida que a disciplina amadureceu, subgrupos importantes de cada uma das


doze subáreas reivindicaram identidades profissionais separadas, formaram
grupos profissionais, codificaram sua prática profissional e iniciaram sua
própria literatura e comunidades. Alguns desses grupos, por acreditarem que a
Tecnologia da Informação é mais inclusiva do que a Ciência da Computação,
começaram a afirmar que fazem parte da profissão de TI em vez da disciplina
de CS. Alguns deles, como a engenharia de software, estão se vendo como
colegas da ciência da computação dentro da profissão de TI. Além disso, vários
outros grupos relacionados à TI reivindicaram identidades dentro da
p r o f i s s ã o d e TI. A "família de TI", que consiste na Ciência da
Computação, seus filhos e seus primos, inclui pelo menos duas dúzias de
membros:

inteligência artificial engenharia do conhecimento


bioinformática sistemas de informações
gerenciais ciência cognitiva e teoria da aprendizagem design de
multimídia ciência da computação engenharia de redes
ciência da computação avaliação de desempenho
engenharia de banco de dados educação e treinamento profissional
biblioteconomia digital computação científica
gráficos arquitetura de software
HCI (interação homem computador) engenharia de software
ciência da informação segurança e privacidade do
sistema
sistemas de informação administração de sistemas
design instrucional design de serviços da web

Várias conclusões importantes podem ser tiradas desses desenvolvimentos: (1) A


profissão de TI tem um escopo enorme, incluindo subcampos da ciência,
engenharia e negócios. (2) Os participantes compartilham uma base comum de
ciência e tecnologia, mas têm práticas profissionais distintas. (3) Os participantes
estão dispostos a se identificar com o campo de TI, mas não com a disciplina de
computação.
(4) Será necessária uma forte liderança das sociedades profissionais para
manter esses participantes unidos sob a identidade comum de TI. (5) A
capacidade do campo de TI de resolver problemas amplos e sistêmicos, como
qualidade de software, pesquisa básica e educação profissional contínua,
exigirá uma ampla cooperação entre os participantes, cooperação essa que
estará ameaçada se os grupos se fragmentarem e se dividirem. (Consulte
-39-
Denning 1998).

-40-
A subárea de engenharia de software ilustra as tensões mencionadas acima. À
medida que o campo de TI amadurece e atinge a vida de mais pessoas, aumenta a
demanda por sistemas de computação que sejam comprovadamente seguros e
confiáveis. Apesar da atenção concentrada na engenharia de software desde
1968, quando a "crise do software" foi declarada pela primeira vez, e apesar dos
enormes avanços em ferramentas e métodos, a insatisfação do público com os
sistemas de software está em um nível altíssimo.
Isso se manifesta de várias maneiras, desde reclamações generalizadas sobre o
suporte técnico para hardware e software em sistemas domésticos e de
escritório até temores sobre falhas em sistemas de software críticos para a
segurança. A preocupação do público despertou o interesse político. É
provável que, em uma década, o licenciamento governamental de engenheiros
de software seja uma prática comum. Em meados de 1999, o Conselho da
ACM se recusou a fazer com que a ACM participasse com qualquer agência
no desenvolvimento de testes de licença: ele achava que a engenharia de
software ainda era imatura e que nenhum certificado conhecido poderia
garantir que o titular fosse capaz de produzir software seguro e confiável. A
IEEE Computer Society discordou e decidiu participar do desenvolvimento de
testes de licenciamento. Ambas as sociedades disseram que querem trabalhar
para obter certificações administradas por profissionais.

A noção de informação, que parece ser central para a disciplina, provavelmente


sofrerá ataques. Atualmente, a informação é geralmente entendida como sinais ou
símbolos que transmitem significado aos observadores humanos. Alguns
pensadores foram além, afirmando que a informação é o princípio comum
subjacente aos sistemas físicos, biológicos, humanos, organizacionais e
econômicos e, portanto, que a ciência da informação é a origem de todas essas
disciplinas. Há, entretanto, um problema com a informação. Se a informação
está presente é uma avaliação feita por cada observador; não há padrões
comumente aceitos para a avaliação (Spinoza et al 1997, Winograd 1996). Para
muitos observadores, parece não ser científico afirmar que a ciência da
computação se baseia em um princípio que é fundamentalmente subjetivo.
Alguns afirmam que a crença de que a informação é uma quantidade científica
catalisou problemas sistêmicos na qualidade, educação e design de software
(Talbott 1998). (Até mesmo Claude Shannon e Warren Weaver, a quem se atribui
a formalização da informação em sua teoria matemática da comunicação,
negaram qualquer conexão com a forma como a "informação" é entendida na
vida cotidiana; sua definição não se aplica aos símbolos processados pelos
programas).

A correção de um programa, entendida abstratamente como uma função


matemática, pode ser avaliada com base em afirmações sobre os processos de
dados de entrada, intermediários e de saída do programa; nada disso depende de
uma definição formal d e informação. A correção das interações entre
humanos e sistemas de computação, por outro lado, geralmente depende muito
das avaliações que as pessoas fazem sobre o sistema, e as informações são uma
avaliação permitida. Assim, estaríamos em um terreno muito mais seguro se
-41-
afirmássemos que

-42-
que os programas processam dados e que as informações são uma avaliação
resultante das interações entre programas e pessoas.

REFERÊNCIAS
S. Amarel. 1971. "Ciência da computação: uma estrutura conceitual para o
planejamento curricular". Communications of ACM 14, 6 (junho).

B. Arden (ed.). 1980. What can be automated? -- The Computer Science and
Engineering Research Study. Cambridge, MA: The MIT Press.

P. Denning, D. E. Comer, D Gries, M. C. Mulder, A. Tucker, A. J. Turner, P. R.


Young. 1989. "Computação como uma disciplina". Communications of ACM 32,
1 (janeiro), 9-23.

P. Denning e R. Metcalfe. 1997. Beyond Calculation: The Next 50 Years of


Computing (P. Denning e R. Metcalfe, eds.), Copernicus Books, uma marca da
Springer-Verlag.

P. Denning. 1998. "Computing the Profession" [Computando a profissão]. Educom


Review 33 (novembro-dezembro), 26-39, 46-59.

P. Denning. 1999. Talking Back to the Machine: Computers and Human


Aspiration (Computadores e aspiração humana). Copernicus Books, uma
marca da Springer-Verlag.

P. Drucker. 1989. The New Realities [As Novas Realidades]. Harper.

R. W. Hamming. 1969. "One man's view of computer science". ACM Turing


Lecture. Journal of the ACM 16, 1 (janeiro), 1-5.

J. Hartmanis et al. 1992. Computing The Future [Computando o Futuro].


National Academy of Science Press.

Academia Nacional de Ciências. 1968. The mathematical sciences: A Report.


Publicação 1681. Washington, DC.

C. Spinoza, F. Flores e H. Dreyfus. 1997. Disclosing New Worlds [Revelando


novos mundos]. MIT Press.

S. Talbott. 1998. "Não existe algo como informação". Netfuture 81. Disponível
em <http://www.oreilly.com/~stevet/netfuture>.

-43-
A. Tucker, Jr., e P. Wegner. 1996. "Ciência e engenharia da computação: The
discipline and its impact" (A disciplina e seu impacto). Em Handbook of
Computer Science and Engineering, CRC Press, Capítulo 1.

P. Wegner. 1970. "Three computer cultures -- computer technology, computer


mathematics, and computer science". Em Advances in Computers 10 (W.
Freiberger, ed.). Nova York: Academic Press.

T. Winograd. 1996. Bringing Design to Software. Addison-Wesley.

T. Winograd. 1997. "O design da interação". Em Beyond Calculation: The Next


50 Years of Computing (P. Denning e R. Metcalfe, eds.), Copernicus Books, uma
marca da Springer-Verlag. 149-162.

-44-

Você também pode gostar