Linguagens de programação: uma breve introdução contextualizada

Linguagens de programação: uma breve introdução contextualizada
André Santana
André Santana

Compartilhe

Introdução: qual a melhor Linguagem de Programação?

Pensando a respeito da programação de computadores e do que é necessário para se tornar uma pessoa desenvolvedora, talvez você já tenha se perguntado:

“Qual é a melhor linguagem de programação para começar na carreira dev?”

Ou mesmo:

“Qual linguagem vale realmente a pena aprender para criar qualquer programa?”

A resposta para essas perguntas é bem mais complexa do que parece, pois à medida que buscamos uma linguagem perfeita para criar nossas aplicações, podemos deixar de conhecer diversos recursos que contribuiriam com o nosso trabalho, aproveitando o que cada uma das linguagens de programação existentes têm para oferecer.

Pode parecer frustrante que, em um mundo com tanta informação, não tenhamos métricas claras e objetivas para definir qual linguagem de programação é a melhor. Por isso, te convido a mergulhar na leitura deste artigo e vamos olhar para essas perguntas de uma outra forma, entendendo as principais diferenças entre as linguagens mais populares e considerando que a escolha ideal está fortemente ligada ao propósito do que queremos desenvolver!

Vamos nessa?!

Ahh, se quiser dar uma olhada em um super conteúdo, para começarmos esta discussão, confira o vídeo do Fábio Akita!

A MELHOR linguagem de programação com Fabio Akita | #HipstersPontoTube

Banner de divulgação da Imersão IA da Alura em colaboração com o Google. Mergulhe em Inteligência artificial com a Alura e o Google. Serão cinco aulas gratuitas para você aprender a usar IA na prática e desenvolver habilidades essenciais para o mercado de trabalho. Inscreva-se gratuitamente agora!

O que é linguagem de programação?

Contextualizando

Pode ser que você já saiba que existem diferentes linguagens na programação, mas ainda não saiba qual seria a aplicabilidade de cada uma, ou seja, para que elas serviriam. Dessa forma, pode não ficar tão claro o que de fato as torna linguagens de programação. Então, vamos pensar na seguinte situação:

  • Imagine que você está em outro país e agora precisa se comunicar em um idioma que você não domina. Como garantir uma comunicação eficiente?

Nessa situação, temos algumas opções possíveis para fugir desse problema:

  1. Buscar alguma pessoa que fale o idioma para traduzir simultaneamente o que estamos falando;
  2. Tentar encontrar algum idioma em comum, que ambas as partes sejam capazes de falar.

Nenhuma das duas opções parece ser 100% viável. Uma tradução simultânea pode ser uma boa opção, mas parte das mensagens pode se perder durante a conversa. E embora a tarefa de encontrar um idioma em comum possa ser interessante, também não existe uma garantia de que perderemos alguns detalhes, como as gírias, por exemplo, na hora da troca de mensagens.

Vamos pensar em um segundo problema. Veja a figura abaixo:

Recorte de uma tela de troca de mensagens. A primeira mensagem diz*"Olá! Você pode me emprestar dois canetas coloridas?" Esta mensagem está alinhada a direita, dentro de um balão de diálogo, com fundo verde. Já a segunda mensagem diz "Sim!" e está alinhada à esquerda, dentro de um balão de diálogo, com fundo branco.

Neste trecho temos duas pessoas conversando e embora a primeira pessoa diga "Olá! Você pode me emprestar dois canetas coloridas?", havendo um problema na estrutura da frase, parece que a segunda pessoa é capaz de entender o que foi pedido.

Isso acontece porque, diferentemente dos computadores, as pessoas são capazes de se adaptar e compreender pequenas variações de seu idioma no processo de comunicação! Mas o que isso tem a ver com as linguagens de programação?

Tudo! As linguagens de programação, assim como em nosso primeiro problema, são linguagens que permitem a pessoa se comunicar com um computador! E assim como no exemplo dois, elas possuem regras estruturais, mas as máquinas não são tão capazes de se adaptar para entender que "dois canetas" quer dizer a mesma coisa que "duas canetas", como as pessoas.

Definição de Linguagem de Programação

Nós falamos o idioma português do Brasil, que assim como as linguagens de programação, possui um conjunto de símbolos, as letras do alfabeto. Diferentes maneiras de juntar tais símbolos formam as palavras. A estrutura de organização delas numa sentença é a sintaxe. Tais palavras e frases têm um significado (ou semântica) e o contexto nos permite entendê-lo melhor. Por isso fica claro para nós que "dois canetas" se refere à quantidade de canetas que temos.

Sendo assim, podemos dizer que as linguagens de programação nada mais são do que um idioma com regras de escrita, para garantir a comunicação com o computador! Mas então, por que temos que aprender tantas linguagens diferentes?

Para que serve a linguagem de programação?

Como mencionamos anteriormente, o computador não consegue se adaptar tão facilmente como o ser humano e é por isso que diversas linguagens são criadas. Assim nos comunicamos com a máquina de forma mais rápida e eficiente, dependendo do assunto que queremos conversar com ele, ou seja, do propósito, por exemplo, que tipo de programa queremos desenvolver!

Qual a linguagem de programação mais usada?

As linguagens de programação possuem muitas características diferentes entre si, desde a forma como as palavras e os símbolos especiais são definidos, até a forma como as "instruções" dadas ao computador são traduzidas até o momento de saírem das interfaces em que digitamos os códigos para serem encaminhadas aos processadores dos computadores.

Existem inúmeras estratégias para escolher uma linguagem de programação ideal, mas talvez, a primeira que você deva conhecer, está associada a consultar a comunidade dev! Isso mesmo!

Pessoas que desenvolvem têm uma das maiores e mais ativas comunidades técnicas dentre todas as profissões existentes e saber pedir ajuda pode ser um trunfo em qualquer fase de sua carreira.

Quais linguagens de programação a comunidade DEV indica?

1) Índice TIOBE

Podemos, inicialmente, recorrer a rankings de linguagens de programação para tentar entender as tendências do mercado. Veja a tabela abaixo, que apresenta um ranking construído com base no índice TIOBE da comunidade de programação:

Fevereiro 2023Fevereiro 2022Linguagem de ProgramaçãoClassificaçãoVariação na classificação
11Python15,49%+0,16%
22C15,39%+1,31%
34C++13,94%+5,93%
43Java13,21%+1,07%
55C#6,38%+1,01%
66Visual Basic4,14%-1,09%
77Javascript2,52%+0,70%

Fonte: TIOBE index

2) StackOverflow

Outra estratégia pode ser buscar em fóruns da comunidade, por exemplo, no bom e velho conhecido StackOverflow:

Um gráfico de barras que cresce na horizontal. O gráfico lista linguagens de programação. A primeira que aparece é JavaScript com 65,36%. A segunda (logo abaixo) é HTML/CSS com 55,08%. A terceira SQL com 49,43%. Em quarto lugar, Python 48,07%. Quinto lugar typescript com 34,83%. Java, em sequência com 33,27%. Bash/shell em seguida com 29,07%. As quatro últimas em sequência são C# com 27,98%, C++ com 22,55%, PHP com 20,87% e C com 19,27%. As barras são de cor gradiente vermelha e os textos estão escritos em cor branca

Fonte: Pesquisa do Stack Overflow

Veja que existe uma grande variação nos resultados , dependendo, é claro, do que é levado em consideração na construção dos tipos de ranking. No caso do Stack Overflow, foram levadas em consideração as opiniões de 71.547 pessoas, sendo que 8,72% dos respondentes estão aprendendo a programar, enquanto 91,28% são pessoas desenvolvedoras profissionais.

É importante ter proximidade com a comunidade, já que a partir das colaborações com as linguagens, serão encontradas mais informações, códigos e ajuda em páginas da web. Para saber mais sobre rankings do StackOverflow, você pode conferir no site da Developer Survey 2022.

Outra possibilidade é verificar quais tecnologias ou linguagens são utilizadas por empresas que desenvolvem software, uma vez que um dos propósitos por trás de suas dúvidas pode ser disputar aquela vaga mais que desejada!

3) StackShare

A comunidade também pode ajudar nisso. Consultando o website StackShare.io, por exemplo, é possível ver quais linguagens e ferramentas estão em alta de acordo com as companhias de tecnologia:

A imagem apresenta um recorte de tela de um app. No topo um painel de seleção com duas opções "Following" e "Trending", em que "Trending" está selecionado, e por conta disso está com fundo em cor azul. Abaixo, quatro linguagens são descritas com seus respectivos símbolos. Primeiro: javascript com seu logotipo à esquerda (fundo amarelo e JS). Em segundo: Python. Em terceiro: HTML5 e em quarto Java. A direita de cada uma das linguagens tem um botão que permite seguir a ferramenta. Na figura, o usuário segue javascript e html5, e não segue python e java.

Saiba mais: a melhor linguagem de programação

Já vimos alguns meios de identificar quais linguagens estão mais presentes no mercado e podem merecer nossa atenção. No entanto, é importante buscar também outras fontes de informação. Se você curte podcasts, pode ser legal ouvir o que a galera do Hipsters.Tech tem a dizer a respeito de linguagens de programação. Confira:

Melhor linguagem de programação – Hipsters Ponto Tech #300

Ouvir um pouco de:
Melhor linguagem de programação – Hipsters Ponto Tech #300

Uma outra forma de identificar a linguagem de programação ideal para dar o próximo passo na comunidade dev pode ser pela familiaridade com linguagens de programação já estudadas anteriormente. Vamos dar uma olhada nessa abordagem?

Estruturas de diferentes linguagens de programação

Quais são os tipos de linguagens de programação?

As linguagens de programação são ferramentas importantes para o desenvolvimento de software. As linguagens de programação podem ser classificadas em duas categorias principais:

  • As linguagens de alto nível, que são aquelas que se aproximam da forma como os seres humanos se comunicam; e
  • As linguagens de baixo nível, que são mais facilmente compreendidas pelos sistemas computacionais (ou seja, pela máquina).

Linguagens de alto nível e baixo nível

As linguagens de alto nível são caracterizadas por permitirem que os códigos escritos com elas sejam mais simples, oportunizando que pessoas desenvolvedoras sejam capazes de ler, editar, compartilhar, comentar ou revisar códigos escritos nessas linguagens de forma mais fácil quando comparado com as linguagens de baixo nível.

No entanto, as linguagens de baixo nível, por estarem mais próximas da forma como a máquina se comunica, são mais eficientes em termos de desempenho. Isso acontece pois como a forma com que as linguagens são escritas se aproxima das linguagens de máquina (código binário, por exemplo), são realizadas menos conversões, e por consequência, as instruções são direcionadas de uma forma mais próxima do hardware (sem camadas extras de abstração).

Classificação das linguagens

Dentro do grupo de linguagens de programação de alto nível, que serão o foco deste artigo, as linguagens podem ser classificadas quanto ao seu tipo de paradigma de programação.

Sendo definidas como linguagens:

  • Imperativas;
  • Orientadas a objetos;
  • Funcionais; e
  • Lógicas.

Nesta abordagem, a linguagem C++ pode ser tratada como multi-paradigma, pois trata-se de uma linguagem orientada a objetos, que também suporta programação imperativa.

Já a linguagem Java, por exemplo, também pode ser classificada como uma linguagem multi-paradigma, pois permite que os programas sejam escritos empregando o uso de programação orientada a objetos. No entanto, a linguagem também possui suporte para os conceitos de programação imperativa, e em versões mais recentes utiliza recursos do paradigma **funcional.

Assim como a linguagem Java, Python, Javascript e C# também são linguagens multi-paradigma e que suportam programação orientada a objetos, programação imperativa e programação funcional.

Comparação entre linguagens de programação

Para ilustrar como essas linguagens se diferem quanto a forma de escrita (sintaxe), vamos pensar em uma implementação que poderia, eventualmente, estar presente em um jogo de computador! Vamos imaginar a seguinte situação:

  • Você está implementando um novo game no formato de um RPG e nesta fase da criação do jogo, precisa implementar a funcionalidade que torna possível a um jogador ou jogadora escolher entre duas opções de caminhos distintos.

As alternativas são:

  1. abrir a porta da esquerda; ou
  2. abrir a porta da direita.

Veja a figura abaixo que ilustra a cena:

A imagem apresenta cinco círculos. No primeiro está escrito "Entrada". Ele está conectado a dois outros círculos. Um à esquerda, cuja mensagem em seu interior é "Porta 1" e outro à direita, onde lê-se "Porta 2". O círculo "Porta 1" está conectado a dois círculos. À esquerda, está associado a um círculo com a mensagem "Porta 3" e à direita, a outro círculo com a mensagem "Porta 4". Os círculos são de cor branca, com alguma transparência e ao fundo da imagem existe uma caverna com pouca iluminação.

Para resolver este problema vamos seguir o seguinte algoritmo:

  1. Definir a função principal (main), de acordo com a linguagem de programação abordada e quando houver;
  2. Criar uma variável que seja capaz de armazenar a opção do usuário (esquerda ou direita);
  3. Solicitar ao usuário que informe a opção desejada, armazenando a resposta em uma variável;
  4. Comparar a opção informada pelo usuário, utilizando um desvio condicional, que mostrará a sala de destino para jogador de acordo com a opção estabelecida;
  5. Se a opção for esquerda, a mensagem exibida será "Abrindo a Porta 1", dado que o jogador estará na "Entrada";
  6. Se a opção for direita, a mensagem exibida será "Abrindo a Porta 2", dado que o jogador está na "Entrada".

Agora que já temos ideia de como funciona esta solução, vamos implementar utilizando algumas das linguagens de programação mais presentes no mercado, são elas:

  1. C++;
  2. Java;
  3. C#;
  4. JavaScript;
  5. Python.

Ah, caso você queira se aprofundar nos aspectos teóricos de desvios condicionais ou operadores lógicos, que podem ser necessários para construirmos juntos a resposta para este problema, você pode consultar o material:

Bora lá!

1) Linguagem de Programação C++

1.1) O que é a linguagem C++ e para que serve?

A linguagem C++ pode ser tratada como uma extensão da linguagem C, que por sua vez, foi desenvolvida para se aproximar da linguagem de um computador e é bastante utilizada em:

  • Implementações de sistemas computacionais que exigem bastante desempenho; ou
  • Com ênfase no campo de sistemas embarcados.

Quando falamos de sistemas embarcados nos referimos a sistemas eletrônicos com poder de processamento e que são inseridos em um dispositivo ou produto, geralmente associados a algum hardware ou dispositivo físico.

Diariamente vemos alguns exemplos destes sistemas, como nas controladoras que gerenciam as funcionalidades das televisões ou no controle dos dispositivos presentes em automóveis e que permitem o gerenciamento dos subsistemas de um veículo (como motor).

1.2) Diferenças entre as linguagens C e C++

Ambas apresentam algumas diferenças quanto à forma de escrita das palavras-chave reservadas para as instruções serem oferecidas ao computador. Dessa forma, também se diferem quanto aos recursos disponíveis.

1.2.1) Principais pontos do C

Podemos afirmar que C é considerada por quem desenvolve como a "linguagem-mãe", desenhada para garantir a construção de programas por uma perspectiva definida como procedural.

Isso significa que ela serve para a escrita de programas que vão solicitar dados de um usuário, ou seja, que permitam a captura de dados de fora do computador, para que sejam armazenadas dentro do computador, e uma variável. Na sequência será feito um procedimento utilizando esses dados para gerar uma resposta, seja para o usuário ou para outro trecho de código do nosso programa.

Sendo assim, ela opera em um paradigma imperativo, pois é focada em mudar os estados de uma variável em um sistema com base nas instruções (ordens) que damos ao computador.

1.2.2) Principais pontos do C++

Já a linguagem C++ incorpora, além desta abordagem de codificação, a possibilidade de construir códigos orientados a objetos, mais próxima da forma como nos relacionamos com o mundo real. Por consequência, permite uma descrição de código que é mais fácil de ser empregada em projetos de software mais complexos.

De modo geral, este tipo de abordagem é focada na relação entre os objetos (que assumem o lugar das variáveis), garantindo a comunicação entre eles por meio de eventos (os métodos), que podem ou não alterar suas próprias características (atributos).

Vamos ver como criar nossa solução utilizando esta linguagem?

1.3) Resolvendo o Desafio

Na seção anterior deste texto já discutimos a solução algorítmica necessária para resolver o problema. Nesta seção vamos resolvê-lo observando a linguagem de programação C++. Veja a solução proposta:

#include <iostream>
using namespace std;

int main() {
 char opcaoUsuario = ' ';

 cout << "Você está na 'entrada', deseja ir para esquerda ou direita? Digite E para esquerda ou D para direita: ";
 cin >> opcaoUsuario;

 if(opcaoUsuario == 'E' or opcaoUsuario == 'e'){
   cout << "Abrindo a Porta 1" << endl;
 }else if(opcaoUsuario == 'D' or opcaoUsuario == 'd'){
   cout << "Abrindo a Porta 2" << endl;
 }else{
   cout << "Opção Inválida" << endl;
 }
}

Inicialmente importamos uma biblioteca, que contém códigos já implementados para o uso adequado da linguagem. Para isso, utilizamos a palavra reservada #include. A biblioteca iostream permite a execução de operações de interação com o usuário, recebendo dados que serão digitados, e exibindo os resultados de operações que vamos executar.

Em sequência, temos uma instrução definida como using namespace std;, utilizada para definir um espaço de nomes ou namespace. O namespace pode ser definido como uma região que será observada por nosso programa e contém os identificadores dos nomes dos tipos de dados, das variáveis e funções que estão dentro deste espaço.

Em nosso exemplo, são identificadas as funções, variáveis e tipos de dados, necessários para executar operações básicas da linguagem.

A função principal (main), marca o início do nosso programa e dentro dela é executado um conjunto de instruções que permitem alcançar a resposta para a solução do problema.

Muitas linguagens adotam esta palavra reservada, garantindo que na hora da construção do programa seja possível identificar um ponto de partida.

Após isso:

  1. Criamos uma variável chamada opcaoUsuario, do tipo char. Este tipo permite armazenar apenas um caractere, e no caso da linguagem C++, precisa ser apresentado na hora que definimos uma variável;
  2. Exibimos uma mensagem para o usuário, utilizando a instrução cout << "*mensagem*". cout significa console output, ou seja, o que será exibido na saída da aplicação;
  3. Utilizamos a instrução cin >> para capturar os dados digitados pelo usuário, e armazenamos esses dados na variável informada logo após o operador >>;
  4. Por fim, temos um conjunto de desvios condicionais no qual, assim que uma regra seja atendida, o código "executará" um dos blocos mencionados;
    • a) Se o valor informado pelo usuário for 'E' ou 'e', então a mensagem exibida será "Abrindo a Porta 1"
    • b) Senão, se o valor informado pelo usuário for 'D' ou 'd', então a mensagem exibida será "Abrindo a Porta 2"
    • c) Por fim, se o valor informado for diferente dos dois casos acima, então, a mensagem exibida será "Opção Inválida"
  5. Note que também existe uma instrução endl, utilizada para pular uma linha ao final da exibição da mensagem.

Note que embora tenhamos mencionado a programação orientada a objetos, não utilizamos nenhum fundamento deste paradigma de programação. Vamos manter esta abordagem até o final e focar apenas na entrada de dados, no processamento destes dados e na resposta para a pessoa usuária, ok?

1.4) Conceitos de linguagem de programação: C++

A linguagem de programação C++ possui vários recursos de escrita que serão utilizados em outras linguagens que veremos a seguir. No entanto, existem algumas características marcantes na forma como escrevemos códigos em C++. Por exemplo:

MétricasC++
Tipo dos dadosFortemente tipados (desconsiderando o tipo union)
Recomendada paraSistemas embarcados (hardware) ou sistemas de alto desempenho (kernel de Sistema Operacional, por exemplo)
VantagensRápida, multi-paradigma, alta portabilidade (podemos escrever programas para diferentes plataformas), possui um bom conjunto de bibliotecas e não é tão baixo nível
CaracterísticasOs blocos de código são definidos com {} e precisa marcar o fim de uma instrução com ;
1.4.1) Tipagem forte

Quando falamos que uma linguagem de programação é fortemente tipada, significa que definimos o tipo do dado no momento da criação da variável e por consequência, as operações relacionadas a este tipo de dado só poderão ser executadas com o tipo adequado de variável.

1.4.2) Paradigmas de programação

As linguagens de programação multi-paradigma, por sua vez, são aquelas que podem ser empregadas em estratégias de programação diferentes. No caso de C++, existe um destaque por ser empregada no uso de programas com paradigma imperativo ou orientado a objetos.

1.4.3) Portabilidade, abstração e velocidade de execução

Falamos que a linguagem tem alta portabilidade, pois as principais plataformas computacionais, como Mac OS, Windows e Linux, podem consumir programas escritos em C++ (com algumas adaptações).

Nós ainda podemos considerar que C++ não é nem uma linguagem de baixo e nem de alto nível. A característica está relacionada com o quão próximas as instruções utilizadas para a comunicação estão da interpretação pelo processador de um computador (baixo nível) ou do quanto se aproximam do entendimento pelas pessoas (alto nível). Podemos dizer que uma linguagem de alto nível está mais “abstraída” com relação aos comandos interpretados pela máquina.

Por fim, a velocidade mencionada na tabela resulta do fato da linguagem C++ ser compilada, ou seja, tudo que digitamos é convertido diretamente para uma linguagem mais próxima da linguagem da máquina, e como vimos no começo deste artigo, sem tradutores no meio do caminho conversamos melhor com a outra entidade que faz parte da nossa conversa, o mesmo acontece com o computador, que receberá melhor as instruções dadas por nossos algoritmos.

1.5) Escolhendo a linguagem certa para o seu projeto

Estas características são importantes para sabermos se a linguagem C++ é adequada ou não para um projeto, dado que existem muitas comunidades ativas que podem dar suporte para linguagem, é fundamental que saibamos se estamos utilizando as ferramentas corretas para criar um programa de computador.

Para saber mais de programação orientada a objetos e programação estruturada acesse:

Para saber mais sobre o processo de compilação acesse:

2) Linguagem de Programação Java

2.1) Diferença entre Java e C++

Java, quanto a sua escrita, possui características muito parecidos com C++. No entanto, uma das principais diferenças está na forma como os códigos que digitamos são traduzidos para nossos processadores. A linguagem Java, diferente do C++ é interpretada e ao mesmo tempo, compilada. Vamos pensar nos efeitos desse processo para o desempenho de um programa.

2.2) Resolvendo o Desafio

Veja como a solução para o mesmo problema pode ser verificada em um código Java:

import java.util.Scanner;

public class Main {
 public static void main(String[] args) {
   Scanner entrada = new Scanner(System.in);

   char opcaoUsuario = ' ';
   System.out.println("Você está na 'entrada', deseja ir para esquerda ou direita? Digite E para esquerda ou D para direita: ");

   opcaoUsuario = entrada.nextLine().charAt(0);

   if(opcaoUsuario == 'E' || opcaoUsuario == 'e'){
     System.out.println("Abrindo a Porta 1 \n");
   }else if(opcaoUsuario == 'D' || opcaoUsuario == 'd'){
     System.out.println("Abrindo a Porta 2 \n");
   }else{
     System.out.println("Opção Inválida \n");
   }
 }
}

Neste bloco temos muitos elementos parecidos, no entanto, temos alguns trechos de código inseridos por serem necessários de acordo com as características da linguagem. As principais mudanças podem ser observadas pelo seguinte:

  1. A palavra utilizada para importar uma biblioteca, neste caso é o import;
  2. O marcador da classe Main, que é incorporado nesta solução para garantir a estrutura de uma linguagem orientada a objeto. Neste caso, a classe pode ser tratada como um tipo de dado, não primitivo, que possuem propriedades (que representam seu estado) e métodos (que permitem a alteração destes estados;
  3. A necessidade de criar um objeto do tipo Scanner, que será utilizado para interagir com o usuário, uma vez que em java, tudo que for possível será tratado como um objeto;
  4. A necessidade de "instanciar" o objeto, garantido que o objeto do tipo Scanner esteja associado ao "input" do sistema;
  5. Os comandos para exibir mensagens na tela, que são estruturados por meio do método System.out.println("mensagem"); em vez de cout << "mensagem";;
  6. A necessidade de capturar uma linha inteira de texto digitado pelo usuário e extrair o primeiro caractere digitado, que está na posição zero desta linha;
  7. Em vez de utilizar << endl utilizamos o comando \n no próprio texto que será exibido (ele também existe em C++, mas não perderia a oportunidade de mostrar o endl neste momento :}).

Veja que a parte da construção lógica da solução, em si, não é alterada, mas a linguagem, por ser diferente, utiliza suas próprias palavras reservadas e conta com sua própria gramática para construção das instruções dadas ao computador.

2.3) Conceitos de Linguagem de Programação

MétricasJava
Tipo dos dadosEstaticamente tipados
Recomendada paraDesenvolvimento de apps que sejam dinâmicos ou aplicações Web (JSP)
VantagensOrientada a objetos, fácil de programar, comunidade forte e possui uma plataforma independente, que facilita a portabilidade da solução
CaracterísticasOs blocos de código são definidos com {} e precisa marcar o fim de uma instrução com ;
2.3.1) Tipagem estática

Uma linguagem estaticamente tipada é aquela que tem seus tipos definidos explicitamente no código verificados em tempo de compilação.

Para saber mais sobre tipagem estática e dinâmica acesse:

2.3.2) Máquina Virtual Java (JVM)

Diferentemente de C++, há uma interface do Java que fica entre o código digitado pela pessoa desenvolvedora e o computador. Ela é chamada de JVM (ou Máquina virtual Java) e é responsável por executar os programas escritos em Java, garantindo maior compatibilidade entre códigos escritos para diferentes sistemas operacionais.

No entanto, este tipo de abordagem tem um custo, consegue imaginar qual é? O tempo para que uma aplicação Java seja executada pela primeira vez em uma máquina é relativamente maior do que se o mesmo programa fosse escrito em C++.

Isso acontece por dois motivos principais:

  1. A estratégia de construção da solução e por consequência, para o armazenamento das variáveis; e
  2. A necessidade de informar essas instruções para JVM, que interpretará estes trechos de código para o processador.

Para saber mais sobre JVM e Java acesse:

2.3.3) Classes

Quando falamos de Java, é fundamental pensarmos no uso de classes. Um conceito fundamental que vem lá da programação orientada a objetos. Outras linguagens, que compartilham esta abordagem de programação também incorporam este conceito. Quer saber mais sobre classes e estes fundamentos? Acesse então:

O que são classes e objetos?

3) Linguagem de Programação C

3.1) Resolvendo o Desafio

Do ponto de vista estrutural, a linguagem C# (pronuncia-se “C-Sharp”) para aplicações mais simples é muito semelhante ao Java. A principal diferença está na capacidade de aproveitar e gerenciar recursos. Também se destaca quando a solução desenvolvida utiliza os recursos da plataforma.NET

Para saber mais a respeito de .NET, disponibilizamos uma apostila completa:

using System;

class Program {
 public static void Main (string[] args) {
   char opcaoUsuario = ' ';
   Console.WriteLine ("Você está na 'entrada', deseja ir para esquerda ou direita? Digite E para esquerda ou D para direita: ");

   opcaoUsuario = Console.ReadLine()[0];

   if(opcaoUsuario == 'E' || opcaoUsuario == 'e'){
    Console.WriteLine ("Abrindo a Porta 1 \n");
   }else if(opcaoUsuario == 'D' || opcaoUsuario == 'd'){
    Console.WriteLine ("Abrindo a Porta 2 \n");
   }else{
    Console.WriteLine ("Opção Inválida \n");
   }

 }
}

As principais mudanças a ser destacadas, quando comparamos este trecho de código com o escrito em Java, são as seguintes:

  1. A palavra-chave using, utilizada para importar a biblioteca System;
  2. O uso da instrução Console.ReadLine() para realizar a leitura de dados do usuário (input), em vez do uso do Scanner ou do cin >>;
  3. O uso da instrução Console.WriteLine() para realizar a exibição dos dados informados ao usuário (output), em vez de System.out.println() ou do cout <<;
  4. Também é possível observar que diferentemente do Java, para acessar o primeiro símbolo do texto informado pelo usuário, não utilizamos o método charAt(0), mas apenas os colchetes [0], indicando que queremos acessar a primeira posição de um vetor de caracteres.

3.2) Conceitos de Linguagem de Programação

MétricasC#
Tipo dos dadosEstaticamente tipados
Recomendada paraDesenvolvimento de apps para desktop, aplicações Web ou serviços web
VantagensCapacidade de gerenciar a memória e os recursos de um programa (uso flexível de memória), rápida e poderosa, orientada a objetos
CaracterísticasOs blocos de código são definidos com {} e precisa marcar o fim de uma instrução

Para saber mais da linguagem C#, acesse:

4) Linguagem de Programação Javascript

Diferentemente das outras linguagens, o Javascript quase sempre está associado, em sua forma mais simples, ao desenvolvimento de aplicações web. Por consequência, para uma demonstração adequada, ele será apresentado em conjunto com o HTML.

Vamos ver como esta solução pode ser desenhada?

4.1) Resolvendo o desafio

4.1.1) HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>exemplo</title>
<script src="main.js"></script>
</head>
<body>
</body>
</html>

Este trecho de código consiste na estrutura básica para escrevermos uma página HTML em branco, ou seja, sem nenhum elemento gráfico ou visual. No entanto, é importante atentar-se à instrução <script src="main.js"></script> que será responsável por "invocar" nosso script assim que a página HTML for lida pelo navegador.

Nesta abordagem, utilizamos a estrutura HTML para garantir que um conteúdo seja renderizado e acessado pelo navegador. No entanto, o arquivo escrito em HTML não tem muita utilidade neste momento, a não ser garantir que acessaremos as interações do navegador para que seja possível executar nosso exemplo.

Vale destacar ainda que o papel do HTML é garantir que sejamos capazes de estruturar páginas web, definindo a relação entre os elementos que o navegador interpretará na página e o significado deles.

Neste código, por exemplo, são apresentadas tags <head> e <body>, que são respectivamente empregadas quando queremos:

  1. definir as informações a respeito de nossa página;
  2. descrever os outros elementos que serão utilizados para desenhar a página (o que a pessoa usuária vai ver).

Para saber mais da estrutura HTML acesse:

4.1.2) Linguagem JavaScript
const opcaoUsuario = prompt("Você está na 'entrada', deseja ir para esquerda ou direita? Digite E para esquerda ou D para direita:");

if(opcaoUsuario === 'E' || opcaoUsuario === 'e'){
console.log ('Abrindo a Porta 1');
}else if(opcaoUsuario === 'D' || opcaoUsuario === 'd'){
console.log ('Abrindo a Porta 2');
}else{
console.log ('Opção Inválida');
}

O trecho de código escrito em Javascript possui algumas pequenas diferenças:

  1. Veja que não definimos o tipo do dado quando criamos nossa variável. Embora a tipagem seja considerada uma boa prática para a criação de variáveis e constantes, ainda assim a aplicação será executada corretamente;
  2. Podemos escrever uma string tanto com aspas simples quanto com aspas duplas;
  3. O comando utilizado para capturar dados do usuário foi o prompt();
  4. Utilizamos o console.log() para exibir mensagens para o usuário;
  5. Não importamos nenhuma biblioteca.

No entanto, para que sejamos capazes de verificar o resultado da solução (a saída de dados) é necessário abrirmos a aba "console" de nosso navegador. Para abrir o console no navegador Chrome, utilize os comandos: Command + Option + J (para MacOS) ou Control + Shift + J (para Windows e Linux)

Veja o exemplo da saída no navegador:

Trecho do navegador com o botão Console selecionado. Mais abaixo, aparece a mensagem "Abrindo a Porta 2".

4.2) Características da linguagem

MétricasJavaScript
Tipo dos dadosFracamente tipada
Recomendada paraDesenvolvimento de web apps ou páginas de internet
VantagensAumenta a interatividade de soluções, alto potencial para o desenho de interfaces ricas e aprimoradas, alta procura no mercado de trabalho
CaracterísticasOs blocos de código são definidos com {}

Para saber mais de JavaScript, acesse:

5) Linguagem de Programação Python

Por fim, temos a linguagem de programação Python, que é interpretada, mas assim como Java, passa por um processo de compilação. Python cresceu muito nos últimos anos, tendo como uma de suas principais vantagens a velocidade na criação do código e o apoio de bibliotecas cada vez mais simplificadas, disponibilizadas pela comunidade.

5.1) Resolvendo o desafio

Veja como ficou a nossa solução escrita em Python:

def main():
 opcaoUsuario = input("Você está na 'entrada', deseja ir para esquerda ou direita? Digite E para esquerda ou D para direita: ")

 if opcaoUsuario == 'E' or opcaoUsuario == 'e':
  print("Abrindo a Porta 1\n")
 elif opcaoUsuario == 'D' or opcaoUsuario == 'd':
   print("Abrindo a Porta 2\n")
 else:
   print("Opção Inválida\n")

if __name__ == '__main__':
 main()

Assim como nas linguagens Java, C++ e C#, podemos estabelecer uma função principal, definida por def main(): e invocada na circunstância em que o desvio condicional é atendido.

As principais diferenças estruturais entre o código escrito em Python e as linguagens anteriores são:

  1. Não apresentamos, explicitamente, o tipo do dado no ato da criação da variável;
  2. Podemos escrever uma string tanto com aspas simples quanto com aspas duplas;
  3. Para exibir uma mensagem na tela, utilizamos o método print() (output);
  4. Para solicitar uma mensagem ao usuário, utilizamos o método input();
  5. O desvio condicional não utiliza {} para definir um bloco de código, por isso é necessário garantir a indentação do código;
  6. O uso do operador : define onde um bloco de código irá começar;
  7. Em vez de utilizar else if, utilizamos elif.

Quando comparamos os códigos escritos em Python com os de outras linguagens, percebemos uma mudança mais significativa na forma como escrevemos um código, pois ele tem uma proposta de se aproximar da comunicação de seres humanos.

Devido a isso, a linguagem emprega uma série de alterações na forma como os trechos de código são estruturados e também em sua própria gramática (lembre-se de que já discutimos que uma linguagem de programação é parecida com as linguagens naturais).

5.2) Conceitos de linguagem de programação

MétricasPython
Tipo dos dadosFortemente tipada e dinamicamente tipada
Recomendada paraAnálise de Dados, Aprendizagem de Máquina e também para o design de apps. Também pode ser empregada na elaboração de scripts ou para automação de tarefas
VantagensAumento de produtividade (necessário escrever pouco código para executar uma tarefa), fácil de aprender, fácil de escrever
CaracterísticasOs blocos de código são definidos com ":" e pela indentação

Python é forte e dinamicamente tipada, o que faz com que o tipo do dado seja associado à variável, de acordo com o tipo atribuído e em tempo de execução.

Os campos de ciência de dados e aprendizagem de máquina contam com bibliotecas poderosas escritas em Python, além de ser uma das linguagens preferidas pela comunidade de desenvolvimento desta área.

Por fim, embora possua recursos para criação de webapps e para o design de soluções desktop, talvez seja interessante identificar se uma das linguagens anteriores não atende melhor o projeto que você deseja desenvolver!

Para saber mais sobre Python acesse:

Conclusão

Aspectos importantes na escolha de uma linguagem de programação

Observamos neste artigo algumas características técnicas de diferentes tipos de linguagens de programação, as principais diferenças na forma de escrever um mesmo código utilizando cada uma delas, como estão presentes na comunidade e algumas características que favorecem a escolha de uma linguagem específica de acordo com diferentes tipos de projetos.

Do ponto de vista da opção por uma linguagem, é importante salientar que, além dos aspectos indicados neste texto, a equipe de trabalho que você faz parte pode já ter estabelecido uma estratégia para o desenvolvimento das soluções. Por isso, é importante investigar e estudar as tecnologias que estão associadas a um determinado projeto.

A importância de se atualizar e aprender novas tecnologias

Recomendamos que você sempre se atualize e busque aprender novas tecnologias para utilizar cada linguagem como uma ferramenta adequada para resolução de problemas. Por fim, não existe uma linguagem de programação que seja a melhor para qualquer situação. Aprender novas linguagens e paradigmas de programação é bastante positivo, uma vez que passamos a reconhecer as estratégias que cada linguagem utiliza para nos ajudar a resolver um problema.

A importância da lógica de programação na resolução de problemas

Ainda, aprender lógica de programação é um passo fundamental para que você seja capaz de resolver problemas. Note que, independentemente da linguagem escolhida, a estrutura da solução sofreu poucas alterações, se não, pelas palavras reservadas na gramática de cada uma das linguagens escolhidas.

Logo, aprender lógica de programação nos ajuda a estruturar as ideias utilizadas para desenhar uma solução, e a linguagem de programação é a forma como vamos manifestar esta lógica para que o computador possa executar os programas que vamos construir!

André Santana
André Santana

Professor no Insper | Pesquisador no LSITec (EP-USP) | Instrutor na Alura

Veja outros artigos sobre Programação