Aprendendo cada tipo de linguagem de programação

24

Ouvi várias vezes que todo programador deve aprender um de cada tipo de linguagem. Agora, isso não é necessariamente verdade, mas acredito que é uma boa ideia.

Eu aprendi uma linguagem processual (Perl), mas quais são os outros tipos?

Quais são as diferenças entre eles e quais são alguns exemplos de cada um?

Dinâmico
fonte
8
Você deve estar ciente de que existem inúmeras maneiras sobrepostas de categorizar idiomas. O mais comum é o paradigma de programação, mas mesmo assim existem distinções maiores e menores, muitos eixos completamente separados e muitas linguagens caem em vários paradigmas.
11
Eu esqueceria as categorias - se você estiver realmente interessado em aprender um idioma, sugiro Lisp e Scala, se você puder lidar com aqueles dois que você cobriu muito terreno.
Bill K
3
O conselho de Peter Norvig : Aprenda pelo menos meia dúzia de linguagens de programação. Inclua uma linguagem que suporte abstrações de classe (como Java ou C ++), uma que suporte abstração funcional (como Lisp ou ML), uma que suporte abstração sintática (como Lisp), uma que suporte especificações declarativas (como modelos Prolog ou C ++), uma que suporta corotinas (como ícone ou esquema) e uma que suporta paralelismo (como sisal).
Legends2k

Respostas:

34

Embora a terminologia esteja longe de ser padronizada, uma maneira comum de categorizar os principais paradigmas de programação em

  • Procedural
  • Funcional
  • Lógico
  • Orientado a Objeto
  • Genérico

Parece que você já sabe como é a programação procedural.

Em linguagens funcionais , as funções são tratadas como objetos de primeira classe. Em outras palavras, você pode passar uma função como argumento para outra função ou uma função pode retornar outra função. O paradigma funcional é baseado no cálculo lambda, e exemplos de linguagens funcionais são LISP, Scheme e Haskel. Curiosamente, o JavaScript também suporta programação funcional.

Na programação lógica , você define predicados que descrevem relacionamentos entre entidades, como president(Obama, USA)ou president(Medvedev, Russia). Esses predicados podem ficar muito complicados e envolver variáveis, não apenas valores literais. Depois de especificar todos os seus predicados, você pode fazer perguntas ao seu sistema e obter respostas logicamente consistentes.

A grande idéia na programação lógica é que, em vez de dizer ao computador como calcular as coisas, você diz o que são. Exemplo: PROLOG.

O paradigma orientado a objetos é, de certa forma, uma extensão da programação procedural. Na programação procedural, você tem seus dados, que podem ser tipos primitivos, como números inteiros e flutuantes, tipos compostos, como matrizes ou listas e tipos definidos pelo usuário, como estruturas. Você também tem seus procedimentos, que operam nos dados. Por outro lado, no OO, você tem objetos, que incluem dados e procedimentos. Isso permite que você tenha coisas legais como encapsulamento, herança e polimorfismo. Exemplos: Smalltalk, C ++, Java, C #.

A programação genérica foi introduzida pela primeira vez em Ada em 1983 e tornou-se difundida após a introdução de modelos em C ++. Essa é a idéia de que você pode escrever código sem especificar os tipos de dados reais nos quais ele opera e fazer com que o compilador descubra. Por exemplo, em vez de escrever

void swap(int, int);
void swap(float, float);
....

você escreveria

void swap(T, T);

uma vez e faça com que o compilador gere um código específico para o Tque quer que seja, quando swap()é realmente usado no código.

A programação genérica é suportada em vários graus por C ++, Java e C #.

É importante observar que muitas linguagens, como C ++, suportam múltiplos paradigmas. Também é verdade que, mesmo quando se diz que uma linguagem suporta um paradigma específico, ela pode não suportar todos os recursos do paradigma. Sem mencionar que há muita discordância sobre quais recursos são necessários para um paradigma específico.

Dima
fonte
2
Em qual categoria o SQL se enquadra?
21411 Kirk Kuykendall
O @KirkKuykendall SQL seria uma linguagem especializada ou "pequena".
Kevin Lacquement
17
SQL é uma linguagem declarativa. Você diz o que quer, e descobre como obtê-lo. (Línguas "lógico" como Prolog são um subconjunto diferente de linguagens declarativas)
Izkata
3
Poderíamos ter uma descrição processual, a fim de tornar a resposta mais completa?
deworde
3
Resumo @Dima Nice. No entanto, um nitpick relativamente menor: "programação genérica" ​​não surgiu do uso de modelos em C ++ e também é usado com muita frequência em linguagens funcionais como Haskell.
Andres F.
11

As linguagens de programação possuem vários recursos principalmente ortogonais; o mais proeminente reside no paradigma ou paradigmas que eles apóiam. O artigo da Wikipedia cobre paradigmas exaustivamente; os paradigmas mais importantes são provavelmente os seguintes:

  • Processual / Estruturado
  • Funcional
  • Orientado a Objeto
  • Orientado a eventos e orientado a aspectos
  • Genérico
  • Lógica

Mas os idiomas também diferem de outras maneiras:

  • Sistema de digitação (digitação dinâmica vs. estática e tipos forte vs. fraco)
  • Criar processo e ambiente de tempo de execução (interpretado, compilado por bytecode, totalmente compilado)
  • Gerenciamento de memória (manual como C / C ++, coleta automática de lixo obrigatória como Java, GC opcional como D, ...)
  • Disciplina de avaliação (ansioso versus preguiçoso; a maioria dos idiomas está ansiosa por padrão, mas muitos fornecem construções preguiçosas)
  • Regras de escopo (compare como o escopo funciona em PHP, Javascript e C, três idiomas que são bastante semelhantes em termos de sintaxe)
tdammers
fonte
2

Atualmente, existem vários paradigmas de programação em voga:

  • Orientado a objeto - VB.NET, C #, Java se enquadram nessa categoria. O código é organizado em torno de objetos que possuem comportamento e dados relacionados e que se comunicam transmitindo mensagens.
  • Funcional - Haskel, Scheme, Lisp e F # se enquadram nessa categoria. Funções puras que não têm efeitos colaterais. Pense em funções como em matemática. Muitas vezes, pode-se estender a própria linguagem através de suas construções.
Oded
fonte
Estes são os únicos outros tipos?
Dinâmico
@ perl.j - Não, mas esses são os principais que veem uma ampla disseminação nos dias de hoje. Veja wikipedia - Paradigma de programação .
Oded
@ perl.j também é baseado em Stack: como Forth e Postscript. Lógica: como o Prolog.
Jetti
2
E o tipo zeroth é C;)
yati sagade
A verdadeira questão é quantos deles um desenvolvedor precisa para codificar efetivamente a maioria dos problemas de programação.
Jeffo
0

Prolog é uma linguagem de programação lógica e é relativamente fácil de começar. Requer um pensamento completamente diferente da programação procedural, portanto, é bom explorar quando você está tentando esticar seu cérebro.

Se você for para a faculdade, faça um curso sobre Linguagens de Programação, uma vez que é voltado para a introdução dos diferentes tipos de linguagens de programação e para o que elas são melhor utilizadas.

c_maker
fonte
0

A maioria das linguagens convencionais mescla aspectos da programação imperativa, funcional e declarativa. As linguagens de nicho tendem a ser mais exóticas ou a introduzir novas idéias interessantes que, por um motivo ou outro, não são adequadas para programação de uso geral. Alguns, de maneira alguma exaustivos, exemplos:

  • Idiomas de planilhas (Excel, Google Forms): projetados para manipular dados tabulares.
  • Idiomas de matriz (APL, J): projetados para processar rapidamente matrizes multidimensionais. Em J, (+/ % #)&.:*:calcula o RMS de uma matriz. Famoso por ser conciso, notório por ser ilegível.
  • Idiomas de automação (AutoHotkey, Bash): Projetado para simplificar tarefas comuns, como preencher formulários, fazer upload de arquivos, etc.
Hovercouch
fonte