# Computação

A computação é qualquer atividade orientada a objetivos que exija, se beneficie ou crie máquinas de computação. Ela inclui o estudo e a experimentação de processos algorítmicos e o desenvolvimento de hardware e software. A computação tem aspectos científicos, de engenharia, matemáticos, tecnológicos e sociais. Pode ser definida como a busca de solução para um problema a partir de entradas (inputs), de forma a obter resultados (outputs) depois de processada a informação através de um algoritmo. É com isto que lida a teoria da computação, subcampo da ciência da computação e da matemática. Disciplinas de computação incluem engenharia da computação, ciência da computação, segurança cibernética, ciência de dados, sistemas de informação, tecnologia da informação, arte digital e engenharia de software.
O termo computação também é sinônimo de contagem e cálculo. Antigamente, era usado em referência à ação executada por máquinas de computação mecânica e, antes disso, por computadores humanos.

## História

O termo computação tem origem no latim, computatio, que indica cálculo ou conta matemática.
A história da computação é mais longa do que a história do hardware de computação e inclui a história dos métodos destinados à caneta e ao papel (ou ao giz e à lousa) com ou sem o auxílio de tabelas. A computação está intimamente ligada à representação de números, embora os conceitos matemáticos necessários para a computação existissem antes dos sistemas numéricos. A ferramenta mais antiga conhecida para uso em computação é o ábaco, utilizado por diversas civilizações ao redor do mundo, como o Império Romano e o Egito Antigo. Acredita-se que tenha sido inventado na Babilônia por volta de 2700-2300 a.C.
A primeira proposta registrada para o uso da eletrônica digital na computação foi o artigo de 1931 "The Use of Thyratrons for High Speed Automatic Counting of Physical Phenomena" ("O uso de Tiratrons para Contagem Automática de Fenômenos Físicos em Alta Velocidade"), de C. E. Wynn-Williams. O artigo de 1938 de Claude Shannon "A Symbolic Analysis of Relay and Switching Circuits" (Uma Análise Simbólica de Circuitos de Relés e Comutação") introduziu a ideia de usar a eletrônica para operações algébricas boolianas.
O conceito de um transistor de efeito de campo foi proposto por Julius Edgar Lilienfeld em 1925. John Bardeen e Walter Brattain, enquanto trabalhavam com William Shockley no Bell Labs, construíram o primeiro transistor funcional, o transistor de contato pontual, em 1947. Em 1953, a Universidade de Manchester construiu o primeiro computador transistorizado, o Manchester Baby. No entanto, os primeiros transistores de junção eram dispositivos relativamente volumosos e difíceis de produzir em massa, o que os limitava a várias aplicações especializadas. O transistor de efeito de campo de óxido metálico e silício (MOSFET ou transistor TECMOS) foi inventado por Mohamed Atalla e Dawon Kahng nos Laboratórios Bell em 1959. O MOSFET possibilitou a construção de circuitos integrados de alta densidade, levando ao que é conhecido como a revolução dos computadores ou revolução dos microcomputadores.
A partir da segunda metade do século XX, com o advento dos computadores eletrônicos, a Computação passou a ter uma presença cada vez mais marcante na sociedade, influenciando a vida diária de parte da população mundial. Nesse período, a Computação ganhou o status de Ciência, surgindo então o termo ciência da computação, uma área do conhecimento humano hoje fortemente ligada à produção de software.
Os algoritmos computacionais hoje estão presentes na rede mundial de computadores (internet), bem como em smartphones, computadores pessoais e outros dispositivos que executam processamento de dados.

## Computador

Um computador é uma máquina que manipula dados de acordo com um conjunto de instruções chamado programa de computador. O programa tem uma forma executável que o computador pode usar diretamente para executar as instruções. O mesmo programa, em sua forma de código-fonte legível por humanos, permite que um programador estude e desenvolva uma sequência de etapas conhecida como algoritmo. Como as instruções podem ser executadas em diferentes tipos de computadores, um único conjunto de instruções de origem é convertido em instruções de máquina de acordo com o tipo de CPU.
O processo de execução executa as instruções em um programa de computador. As instruções expressam os cálculos realizados pelo computador. Elas acionam sequências de ações simples na máquina de execução. Essas ações produzem efeitos de acordo com a semântica das instruções.

### Hardware de computador

O hardware de computador inclui as partes físicas de um computador, inclusive a unidade central de processamento, a memória e a entrada/saída. A lógica computacional e a arquitetura do computador são tópicos importantes no campo do hardware de computador.

### Software de computador

O software é um conjunto de programas de computador e dados relacionados que fornece instruções para um computador. Software refere-se a um ou mais programas de computador e dados mantidos no armazenamento do computador. É um conjunto de programas, procedimentos, algoritmos, bem como sua documentação relacionada à operação de um sistema de processamento de dados. O software de programa executa a função do programa que implementa, seja fornecendo instruções diretamente ao hardware do computador ou servindo como entrada para outro software. O termo foi criado para contrastar com o antigo termo hardware (que significa "dispositivos físicos"). Em contraste com o hardware, o software é intangível.
Às vezes, o software também é usado em um sentido mais restrito, significando apenas software de aplicação.

#### Software de sistema

O software de sistema é um software de computador projetado para operar e controlar o hardware do computador e para fornecer uma plataforma para a execução do software de aplicação. O software de sistema inclui sistemas operacionais, software utilitário, drivers de dispositivos, sistemas de janelas e firmware. As ferramentas de desenvolvimento usadas com frequência, como compiladores, ligadores e depuradores, são classificadas como software de sistema. O software de sistema e o middleware gerenciam e integram os recursos de um computador, mas normalmente não os aplicam diretamente na execução de tarefas que beneficiam o usuário, ao contrário do software de aplicação.

#### Software de aplicação

O software aplicação, também conhecido como aplicação ou app, é um software de computador projetado para ajudar o usuário a realizar tarefas específicas. Os exemplos incluem software empresarial, software de contabilidade, suítes de escritório, software gráfico e reprodutores de mídia. Muitas aplicações lidam principalmente com documentos. As aplicações podem ser incluídas em pacotes do software e do sistema ou podem ser disponibilizadas separadamente. Alguns usuários ficam satisfeitos com as aplicações incluídas no pacote e não precisam instalar aplicações adicionais. O software do sistema gerencia o hardware e atende à aplicação, que, por sua vez, atende ao usuário.
O software de aplicação aplica o poder de uma determinada plataforma de computação ou software de sistema a uma finalidade específica. Algumas aplicações, como o Microsoft Office, são desenvolvidas em várias versões para várias plataformas diferentes; outros têm requisitos mais restritos e geralmente possuem o nome plataforma em que são executados. Por exemplo, uma aplicação de geografia para Windows ou uma aplicação Android para educação ou jogos no Linux. As aplicações executadas somente em uma plataforma e que aumentam a aderência à essa plataforma devido à popularidade da aplicação, são conhecidas como "aplicações matadoras" ("killer applications").

### Rede de computadores

Uma rede de computadores, geralmente chamada simplesmente de rede, é um conjunto de componentes de hardware e computadores interconectados por canais de comunicação que permitem o compartilhamento de recursos e informações. Quando pelo menos um processo em um dispositivo é capaz de enviar ou receber dados de ou para pelo menos um processo residente em um dispositivo remoto, diz-se que os dois dispositivos estão em uma rede. As redes podem ser classificadas de acordo com uma ampla variedade de características, como o meio usado para transportar os dados, o protocolo de comunicação usado, a escala, a topologia e o escopo organizacional.
Os protocolos de comunicação definem as regras e os formatos de dados para a troca de informações em uma rede de computadores e fornecem a base para a programação da rede. Um protocolo de comunicação bem conhecido é a Ethernet, um padrão de hardware e camada de enlace que é onipresente em redes locais. Outro protocolo comum é o Internet Protocol Suite, que define um conjunto de protocolos para internetworking, ou seja, para comunicação de dados entre várias redes, transferência de dados de host (hospedeiro) para host e formatos de transmissão de dados específicos de aplicações.
Às vezes, a rede de computadores é considerada uma subdisciplina da engenharia elétrica, das telecomunicações, da ciência da computação, da tecnologia da informação ou da engenharia da computação, pois se baseia na aplicação teórica e prática dessas disciplinas.

#### Internet

A internet é um sistema global de redes de computadores interconectadas que usam o conjunto de protocolos padrão da internet (TCP/IP) para atender a bilhões de usuários. Isso inclui milhões de redes privadas, públicas, acadêmicas, comerciais e governamentais, com escopo que varia de local a global. Essas redes são conectadas por uma ampla gama de tecnologias de rede eletrônica, sem fio e óptica. A internet oferece uma ampla gama de recursos e serviços de informação, como os documentos de hipertexto interconectados da World Wide Web e a infraestrutura de suporte a e-mail.

### Programação

A programação de computadores é o processo de escrever, testar, depurar e manter o código-fonte e a documentação dos programas de computador. Esse código-fonte é escrito em uma linguagem de programação, que é uma linguagem artificial, geralmente mais restritiva do que as linguagens naturais, mas facilmente traduzida pelo computador. A programação é usada para invocar algum comportamento desejado (personalização) da máquina.
Escrever um código-fonte de alta qualidade requer conhecimento tanto do domínio da ciência da computação quanto do domínio em que a aplicação será usada. Por isso, o software da mais alta qualidade costuma ser desenvolvido por uma equipe de especialistas. No entanto, o termo "programador" pode se aplicar a uma variedade de qualidades de programa, desde hacker até colaborador de código aberto e profissional. Também é possível que um único programador faça a maior parte ou toda a programação de computador necessária para gerar a prova de conceito para lançar uma nova "aplicação matadora".

#### Programador de computador

Um programador é uma pessoa que escreve softwares para computador. O termo "programador de computador" pode se referir a um especialista em uma área de programação de computadores ou a um generalista que escreve códigos para vários tipos de software. Uma pessoa que pratica ou professa uma abordagem formal à programação também pode ser conhecida como analista programador. A linguagem de computador principal de um programador (C, C++, Java, Lisp, Python etc.) costuma ser prefixada aos títulos acima, e aqueles que trabalham em um ambiente da Web costumam prefixar seus títulos com Web. O termo "programador" pode ser usado para se referir a um desenvolvedor de software, engenheiro de software, cientista da computação ou analista programador. No entanto, os membros dessas profissões geralmente possuem outras habilidades de engenharia de software, além da programação.

### Setor de computadores

O setor de tecnologia da informação é composto por empresas envolvidas no desenvolvimento de software de computador, no projeto de hardware de computador e infraestruturas de rede de computadores, na fabricação de componentes de computador e no fornecimento de serviços de tecnologia da informação, incluindo administração e manutenção de sistemas.
A indústria de software inclui empresas envolvidas no desenvolvimento, na manutenção e na publicação de softwares. O setor também inclui serviços de software, como treinamento, documentação e consultoria.

## Subdisciplinas da computação
### Engenharia da computação

A engenharia da computação é um ramo da engenharia que integra vários campos da engenharia elétrica e da ciência da computação necessários para desenvolver hardware e software para computadores. Os engenheiros da computação geralmente têm formação em engenharia eletrônica (ou engenharia elétrica), projeto de software e integração de hardware e software, em vez de apenas engenharia de software ou engenharia eletrônica. Os engenheiros de computação estão envolvidos em muitos aspectos de hardware e software da computação, desde o projeto de microprocessadores individuais, computadores pessoais e supercomputadores, até o projeto de circuitos. Esse campo da engenharia inclui não apenas o projeto de hardware em seu próprio domínio, mas também as interações entre o hardware e o contexto em que ele opera.

### Engenharia de software

A engenharia de software (ES) é a aplicação de uma abordagem sistemática, disciplinada e quantificável ao projeto, desenvolvimento, operação e manutenção de software, e o estudo dessas abordagens. Ou seja, a aplicação da engenharia ao software. É o ato de usar percepções para conceber, modelar e dimensionar uma solução para um problema. A primeira referência ao termo é a Conferência de Engenharia de Software da OTAN de 1968, com o objetivo de provocar uma reflexão sobre a crise de software percebida na época. O desenvolvimento de software, um termo amplamente usado e mais genérico, não necessariamente inclui o paradigma de engenharia. Os conceitos geralmente aceitos de engenharia de software como uma disciplina de engenharia foram especificados no Guide to the Software Engineering Body of Knowledge (SWEBOK). O SWEBOK tornou-se um padrão internacionalmente aceito na ISO/IEC TR 19759:2015.

### Ciência da computação

Ciência da computação ou ciência da computação (abreviado CS ou Comp Sci) é a abordagem científica e prática da computação e suas aplicações. Um cientista da computação é especializado na teoria da computação e no projeto de sistemas computacionais.
Seus subcampos podem ser divididos em técnicas práticas para sua implementação e aplicação em sistemas de computação e áreas puramente teóricas. Algumas, como a teoria da complexidade computacional, que estuda as propriedades fundamentais dos problemas computacionais, são altamente abstratas, enquanto outras, como a computação gráfica, enfatizam as aplicações do mundo real. Outras se concentram nos desafios da implementação de cálculos. Por exemplo, a teoria da linguagem de programação estuda abordagens para a descrição de cálculos, enquanto o estudo da programação de computadores investiga o uso de linguagens de programação e sistemas complexos. O campo da interação humano–computador concentra-se nos desafios de tornar os computadores e as computações úteis, utilizáveis e universalmente acessíveis aos seres humanos.

### Segurança cibernética

O campo da segurança cibernética diz respeito à proteção de sistemas e redes de computadores. Isso inclui a privacidade das informações e dos dados, a prevenção da interrupção dos serviços de TI e a prevenção de roubos e danos a hardware, software e dados.

### Ciência de dados

A ciência de dados é um campo que usa ferramentas científicas e de computação para extrair informações e percepções dos dados, impulsionadas pelo aumento do volume e da disponibilidade dos dados. Mineração de dados, big data, estatística e aprendizado de máquina estão todos interligados à ciência de dados.

### Sistemas de informação

Os sistemas de informação (SI) são o estudo de redes complementares de hardware e software (tecnologia da informação) que as pessoas e as organizações usam para coletar, filtrar, processar, criar e distribuir dados. O Computing Careers da Association for Computing Machinery descreve os SI como:
   "A maioria dos programas [de graduação] em SI está localizada em escolas de negócios; no entanto, eles podem ter nomes diferentes, como sistemas de informações gerenciais, sistemas de informações de computadores ou sistemas de informações comerciais. Todos os cursos de SI combinam tópicos de negócios e computação, mas a ênfase entre questões técnicas e organizacionais varia entre os programas. Por exemplo, os programas diferem substancialmente na quantidade de programação exigida."
O estudo de SI une negócios e ciência da computação, usando os fundamentos teóricos da informação e da computação para estudar vários modelos de negócios e processos algorítmicos relacionados dentro de uma disciplina de ciência da computação. O campo de sistemas de informação computacional (CIS) estuda computadores e processos algorítmicos, incluindo seus princípios, seus projetos de software e hardware, seus aplicativos e seu impacto na sociedade, enquanto o SI enfatiza a funcionalidade em relação ao design.

### Tecnologia da informação

A tecnologia da informação (TI) é a aplicação de computadores e equipamentos de telecomunicações para armazenar, recuperar, transmitir e manipular dados, geralmente no contexto de uma empresa ou outro empreendimento. O termo é normalmente usado como sinônimo de computadores e redes de computadores, mas também abrange outras tecnologias de distribuição de informações, como televisão e telefones. Vários setores estão associados à tecnologia da informação, incluindo hardware, software, eletrônicos, semicondutores, internet, equipamentos de telecomunicação, comércio eletrônico e serviços de informática.

## Pesquisa e tecnologias emergentes

A computação em DNA e a computação quântica são áreas de pesquisa ativa tanto para hardware quanto para software de computação, como o desenvolvimento de algoritmos quânticos. A infraestrutura em potencial para tecnologias futuras inclui DNA origami fotolitografia e antenas quânticas para transferência de informações entre armadilhas de íons. Em 2011, os pesquisadores haviam emaranhado 14 qubits. Circuitos digitais rápidos, incluindo aqueles baseados em junções Josephson e tecnologia quântica de fluxo único rápido, estão se tornando mais fáceis de realizar com a descoberta de supercondutores em nanoescala.
Os dispositivos de fibra óptica e fotônicos (ópticos), que já foram usados para transportar dados por longas distâncias, estão começando a ser usados pelos centros de dados, juntamente com componentes de memória de CPU e semicondutores. Isso permite a separação da memória de acesso aleatório (RAM) da CPU por interconexões ópticas. A IBM criou um circuito integrado com processamento de informações eletrônicas e ópticas em um único chip. Isso é denominado CINP (CMOS-integrated nanophotonics, nanofotônica integrada ao CMOS). Um benefício das interconexões ópticas é que as placas-mãe, que antes exigiam um determinado tipo de sistema em um chip (SoC), agora podem mover a memória dedicada e os controladores de rede das placas-mãe, espalhando os controladores pelo rack. Isso permite a padronização de interconexões de backplane e placas-mãe para vários tipos de SoCs, o que permite atualizações mais oportunas de CPUs.
Outro campo de pesquisa é a spintrônica. A spintrônica pode fornecer potência de computação e armazenamento, sem acúmulo de calor. Algumas pesquisas estão sendo feitas em chips híbridos, que combinam fotônica e spintrônica. Também há pesquisas em andamento sobre a combinação de plasmônica, fotônica e eletrônica.

### Computação em nuvem

A computação em nuvem é um modelo que permite o uso de recursos de computação, como servidores ou aplicações, sem a necessidade de interação entre o proprietário desses recursos e o usuário final. Normalmente, ela é oferecida como um serviço, o que a torna um exemplo de Software como Serviço, Plataformas como Serviço e Infraestrutura como Serviço, dependendo da funcionalidade oferecida. As principais características incluem acesso sob demanda, amplo acesso à rede e a capacidade de escalonamento rápido. Permite que usuários individuais ou pequenas empresas se beneficiem das economias de escala.
Uma área de interesse nesse campo é seu potencial para apoiar a eficiência energética. Permitir que milhares de instâncias de computação ocorram em uma única máquina, em vez de milhares de máquinas individuais, pode ajudar a economizar energia. Também poderia facilitar a transição para uma fonte de energia renovável, pois bastaria alimentar um farm de servidores com energia renovável, em vez de milhões de residências e escritórios.
Entretanto, esse modelo de computação centralizada apresenta vários desafios, especialmente em termos de segurança e privacidade. A legislação atual não protege suficientemente os usuários de empresas que manipulam mal seus dados nos servidores da empresa. Isso sugere a possibilidade de mais regulamentações legislativas sobre computação em nuvem e empresas de tecnologia.

### Computação quântica

A computação quântica é uma área de pesquisa que reúne as disciplinas de ciência da computação, teoria da informação e física quântica. Embora a ideia da informação como parte da física seja relativamente nova, parece haver uma forte ligação entre a teoria da informação e a mecânica quântica. Enquanto a computação tradicional opera em um sistema binário de uns e zeros, a computação quântica usa qubits. Os qubits são capazes de estar em uma superposição, ou seja, em ambos os estados de um e zero, simultaneamente. Assim, o valor do qubit não está entre 1 e 0, mas muda dependendo de quando é medido. Essa característica dos qubits é conhecida como entrelaçamento quântico e é a ideia central da computação quântica que permite que os computadores quânticos façam cálculos em grande escala. A computação quântica é usada com frequência em pesquisas científicas nos casos em que os computadores tradicionais não têm capacidade de computação para fazer os cálculos necessários, como na modelagem molecular. Moléculas grandes e suas reações são complexas demais para serem calculadas pelos computadores tradicionais, mas a capacidade de computação dos computadores quânticos poderia fornecer uma ferramenta para realizar esses cálculos.