Paradigmas de Programação
Programação Funcional
Modela um problema computacional como uma coleção de funções matemáticas, cada uma com um espaço de entrada e resultado. Isso separa a programação funcional das funções que possuem o comando de atribuição. Por exemplo, CML, LISP, Scheme, Haskell;
Programação dinâmica
Consiste em uma técnica para resolução de problemas complexos que se baseia na divisão de um problema em subproblemas, os quais são resolvidos separadamente. Ela é muito útil quando você está tentando otimizar algo em relação a um limite. Todas as soluções em programação dinâmica envolvem uma tabela e os valores nas células são, geralmente, o que você está tentando otimizar. Cada célula é um subproblema, então pense em como dividir este subproblema em outros subproblemas.
Programação Imperativo
Os comandos são escritos na mesma ordem de execução (ou seja, passo a passo). Por exemplo, Cobol, Fortran;
Programação Orientada a Objetos
Fornece um modelo na qual um programa é uma coleção de objetos que interagem entre si, passando mensagens que transformam seu estado. Por exemplo, Java, C++;
Programação Declarativa
Permite um programa modelar um programa declarando qual resultado ele deve obter, ao invés de como ele deve ser obtido. Por exemplo, PROLOG.