Qual a melhor linguagem de programação?
Tags: development, programming, beginners, paradigm
Published: 2023-05-16 01:14:08

Fala pessoal, tudo bem?

Pra você, qual a melhor linguagem de programação (LP)?

A resposta correta é... Depende!

## Lá vem o depende...

Pois é, isso mesmo. Saber qual a melhor LP depende do contexto, da aplicação, do problema, do que precisa na aplicação, a arquitetura do cliente. E esse contexto precisa ser analisado de modo que essa escolha seja a melhor para a situação problema e não porque o colega A prefere a LP X ou Y.

Vamos por partes:

### Antes de tudo: O que é uma LP?

---

Esse conceito peguei [daqui](https://rockcontent.com/br/blog/linguagem-de-programacao/).

> É uma linguagem formal que, através de uma série de instruções, permite que um programador escreva um conjunto de ordens, ações consecutivas, dados e algoritmos para criar programas que controlam o comportamento físico e lógico de uma máquina.

---

**1. LPs de baixo nível**
 a. Linguagem de máquina: coleção de binários que o computador lê e interpreta.
 b. Linguagem Assembly: primeira tentativa para uma linguagem próxima da usada por seres humanos.

**2. LPs de alto nível**
Essas usam tradutores (a) ou compiladores (b):
 a. os códigos são executados à medida que são traduzidos.
 b. os códigos são traduzidos de uma só vez.

---

### O que se leva em consideração em um projeto de LP

É importante ter alguns pontos que devemos levar em consideração quando vamos escolher uma LP para um projeto, como nos trás Sebesta (2011):

![Tabela 1 Critérios de avaliação de linguagens e as características que os afetam](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d0yj3pu531aht62sd8d5.png)

* A **legibilidade** diz respeito à facilidade com a qual os programas podem ser lidos e entendidos;
* A **facilidade de escrita** é a medida da facilidade que uma linguagem pode ser usada para criar programas;
* A **confiabilidade** diz respeito ao quanto um programa está de acordo com suas especificações em todas as condições;
* O **custo** diz respeito a treinar programadores para usar a LP,  escrever programas na linguagem,  compilar programas na linguagem,  executar programas escritos em uma linguagem, sistema de implementação da linguagem, a confiabilidade baixa e manter programas (correções + modificações).

Algumas características que devem ser levadas em consideração: 
a. simplicidade geral (construções básicas e multiplicidade de recursos);

b. ortogonalidade ( um conjunto construções primitivas pode ser combinado a um número de formas para construir as estruturas de controle e de dados da linguagem);

c. tipos de dados (presença de mecanismos adequados para definir tipos e estruturas de dados);

d. projeto de sintaxe (tem a ver com o formato dos identificadores, as palavras especiais e a forma e semântica);

e. suporte à abstração (habilidade de definir estruturas em que muitos dos detalhes sejam ignorados);

f. expressividade (existência de operadores que permitem muitas computações com um programa muito pequeno);

g. verificação de tipos (execução de testes para detectar erros de tipos em um programa);

h. tratamento de exceções (habilidade de um programa de interceptar erros em tempo de execução);

i. restrição de apelidos (permitidos quando é possível ter um ou mais nomes para acessar a mesma célula de memória);

j. portabilidade (a facilidade com a qual os programas podem ser movidos de uma implementação para outra);

k. reusabilidade (diminuir a necessidade de criar diferentes subprogramas que implementam o mesmo algoritmo em diferentes tipos de dados);

l. generalidade (a aplicabilidade da LP a uma ampla faixa de aplicações);

---

## Programação procedural X Computação paralela
Na programação procedural, o programador descreve de forma detalhada o que a máquina deve fazer.

Já na computação paralela, resolvem-se os problemas com vários computadores trabalhando ao mesmo tempo, isso com o foco em um único alvo.

---

## Os paradigmas

Dando um gugôu você encontra qual o significado do que é um paradigma: um exemplo que serve como modelo ou padrão.

Na programação, temos diversos paradigmas, diversos modelos e padrões para resolver diversos problemas:
**1. Imperativo:** o foco da solução está em como o problema deve ser resolvido pela máquina (procedural). Usado quando a aplicação requer manutenção e mudanças a longo prazo. Linguagens como Pascal e Fortran usam esse tipo de paradigma.

**2. Orientado a Objetos:** os atributos e comportamentos estão contidos dentro de um único objeto, geralmente usam classes para definir esses objetos. Além disso, as aplicações são desenvolvidas e interpretadas por diferentes plataformas. C++, Java, JavaScript e Python são exemplos de projetos de LP orientados a objetos.

**3. Orientado a Eventos:** aqueles que definem a execução de determinadas funções conforme os eventos são disparados pelo usuário. Visual Basic e Delphi são exemplos que usam esse paradigma.

**4. Funcional:** indicado quando a resolução do problema querer, majoritariamente, de uma base matemática. Aqui se destaca o uso das funções e, na hora de resolver um problema, o divide em blocos onde são implementadas funções. Linguagens que usam esse paradigma são LISP e Haskell.

**5. Declarativo:** foca em o que deve ser resolvido, nesse paradigma são utilizadas verdades lógicas imutáveis, possuindo nível de abstração maior que os outros paradigmas, XML e HTML são exemplos de linguagens de marcação que usam esse paradigma.

**6. Lógico:** ou restritivo é o uso de uma notação lógica formal para comunicar processos computacionais para um computador, sendo muito utilizado para resolver problemas na área de Inteligência Artificial, baseando-se em análises lógicas e matemáticas, além disso são usados fatos, regras de inferências e busca. A Prolog é uma LP que faz uso desse paradigma.

---

Muita coisa pra processar? É assim mesmo! Consegue perceber agora que não existe LP perfeita para todas as situações? Depois entro mais a fundo nesse tema de Conceitos de LPs. Recomendo a leitura do livro Conceitos de Linguagens de Programação do Robert W. Sebesta, nesse post usei a 9ª edição como base.