Por que existem tantas linguagens de programação?

Existem mais de 250 linguagens de programação. Alguns são amplamente utilizados no mundo dos negócios, como C ++, Java, JavaScript, Ruby e Python. Outros são principalmente acadêmicos, como o Lisp. Ainda assim, outros são obscuros e esotéricos. Você pode estar se perguntando: "Por que existem tantas linguagens de programação?"

É como perguntar: "Por que existem tantos campos da matemática? Temos álgebra, por que precisamos de geometria, cálculo e mecânica de fluidos?" Toda linguagem de programação visa resolver um problema específico. Mais de um idioma pode resolver o mesmo problema, mas cada um abordará de maneira diferente.

Aqui estão algumas das principais diferenças nas linguagens de programação.

Legibilidade e Sustentabilidade

Algumas linguagens são mais fáceis para um ser humano ler, o que torna mais fácil para um programador colaborar no código de outro programador. O Python, por exemplo, tem a reputação de ser fácil de ler. Ele reforça o recuo estrito das linhas para definir seus blocos de código, o que facilita o acesso a um programa e a sua estrutura. Outras linguagens também permitem a indentação, mas como uma escolha estilística, não como um requisito.

Em contraste, o Perl é uma linguagem que permite ao programador escrever o mesmo programa de muitas maneiras diferentes, mas a finalidade do programa pode não estar imediatamente clara para outro leitor. Tal programa pode ser conveniente para escrever, mas difícil para alguém entender e editar.

atuação

Algumas linguagens são interpretadas e algumas são compiladas. Um programa compilado deve ser processado por um pré-processador, compilador e vinculador antes de poder ser executado pelo computador. Este software intermediário especializado realiza análise lexical, traduzindo o programa em linguagem de máquina. Também pode otimizar as instruções resultantes, procurando maneiras inteligentes de acelerar o funcionamento do programa.

Normalmente, os programas compilados têm melhor desempenho do que os programas interpretados. Por exemplo, C, C ++ e Objective-C são linguagens que normalmente compilam para código de máquina muito rápido. Videogames e softwares de sistema são frequentemente escritos nesses idiomas, para extrair todo o desempenho do CPU.

Por outro lado, os programas de linguagem interpretada são executados por um software chamado intérprete, que executa as instruções do programa sem primeiro compilá-las para código de máquina. Embora o interpretador às vezes analise o programa em uma linguagem intermediária, resultando em alguma otimização, o desempenho nunca é tão rápido quanto o código de máquina compilado.

Um dos principais benefícios das linguagens interpretadas é o seu potencial para o desenvolvimento interativo. Como o programa inteiro não precisa ser compilado antes de poder ser executado, o código pode ser executado de forma interativa. Você está familiarizado com isso se já usou a linha de comando do seu sistema operacional: você insere um comando e vê os resultados. Essa interface é chamada de REPL, ou "leitura-impressão-impressão-loop". Um REPL permite que você execute comandos (ou blocos de comandos) individualmente e visualize os resultados. Lisp, Perl, Python, NodeJS, Ruby e JavaScript são exemplos de linguagens interpretadas que podem ser executadas em um REPL.

Interfaces de comando interativas, como o Prompt de Comando do Windows e o bash, também se qualificam como linguagens interpretadas. Programas nestes "idiomas" são chamados de arquivos em lote ou scripts de shell.

Casos de uso específicos

Geralmente, as linguagens são especialmente boas para escrever tipos específicos de programas. Por exemplo, o NodeJS é projetado para gravar aplicativos de encadeamento único para a web. Sua E / S de arquivo não-bloqueante permite que os programas continuem operando ("não seja bloqueado") enquanto esperam que os dados necessários sejam transmitidos.

Outro exemplo é a linguagem de programação R, especializada em análise estatística. Programas escritos em R beneficiam-se de testes e modelos analíticos integrados e ferramentas para manipular eficientemente grandes quantidades de dados.

Facilidade de prototipagem

Algumas linguagens permitem prototipagem rápida: o programador pode "apenas começar a escrever" e construir componentes e componentes até que o programa esteja totalmente formado.

Por exemplo, o site Reddit foi originalmente escrito em Lisp. Depois que o Reddit foi lançado, todo o site foi reescrito em Python por várias razões, tanto técnicas quanto logísticas. Embora a refatoração de todo o código fosse um grande empreendimento, os proprietários do site não expressaram arrependimentos. Em um post de 2005, eles comentaram que o Lisp permitiu que eles criassem algo sem saber exatamente o que se tornaria.

Bibliotecas Disponíveis

Normalmente, quando você inicia um novo projeto de programação, não quer reinventar a roda. Ou seja, você não quer escrever funções para tarefas comuns como calcular uma raiz quadrada ou encontrar a primeira ocorrência de um caractere em uma string. Por esse motivo, quase toda linguagem de programação fornece um conjunto de bibliotecas padrão de funções comuns. Os programadores podem preferir um idioma por causa das bibliotecas que ele fornece.

Por exemplo, as bibliotecas padrão C fornecem funções de alto desempenho para muitas operações de sistema de baixo nível. O Perl fornece muitas bibliotecas robustas e também o repositório CPAN de módulos para download e uso em seu programa. O Python fornece uma ampla gama de funções e módulos internos para quase tudo sob o sol. O Clojure, uma linguagem semelhante a Lisp que é executada na JVM, se beneficia da capacidade de executar código a partir das extensas bibliotecas existentes de objetos e métodos Java.

Segurança

Nem todas as línguas se prestam a escrever código seguro. A linguagem de programação C, por exemplo, é notória por ter recursos (ou falta deles) que podem levar a vulnerabilidades devastadoras, como desreferenciamento de ponteiro nulo. Outras línguas tentam abordar essas preocupações com regras mais rigorosas.

Por exemplo, algumas linguagens colocam restrições sobre quais operações podem ser executadas em vários tipos de dados. A mais estrita dessas linguagens é às vezes chamada de "fortemente tipificada" e pode oferecer tranquilidade a programadores que priorizam segurança e estabilidade no desenvolvimento de software. Exemplos de idiomas fortemente tipados incluem Rust, Nim, Ocaml e Haskell.

Os idiomas também podem impor limites à "mutabilidade", a capacidade de um objeto de dados mudar de estado. Em vez de objetos cujos valores são sobrescritos, esses idiomas favorecem objetos "imutáveis": valores na memória que não podem ser alterados sem exceção explícita. Objetos imutáveis ​​atraíram interesse à medida que os processadores multi-core se tornaram difundidos, devido à sua tendência de promover a "segurança dos segmentos". Em um programa thread-safe, mais de um processador pode operar em um conjunto de dados com um risco de erro muito reduzido. Idiomas que priorizam objetos imutáveis ​​incluem Rust e Clojure.

Suporte da comunidade

Ao escrever um programa em um novo idioma, é útil ter acesso a uma comunidade ativa e apaixonada de desenvolvedores que usam ativamente e contribuem para o trabalho do outro. Antes de escolher uma linguagem de programação, saiba mais sobre a comunidade desse idioma. Alguns idiomas têm uma base de usuários empolgante, dinâmica e vibrante da qual você pode querer fazer parte e outros idiomas podem ter pouca ou nenhuma comunidade.

Expressividade

Ao escrever um programa, os pensamentos e habilidades de resolução de problemas do programador estão "falando" através dessa linguagem. Como resultado, os programadores tendem a preferir linguagens em que se sentem confortáveis ​​em se expressar. O que faz uma linguagem e um programador funcionarem bem juntos é difícil de definir, no entanto. Por fim, a única maneira de saber com qual idioma você se sente confortável é usar idiomas diferentes para projetos diferentes e compará-los por si mesmo.