Artigo Ciência Da Computação PT
Artigo Ciência Da Computação PT
Artigo Ciência Da Computação PT
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).
-2-
Preocupações padrão do campo
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.
-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).
-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.
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.
-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:
-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.
Processos
-11-
prever novos comportamentos com precisão. (Esse paradigma às vezes é
chamado de
<I>abstração</I> por cientistas da computação).
-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 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.
-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.
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?
-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.
3 Arquitetura
-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?
-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?
-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.
-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.
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?
-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.
8 Gráficos
-31-
ou seja, simulações de situações reais que são difíceis de distinguir da
realidade?
-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?
-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.
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.
12 Bioinformática
-38-
O futuro
-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.
-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.
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.
-44-