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.
Um algoritmo é uma sequência lógica finita de passos para realizar uma tarefa ou resolver um problema. Em nosso dia a dia utilizamos algoritmos para realizar nossas atividades, definindo a sequência de atividades que devemos fazer para atingir um objetivo. Um exemplo simples é uma receita. Um algoritmo é, num certo sentido, um programa abstrato — dizendo de outra forma, um programa é um algoritmo concretizado. Os programas são visualizados mais facilmente como uma coleção de algoritmos menores combinados de um modo único — da mesma forma que uma casa é construída a partir de componentes.[1]
Dessa forma, um algoritmo é uma descrição passo a passo de como o computador irá executar uma operação específica, como, por exemplo, uma ordenação. Um programa, por outro lado, é uma entidade que na verdade implementa uma ou mais operações de forma que seja útil para as pessoas que o utilizam.[1]
Compilação: tradução do código fonte legível pelo homem em código executável pela máquina, o que é feito através de compiladores e outras ferramentas
Testar o programa para ter a certeza de que funciona; se não, regressar ao passo 3
Estes cinco passos são colectivamente conhecidos como engenharia de software. A programação põe ênfase nos passos 2, 3 e 4. A codificação põe ênfase no passo 3. O termo coder, por vezes usado como sinônimo para programador, pode tornar-se aviltante porque ignora as capacidades necessárias para lidar com os outros quatro passos.
Heron de Alexandria no século primeiro inventou teatros automatizados que usavam programação análoga para controlar os fantoches, portas, luzes e efeitos de som.
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 problemasastronômicos. No entanto, todos os ingredientes estavam lá: ele trabalhou um laboratório de computação para a Universidade de Colúmbia com equipamentos fornecidos pela IBM, completos com uma divisão de serviço de atendimento ao cliente, e consultores de engenharia 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. 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.
A aprendizagem da programação tem enfrentado vários desafios. Por ser de difícil aprendizagem, vários estudos propõe soluções para ajudar no processo de aprendizagem da programação, quer a nível do ensino secundário, quer universitário[4] por diversas razões.[5][6][7] De entre as soluções, destacam-se sistemas de apoio,[8] uns que permitem que os estudantes visualizem de imediato o resultado do código que vão escrevendo,[9] outros estudos também sugerem o uso de artefatos como a robótica para que os alunos interajam com algo tangível como o robot, melhorando a interação e motivando ao mesmo tempo.[10] Foram realizados estudos que provam que o uso da gamificação[11][12] em contextos de aprendizagem da programação, produziu resultados com sucesso,[13] aumentando o nível de interação dos alunos, bem como a motivação para continuar a aprender.[14][15][15]
↑ abMoura, Arnando V. (3 de Novembro de 2009). «MC102 - Algoritmos»(PDF). Instituto de Computação da Universidade Estadual de Campinas. Consultado em 17 de Agosto de 2017
↑Fuegi, J.; Francis, J. (2003). «Lovelace & babbage and the creation of the 1843 'notes'». IEEE Annals of the History of Computing. 25 (4). 16 páginas. doi:10.1109/MAHC.2003.1253887