Como diferenciar linguagens de programação
Tags: beginners, programming, paradigm, language
Published: 2021-11-15 04:11:21

Uma das perguntas mais frequentes de quem esta começando a aprender computação é: "Por qual linguagem de programação eu começo?". 
Essa é uma dúvida genuína de quem ainda não conhece nenhuma linguagem, e não existe resposta certa. Geralmente as pessoas respondem baseadas em suas experiências e conhecimentos, ou utilizam algum critério como lista de linguagens mais utilizadas. 
Porém sem uma explicação mais profunda e um entendimento sobre alguns conceitos, essa escolha se torna apenas subjetiva.
 
O intuito deste texto é explicar alguns conceitos relativos as linguagens de programação, assim como mostrar de maneira simplificada algumas diferenças entre elas.
Conhecer estes conceitos e diferenças pode ajudar a entender um pouco das linguagens antes de escolher uma para aprender. Outros critérios podem e devem ser utilizadas nesta escolha, como por exemplo a finalidade do programa que se quer desenvolver, porém não serão abordados aqui.
 
Antes de tudo, algumas definições preliminares:
**Linguagens de programação** são linguagens formais que contem um conjunto de instruções. Quando se diz "linguagem formal" significa que elas possuem regras como qualquer outra linguagem natural (por exemplo a língua portuguesa). Elas são utilizadas em computadores no desenvolvimento de programas (softwares/aplicativos). 
Um programa são **instruções** que realizam uma tarefa específica executada por um computador. É através da linguagem de programação que o programador informa as instruções para o computador realizar determinada tarefa. O arquivo onde são gravadas as instruções a serem executadas é chamado **código fonte**.
 
Serão abordadas 3 características das linguagens: o paradigma de programação que ela implementa, o sistema de tipagem e a sintaxe. Existem outras características que diferenciam as linguagens uma das outras, porém conhecendo bem essas 3 características já é um grande passo para diferenciá-las.
 
##Paradigma de programação
A primeira maneira de diferenciar as linguagens são os paradigmas que elas implementam.
Um paradigma de programação é um estilo (ou uma maneira padrão) de se programar. Algumas linguagens são mais fáceis serem utilizar em um paradigma do que em outros.
Porém os paradigmas não são excludentes. Um programa escrito em uma linguagem pode apresentar múltiplos paradigmas no seu código.
 
 
Os 3 principais paradigmas são:
 
- **Procedural**
Também conhecida como estruturada, este paradigma concentra o foco da implementação em como realizar as tarefas, ou seja, no que precisa ser feito.
 Isto é realizado através da criação de procedimentos, também chamados de funções ou sub-rotinas, onde o código é implementado. 
 Os dados são passados para as rotinas, onde são utilizados ou alterados.
Exemplos de linguagens: C, Pascal, Fortran, Cobol, Go, Lua, Perl, etc.
 
- **Orientada à objetos**
Neste paradigma o foco está nos dados e em como eles se comunicam. São utilizadas estruturas chamadas de classes para encapsular os dados e os métodos que os manipulam.
Exemplos de linguagens: Simula, Smalltalk, Java, C++, Ruby, Python, PHP, etc.
 
- **Funcional**
Na programação funcional o foco está nas funções, o fluxo do controle da execução do programa é feito combinando chamadas de funções
Trabalha com dados imutáveis
Exemplos de linguagens: Erlang, Prolog, Clojure, Javascript, Lisp, Elixir, etc.
 
Muitas linguagens implementam recursos de mais de um paradigma, dificultando sua classificação. Existem muitas discussões e visões sobre os significados dos paradigmas, e alguns termos podem diferir de um autor para outro.
Conhecer os paradigmas de programação que uma linguagem implementa, as vantagens e desvantagens e a própria existência de cada paradigma é o primeiro passo para começar a pensar em como utilizá-la para desenvolver seus programas.
 
 
##Sintaxe 
A sintaxe das linguagens de programação consiste nas regras de utilização dos símbolos e palavras da linguagem. Muitas linguagens possuem estruturas e palavras semelhantes, o que facilita o aprendizado destas linguagens quando já se conhece uma linguagem semelhante.
Como exemplo, podemos citar o fato de Python 3.6 ter 33 palavras reservadas, enquanto Java 52.
As palavras reservadas são os comandos da linguagem que depois serão traduzidos para a linguagem de máquina. Entre as palavras reservadas mais comuns podemos citar: if, else, for, function, case, do, var. Além das palavras reservadas também é necessário conhecer as regras ou símbolos utilizados, como por exemplo a construção de blocos da linguagem. Algumas linguagens utilizam chaves { } para delimitar um bloco de comando (por exemplo em C), enquanto outras utilizam a própria identação (Python, por exemplo) ou palavras reservadas, como begin e end (Pascal).
Exemplo de código em C:
![Exemplo de código na linguagem C](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e9cv174wxldod15g0mrx.PNG)
Exemplo de código em Python:
![Exemplo de código na linguagem Python](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ifhsofn4gdhsp0ydxmvl.PNG)
Conhecer as palavras reservadas e o que elas fazem é um dos primeiros passos no aprendizado de uma nova linguagem.
 
##Sistema de tipagem
Outra característica que difere as linguagens de programação é o modo em que ela permite se trabalhar com os tipos de dados. Pense em tipo de dado como sendo a unidade mais básica de informação, por exemplo um número ou uma palavra.
Em algumas linguagens é preciso explicitar o tipo de dado em que o código está trabalhando no momento em que se está escrevendo o código, em outras o próprio compilador consegue trabalhar com os dados sem ter sido informado os tipos.
 
Pode-se classificar as linguagens da maneira que ela realiza a verificação dos tipos, entre fortemente ou fracamente tipada , e também em como ela manipula esses tipos, entre dinâmicamente ou estaticamente tipada.
 
**Tipagem Forte x Tipagem Fraca**
Em linguagens fortemente tipadas não existem conversões automáticas de tipos, ou seja, ao se declarar uma variável com um tipo ela será utilizada somente com aquele tipo.
Em linguagens fracamente tipadas, ocorre conversão automática, fazendo com que valores de diferentes tipos sejam utilizados sem problemas.

Como exemplo de linguagem considerada fortemente tipada podemos considerar o Python, onde ao realizar uma operação com uma variável do tipo String com uma do tipo Inteiro, ocorre o erro de tipo:
![Erro de tipo em Python](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mgg5l95tbxbsdl96wvxr.PNG)
 
**Dinamicamente x Estaticamente**
A checagem da tipagem dinamicamente ocorre em tempo de execução, e a própria linguagem escolhe o tipo de dado de acordo com o valor atribuído.
Já na abordagem estática a checagem da tipagem ocorre na compilação do código fonte, onde é verificado o tipo da variável que foi definido ou atribuído e não se permite alterar esse tipo.

A linguagem pode ser classificada como dinâmica ou estática e com tipagem fraca ou forte.
Exemplos de linguagens com tipagem dinâmica e forte: Python, Ruby, Erlang, Clojure;
Exemplos de linguagens com tipagem dinâmica e fraca: JavaScript, PHP, Perl;
Exemplos de linguagens com tipagem estática e forte: C#, Java, Scala;
Exemplos de linguagens com tipagem estática e fraca: C, C++;

Conhecer a classificação quanto a tipagem da linguagem ajuda a entender os possíveis erros que ocorrem assim como as restrições que são impostas.

Espero que este artigo tenha ajudado a entender um pouco mais os conceitos por trás das linguagens de programação. Programar pode ser uma atividade desafiadora no início, mas a cada novo conceito aprendido, a cada desafio concluído, fica mais divertido e prazeroso pensar logicamente na resolução de um problema computacional.

Qualquer sugestão ou dúvidas, só deixar um alo nos comentários ;D
Até o próximo!