# Introdução à Ciência da Computação/Introdução à Programação

acima: Introdução à Ciência da Computação anterior: <<<Introdução ao Software e conceitos relacionados | próximo: Introdução aos Bancos de Dados>>>
Programação é a ciência da criação (ou alteração) de um programa de computador, que é um conjunto concreto de instruções para um computador desempenhar. Computador, neste contexto, significa qualquer coisa que tenha capacidade de processamento. O programa é escrito numa linguagem de programação, embora seja possível, com alguma dificuldade, escrevê-lo directamente em linguagem de máquina. Diferentes partes de um programa podem ser escritas em diferentes linguagens.
Diferentes linguagens de programação funcionam de diferentes modos. Por esse motivo, os programadores podem criar programas muito diferentes para diferentes linguagens; muito embora, teoricamente, a maioria das linguagens possa ser usada para criar qualquer programa.
Software é um nome coletivo para programas de computadores e dados.
Há várias décadas que se debate ferozmente sobre se a programação é mais semelhante a uma arte (Donald Knuth), a uma ciência, à matemática (Edsger Dijkstra), à engenharia (David Parnas), ou se é um campo completamente novo.

## História da Programação

Hero de Alexandria no século primeiro depois de cristo inventou teatros automatizados que usavam programação análoga para controlar os fantoches, portas, luzes e efeitos de som.
A mais antiga programadora de computadores que se conhece é Ada Lovelace, filha de Anabella e de Lord Byron (o poeta). Anabella transmitiu a Ada o seu amor à matemática, a qual, depois de conhecer Charles Babbage, traduziu e expandiu uma descrição da sua máquina analítica. Muito embora Babbage nunca tenha completado a construção de nenhuma das suas máquinas, o trabalho que ele e Ada desenvolveram sobre elas, garantiu a Ada o título de primeira programadora de computadores do mundo (veja as notas de Ada Byron sobre a máquina analítica. A linguagem de programação Ada recebeu o seu nome.
Um dos primeiros programadores que se tem notícia de ter completado todos os passos para a computação sem auxílio, incluindo a compilação e o teste, é Wallace J. Eckert. O trabalho deste homem antecede a ascensão das linguagens de computador, porque ele usou a linguagem da matemática para solucionar problemas astronômicos. No entanto, todos os ingredientes estavam lá: ele trabalhou um laboratório de computação para a Universidade de Columbia com equipamentos fornecidos pela IBM, completes com uma divisão de serviço de atendimento ao cliente, e consultores de engenheria para propósitos especiais, na cidade de Nova York, na década de 1930, usando cartões perfurados para armazenar os resultados intermediários de seus cálculos, e então formatando os cartões perfurados para controlar a impressão das respostas, igual ao trabalho para os censos décadas antes. Ele até tinha técnicas de debug tais como códigos de cores, bases cruzadas, verificação e duplicação. Uma diferença entre Eckert e os programadores dos dias de hoje é que o exemplo do seu trabalho influenciou o projeto Manhattan. Seu trabalho foi reconhecido por astrônomos do Observatório da Universidade de Yale, Observatório da Universidade de Princeton, Observatório da Marinha dos EUA, Observatório da Faculdade Harvard, Observatório dos estudantes da Universidade da Califórnia, Observatório Ladd da Universidade de Brown e Observatório Sproul da Faculdade de Swarthmore.
Alan Turing é freqüentemente encarado como o pai da ciência de computadores e, por afinidade, da programação. Ele foi responsável por ajudar na elaboração e programação de um computador destinado a quebrar o código alemão ENIGMA durante a Segunda Guerra Mundial.

## Linguagens de programação

Linguagem de programação é um método padronizado e sistematizado para expressar instruções para um computador. É um conjunto de regras sintáticas e semânticas que permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias.Há diversas linguagens de programação voltadas para as diversas necessidades específicas.
O conjunto de palavras (tokens), compostos de acordo com essas regras, constituem o código fonte de um software. Esse código fonte é depois traduzido para código de máquina através de um programa chamado compilador, que é executado pelo processador.
Uma das principais metas das linguagens de programação é permitir que programadores tenham uma maior produtividade, permitindo expressar suas intenções mais facilmente do que quando comparado com a linguagem que um computador entende nativamente (código de máquina). Assim, linguagens de programação são projetadas para adotar uma sintaxe de nível mais alto, que pode ser mais facilmente entendida por programadores humanos. Linguagens de programação são ferramentas importantes para que programadores e engenheiros de software possam escrever programas mais organizados e com maior rapidez.
Linguagens de programação também tornam os programas menos dependentes de computadores ou ambientes computacionais específicos (propriedade chamada de portabilidade). Isto acontece porque programas escritos em linguagens de programação são traduzidos para o código de máquina do computador no qual será executado em vez de ser diretamente executado. Uma meta ambiciosa do Fortran, uma das primeiras linguagens de programação, era esta independência da máquina onde seria executada.

## Paradigmas da programação

Um paradigma de programação fornece (e determina) a visão que o programador possui sobre a estruturação e execução do programa. Por exemplo, em programação orientada a objetos, programadores podem abstrair um programa como uma coleção de objetos que interagem entre si, enquanto em programação funcional os programadores abstraem o programa como uma sequência de funções executadas de modo empilhado.
Assim como diferentes grupos em engenharia de software propõem diferentes metodologias, diferentes linguagens de programação propõem diferentes paradigmas de programação. Algumas linguagens foram desenvolvidas para suportar um paradigma específico (Smalltalk e Java suportam o paradigma de orientação a objetos enquanto Haskell e Scheme suportam o paradigma funcional), enquanto outras linguagens suportam múltiplos paradigmas (como o LISP, Python e o C++).
Os paradigmas de programação são muitas vezes diferenciados pelas técnicas de programação que proíbem ou permitem. Por exemplo, a programação estruturada não permite o uso de goto. Esse é um dos motivos pelo qual novos paradigmas são considerados mais rígidos que estilos tradicionais. Apesar disso, evitar certos tipos de técnicas pode facilitar a prova de conceito de um sistema, podendo até mesmo facilitar o desenvolvimento de algoritmos.
O relacionamento entre paradigmas de programação e linguagens de programação pode ser complexo pelo fato de linguagens de programação poderem suportar mais de um paradigma.
Exemplos de paradigmas:
* Programação estruturada, em contraste de programação não estruturada
* Programação imperativa, em contraste de programação declarativa
* Programação de passagem de mensagens, em contraste de programação imperativa
* Programação procedural, em contraste de programação funcional
* Programação orientada a fluxos, em contraste de programação orientada a eventos
* Programação escalar, em contraste de programação vetorial
* Programação restritiva, que complementa a programação lógica
* Programação orientada a aspectos (como em AspectJ)
* Programação orientada a regras (como em Mathematica)
* Programação orientada a tabelas (como em Microsoft FoxPro)
* Programação orientada a políticas
* Programação genérica
* Programação orientada a objetos

## Resumo

* Programação é a ciência da criação (ou alteração) de um programa de computador, que é um conjunto concreto de instruções para um computador desempenhar. Computador, neste contexto, significa qualquer coisa que tenha capacidade de processamento.
* Existem diferentes linguagens de programação de acordo com as necessidades e metódos de implementação de algoritmos possíveis (o que chamamos de paradigma).

## Exercícios

Você será considerado apto a mudar para o próximo módulo se obter 100% (4 acertos) de aproveitamento.