PROGRAMAÇÃO

A. Considerada como operação do espírito, é o ato de traduzir um modelo mental de resolução de problemas ou um algoritmo abstrato para uma forma rigorosa e executável. "Programming is the art of telling another human being what one wants the computer to do." Donald KNUTH, Literate Programming.

B. No sentido técnico estrito, designa a atividade de concepção, codificação, teste e manutenção do código-fonte de software. Consiste na criação de sequências de instruções, escritas numa linguagem formal (linguagem de programação), destinadas a serem interpretadas ou compiladas por um computador para alterar o seu estado ou produzir um resultado determinado.

C. Numa acepção mais vasta, próxima da engenharia, a programação é a arte de gerir a complexidade. Compreende orquestrar a interação entre componentes distintos, abstraindo detalhes de hardware e criando hierarquias lógicas. "The art of programming is the art of organizing complexity, of mastering multitude and avoiding its bastard chaos as effectively as possible." Edsger W. DIJKSTRA, Notes on Structured Programming.


Crítica

É necessário distinguir rigorosamente, como o fazem os profissionais experientes, entre Codificação (Coding) e Programação (Programming). A codificação é a etapa final, a tradução mecânica da lógica para a sintaxe de uma linguagem (ex: C++, Python). A programação engloba a codificação, mas subordina-a à análise do problema, à estruturação dos dados e à concepção dos algoritmos. Leslie LAMPORT nota que "Coding is to programming what typing is to literature".

Além disso, a definição de programação varia consoante o paradigma adotado (ver Observações): 1. Na Programação Imperativa, programar é prescrever como o computador deve fazer algo, detalhando o controle de fluxo e as mudanças de estado. 2. Na Programação Declarativa, programar é descrever o que se deseja obter, deixando ao sistema a responsabilidade de determinar o método de execução.


Observações

A origem histórica do conceito remonta a Ada LOVELACE (1843), que compreendeu que a Máquina Analítica de Babbage poderia manipular quaisquer símbolos se estes seguissem regras lógicas, e não apenas números: "A Máquina Analítica tece padrões algébricos tal como o tear de Jacquard tece flores e folhas."

Historicamente, antes da arquitetura de Von Neumann, programar significava frequentemente alterar fisicamente a configuração da máquina (hardware), ligando cabos e ajustando interruptores (como no ENIAC). Hoje, distingue-se a programação de hardware (via HDL - Hardware Description Language, como VHDL ou Verilog) da programação de software.

A evolução das linguagens de programação reflete uma tentativa constante de elevar o nível de abstração, afastando-se da linguagem da máquina (zeros e uns) para se aproximar da linguagem humana ou matemática.

Exemplos de Paradigmas:

  1. Programação Imperativa/Procedural (Linguagem C): O foco está no controle explícito da memória e dos passos.

    // Exemplo: Somar números de 1 a 10

    int soma = 0;

    for (int i = 1; i <= 10; i++) {

    soma = soma + i; // Ordem explícita de alteração de estado
    

    }

  2. Programação Orientada a Objetos (Java/C#): A programação é vista como a modelagem de entidades que trocam mensagens.

    Pessoa usuario = new Pessoa("Maria");

    usuario.falar();

  3. Programação Funcional (Haskell/Lisp): A programação é a avaliação de funções matemáticas.

    soma = sum [1..10] -- Definição do resultado como a soma de uma lista

  4. Programação Lógica (Prolog): Define-se uma base de conhecimentos e regras; a execução é uma prova de teorema.

    humano(socrates).

    mortal(X) :- humano(X).

    % Consulta: ?- mortal(socrates). Resposta: true.