sábado, 25 de julho de 2009

PROGRAMAÇÃO x CODIFICAÇÃO

O objetivo deste artigo é tentar diferenciar duas palavras, programação e codificação, que utilizamos na computação, algumas vezes com a mesma conotação. São duas palavras que estão intimamente relacionadas, talvez seja essa a razão das confusões.

Codificação é sinônimo de "geração do código fonte". A codificação sigifica escrever (utilizando uma linguagem de programação) as instruções que o computador deve realizar para alcançar um resultado.

Programação é um conjunto de técnicas e práticas voltadas para solucionar problemas computáveis (solúvel por meio computacional), incluindo técnicas para modelagem formal de um problema e técnicas de projeto de algoritmos.

Portanto, projetar um algoritmo para um problema faz parte da programação, mas se o trabalho do programador é só escrever um algoritmo pronto, então seu trabalho é de codificação.

Fora do meio acadêmico é muito comum associar "PROGRAMAÇÃO" com a acão/habilidade de programar com ênfase na tecnologia, ou seja, a programação é entendida como habilidade de CODIFICAR em alguma linguagem de programação (escrever, testar, depurar e manter código de programa).

No meio acadêmico a PROGRAMAÇÃO tem um sentido muito mais abrangente, extrapolando as fronteiras do campo de atuação da Engenharia de Software e das disciplinas de Linguagem de Programação.

A expressão PROGRAMAÇÃO é mais antiga que o surgimento das linguagem computacionais modernas. O termo PROGRAMAÇÃO já era usado na década de 30 com o objetivo de solucionar problemas reais por meio de equações matemáticas (o que chamamos hoje de programação matemática) que precisavam ser solucionados. Pelos meus achados, Dantzig, pioneiro da Programação Linear, na década de 40, usou o termo "Programming in a linear Structure" para definir a análise de problemas de "planejamento" (ou programação) para a força aérea americana. Apenas, com a disseminação do uso do computador, o termo "programação" também absorveu a codificação de algoritmo em uma determinada linguagem.

Logo, a "PROGRAMAÇÃO" é muito mais que a habilidade com uma certa linguagem de programação (C, Pascal, Java, Prolog, etc.) e com o desenvolvimento de software. Programação está relacionada com a habilidade de "resolver problemas computáveis". Ou seja, está relacionada com a "construção de algoritmos" (digo algoritmo e não programa). Essa conotação da PROGRAMAÇÃO pode passar despercebida, mas basta observar o propósito da tão conhecida "Maratona de Programação" da SBC (http://maratona.ime.usp.br/info09.html). Para participar dessa maratona não basta ser um bom CODIFICADOR em alguma linguagem de programação. Ser expert em alguma linguagem de programação ou paradigma de linguagem de programação não é suficiente, logo, a Maratona de PROGRAMAÇÃO não é uma Maratona de CODIFICAÇÃO.

Outros exemplos conhecidos na computação em que a palavra PROGRAMAÇÃO está relacionada com a idéia de "resolver problemas com algoritmos": Programação Paralela, Programação Matemática, Programação Linear, Programação Inteira, Programação Dinâmica, Programação Estocática, Programação Por Restrição, Programação Não Linear, Programação Heurística, etc. Algumas dessas técnicas de programação são utilizadas na Maratona de Programação.

Um outro exemplo prático relacionado com codificação tem sido os treinamentos "Coding Dojo". O termo “Dojo” é muitas vezes usado nas artes marciais para definir o “local de treino” onde os praticantes se reúnem para treinar. Portanto, a tradução simples de "Coding Dojo" signfica ''local de treinamento de codificacao''. O foco é treinamento em alguma ferramenta de desenvovimento de software.

Conclui-se que Técnicas de Programação são diferentes de Técnicas de Codificação. A codificação está relacionada com a atividade de escrever código de programa em alguma linguagem de programação. Logo, a CODIFICAÇÃO é parte da PROGRAMAÇÃO. A Linguagem de Programação não é o FIM da programação, mas é MEIO para conseguirmos a resolução de problemas juntamente com a codificação. Não podemos confundir "Paradigmas de Programação" com "Paradigmas de Linguagem de Programação", afinal, a linguagem de programação é só uma ferramenta que possibilita a resolução de problemas por meios computacionais, ou seja, é o meio pelo qual o algoritmo para solucionar um problema pode ser transferido para o computador.

É comum encontrarmos na literatura os Paradgmas de Linguagem de Programação (Orientação a Objetos, Estruturada, Imperativa, Declarativa, etc.) sendo denominados de "Paradgmas de Programação". Essa nomenclatura induz o entendimento que a linguagem de programação seja o elemento exclusivo de todo o processo da PROGRAMAÇÃO, mas sabemos que isso não é verdade.

Em resumo, entendo que isso é resultado de vícios que herdamos da comunidade não acadêmica, da mídia e, também, de profissionais da área. A consequência disso não está somente no CONCEITO, mas reflete drásticamente na prática, na formação profissional e na visão empresarial. Estamos falando de quebra de paradgma, de mudança de hábitos, de mudança de cultura. Isso pode levar uma geração inteira, mas entendo que temos que começar a mudança.

3 comentários:

  1. muito boa essa lista...

    ResponderExcluir
  2. Ademir, nestes termos, como poderiamos definir a descrição de um circuito utilizando VHDL (VHSIC Hardware Description Language)? Codificação ou Programação?

    Abraço.

    ResponderExcluir
  3. Oi Ademir, entendi o que quis dizer, mas então um programa e um algoritmo seriam a mesma coisa? E o que se chama "leigamente" de programa seria na verdade o código (e daí a expressão "codificação"?).

    Como eu disse, a idéia está clara, mas fiquei com essa dúvida que apenas a nível de... semântica.

    ResponderExcluir