O que é Lógica e Linguagens de Programação?

Você já ouviu falar em linguagens para computadores ou linguagens de programação, como por exemplo: Java, PHP, Ruby, Python? Já ouviu falar em algoritmos? Caso responda não, então esse artigo foi escrito especialmente para você.

Se você está lendo esse artigo, provavelmente está iniciando em alguma disciplina de lógica de programação. Tal disciplina tem o objetivo de capacitá-lo a construir, analisar e solucionar problemas de instruções lógicas (algoritmos), em outras palavras, escrever programas simples em uma linguagem de programação. Portanto, são ensinadas todas as técnicas e conceitos para que você se torne um profissional da área de desenvolvimento de software, tal profissional pode ser chamado de programador, desenvolvedor, ou até mesmo engenheiro de software.

Hardware Vs Software

Antes de definir o que significa linguagem de programação e seus algoritmos, prefiro que você entenda primeiro o conceito de software e a relação com o hardware. Já ouvimos muito falar que o hardware é a parte física do computador, e o software é a parte lógica, como por exemplo, o sistema operacional Windows e seus aplicativos: Calculadora, jogos, bloco de notas, Word, Excel, etc. Mas… como assim lógica? leia até o fim que você vai entender.

O processo de ler ou salvar um arquivo no HD, ouvir ou gravar um áudio, digitalizar ou imprimir um documento, e até mesmo realizar um cálculo, são tarefas executadas ou concluídas pelo hardware (físico), e isso é bem visível para nós. A Figura 01 abaixo, apresenta a arquitetura simplificada de um sistema de computação (hardware), não vou entrar em detalhes de arquitetura de computação, pois é apenas para te mostrar que cada componente troca informações com os demais para que todo o conjunto funcione em sincronia perfeita. Tais informações são enviadas por um barramento comum denominado bus.

Figura 01 — Arquitetura simplificada

Contudo, o hardware sozinho é “morto”, isto é, ele precisa receber ordens ou instruções do que ele deve ou precisa fazer, e até mesmo como vai fazer. Tais instruções precisam ser bem definidas para que façam sentido, ou tenham uma lógica correta para que o hardware execute-as de forma correta. Então, o software para “comandar” o hardware, precisa ter lógica, ser lógico.

Acredito que até aqui você já tenha entendido os papéis do hardware e software. Para fechar essa discussão e ampliar um pouco mais sua visão sobre software, a Figura 02 abaixo apresenta as camadas de software de um sistema de computação de forma simplificada. Por questão de segurança, os aplicativos de usuários, por exemplo, leitores de música e vídeo, editores de textos, navegadores, etc. não comandam diretamente os componentes de hardware. Isso porque um programa malicioso (vírus) poderia causar sérios danos em um HD por exemplo. Por isso, é o Sistema Operacional (SO) que gerencia o acesso direto aos componentes físicos, no sentido mais literal de gerência que você possa imaginar, funcionando como um grande “maestro” do hardware para que este funcione perfeitamente nas devidas condições. Imagine o que aconteceria se três programas executando em um determinado computador tentassem todos imprimir sua saída simultaneamente na mesma impressora; o SO pode trazer ordem a esse caos, armazenando temporariamente no HD (disco rígido) todas as saídas destinadas a impressora; gerenciando a memória; gerenciando os arquivos e disco; gerenciando a segurança, etc. Por conta desse acesso restrito ao hardware, os aplicativos de usuário precisam repassar as suas instruções para o SO, e este por sua vez, repassa para o hardware tais instruções. Cada componente de hardware possui um pequeno software instalado, esse software específico de cada componente é chamado de firmware. Portanto, o SO repassa suas instruções para tais firmwares. Alguns autores preferem não fazer a divisão de firmware e hardware, e tratam como uma coisa só.

Figura 02 — Camadas de software

Algoritmos e Lógica

Se esse artigo é a sua primeira leitura sobre programação, com certeza você nunca ouviu falar em algoritmos.

Se o software possui um conjunto de instruções organizadas e finitas (início e fim), e que quando executadas resolvem um problema específico, chamamos esse conjunto ou trecho de instruções específica de algoritmo. Por exemplo, para finalizar uma compra em um site, o programador poderia seguir passos finitos de instruções para solucionar esse problema, conforme a seguir:

Algoritmo para Finalizar compra:

Início do algoritmo

1- Percorrer todo o carrinho e verificar quantidades e valores de cada produto;

2- Verificar o valor do frete para cada produto;

3- Verificar se possui cupons de descontos;

4- SE a opção de pagamento for cartão, ENTÃO verifica se possui juros de acordo com a quantidade de parcelas;

5- Realizar o cálculo do valor total;

6- Verificar se todos os dados preenchidos de cartão de crédito e endereço estão corretos;

7- SE a opção de pagamento for cartão, ENTÃO realiza análise de crédito com a operadora do cartão;

8- Exibe a página de resumo e confirmação;

9- Se confirmar, envia email para o cliente, e exibe a página de resumo do pedido.

Fim do algoritmo

Falamos anteriormente, que o software precisa ser lógico ou coerente para passar suas instruções ao hardware. Separei duas definições interessantes da palavra lógica no dicionário:

  • “Encadeamento coerente de alguma coisa que obedece a certas convenções ou regras”.
  • “Organização e planejamento das instruções, assertivas etc. a fim de viabilizar a implantação de um programa”.

Observe que as definições acerca de lógica compreendem ordem, organização, encadeamento, e planejamento assertivo. Portanto, para solucionar problemas, o programador precisa construir um algoritmo que tenha lógica. Partindo desse entendimento, podemos afirmar também que certamente no nosso dia-a-dia todas as pessoas no mundo inteiro resolvem vários algoritmos sem perceber, por exemplo, ao escovar os dentes precisamos seguir passos finitos e que tenham lógica, veja:

Algoritmo para Escovar os Dentes:

Início do algoritmo

1- Pegar o creme dental;

2- Retirar a tampa;

3- Pegar a escova;

4- Aplicar uma porção do creme na escova;

5- Fechar a tampa do creme dental;

6- Guardar o creme dental;

7- Escovar os dentes;

8- Cuspir o creme dental;

9- Lavar a boca;

10- Lavar a escova;

11- Guardar a escova.

Fim do algoritmo

Perceba no algoritmo do mundo real acima, que os passos de instruções precisam fazer sentido para que o problema seja solucionado corretamente, por exemplo, se o primeiro passo fosse escovar os dentes, sem antes ter pego o creme dental, não faria sentido, não teria lógica, logo tal algoritmo estaria errado. Outro fator interessante dos algoritmos, é que os passos podem ser modificados se a lógica não for perdida. Por exemplo, outra pessoa poderia começar pegando a escova ao invés do creme dental, ou até mesmo guardar o creme dental somente no final, essas trocas na ordem não afetaria a resolução correta do problema. Portanto, a mesma situação acontece no mundo da programação, onde cada programador pode ter estratégias diferentes para solucionar o mesmo algoritmo.

Linguagem de Programação

Agora que você adquiriu uma visão um pouco mais ampla, acerca da relação do hardware com o software. Você deve estar se perguntando: Bem… para que o software se comunique com o hardware (ou firmware), ele precisa falar algum idioma ou linguagem, mas qual linguagem o software utiliza para se comunicar com o hardware? A resposta é: existem diversas, sim é isso mesmo que você leu, diversas. A lista abaixo apresenta as vinte principais linguagens do ano 2018, de acordo com o índice TIOBE:

Lista — As vinte linguagens mais utilizadas em 2018

Diante disso, pode surgir outra dúvida: mas quais os motivos de existirem tantas linguagens? Bem… os motivos são vários, posso destacar que cada linguagem tem seus pontos positivos e negativos de acordo com o tipo de software que se deseja criar. Por exemplo, para um aplicativo que será executado em uma plataforma web (navegadores) o programador pode escolher Ruby, Python, JavaScript, PHP, etc. Para um aplicativo que é instalado e executado em uma plataforma desktop, isto é, sem ser através de navegadores web, o programador poderá optar por Java ou C#. Para aplicativos de edição de vídeo e áudio, que necessitam de alto desempenho, C ou C++. Uma série de outras questões podem ser levantadas na hora de escolher a linguagem mais apropriada, por exemplo, algumas linguagens tratam melhor os dados armazenados na memória do que outras. Mas fique tranquilo que isso não é requisito para o seu aprendizado agora, não se preocupe com isso, basta saber que existem diversas linguagens para diversos propósitos.

Tais como os idiomas naturais (inglês, português, etc), as linguagens de programação possuem uma gramática, em outras palavras, possuem regras para que o receptor entenda o emissor da mensagem. Essas regras precisam fazer sentido. Na área de programação, nós chamamos essa gramática (regras) com sentido de sintaxe. Grave bem essa palavra sintaxe, pois você ouvirá bastante. Por exemplo, para exibir uma mensagem de alerta em uma janela popup de um navegador, o programador precisa escrever essa instrução, seguindo as regras (sintaxe) da linguagem escolhida, então se foi escolhida JavaScript, a instrução seria: alert(“Olá seja bem-vindo!”);. Observe que o programador precisou seguir algumas regras de comunicação, iniciando com o nome da instrução, em seguida abrindo e fechando parêntese, colocando a mensagem entre aspas e finalizando com ponto e vírgula. Para exibir a mesma mensagem na tela, porém utilizando a linguagem C++, o programador teria que escrever printf(“Olá seja bem-vindo!”);. Observe que a sintaxe é a mesma, porém o nome da instrução é diferente.

Outro questionamento que você possa fazer: Já que as instruções são escritas por um programador, então como posso ver essas instruções nos softwares?

Bem… a partir de agora, vamos chamar essas instruções de código fonte ou simplesmente código, ok?! A grande maioria dos softwares, principalmente pagos, possuem o código fonte protegido ou ilegível, isso por uma questão óbvia, direitos autorais. Outros softwares disponibilizam para download seus códigos fontes livremente a todos, chamamos esses softwares de open source(código aberto). Para te dar um exemplo rápido e prático de código fonte que pode ser visto facilmente, é o código fonte de qualquer página de qualquer site, onde no menu ferramentas do desenvolvedor de qualquer navegador (chrome, firefox, opera, safari, internet explorer, etc), você pode visualizar. A seguir, Figura 03, exemplo da página de login do site da caixa, observe que existem uma série de instruções para definir cada requisito do site, cores, fontes, botões, links, alertas, etc. Portanto, todos os softwares que você ver bonitinhos, por trás, existem uma série de instruções ou códigos fonte, ou sendo mais específico, vários algoritmos.

Figura 03 — Código fonte página de login

Vale a pena deixar claro, que isso não significa que todas as páginas de sites são Open Source, pois apenas o código responsável pela parte visual e de interação do lado do usuário é visível, outra parte do código fica na máquina que é o servidor do site, e essa parte não é visível. Portanto, para ver o código fonte de um site por inteiro, o dono do site precisa disponibilizar o mesmo para download, isto é, se o dono decidir que o site é Open Source, é claro. Muitos softwares são Open Source, mas os donos não permitem que os mesmos sejam comercializados, mas apenas para fins pessoais. Então, os programadores podem modificar o código fonte, fazendo melhorias ou adaptando as suas necessidades, mas não podem vender o software modificado.

Para te dar noção ainda melhor acerca de código fonte, supomos que precisa-se criar um algoritmo que pergunte qual o nome do eleitor, e dê as boas vindas para o mesmo, em seguida, pergunte qual o voto do eleitor (usuário), e informe o voto e o nome do candidato que foi votado. Se fossemos solicitar essas mesmas instruções ou algoritmo para um ser humano usando o nosso idioma natural (português), seria conforme os passos abaixo:

Algoritmo para votar:

Início do algoritmo

1- Criar uma variável para armazenar o nome do usuário;

2- Capturar o nome digitado, e armazenar na variável do nome;

3- Exibir uma mensagem de boas-vindas ao nome do usuário;

4- Criar uma variável para armazenar o voto digitado;

5- Capturar o voto digitado, e armazenar na variável do voto;

6- Verificar se o valor da variável do voto é igual a 13, se for, então imprima na página: Você votou em Lula;

7- Verificar se o valor da variável do voto é igual a 11, se for, então imprima na página: Você votou em Bolsonaro.

Fim do algoritmo

Abaixo, na Figura 04, segue um exemplo do mesmo algoritmo acima, porém utilizando a linguagem de programação JavaScript. Não se preocupe agora com o significado de cada instrução, isso é apenas para você ter uma ideia de como as linguagens são escritas:

Figura 04 — Exemplo de algoritmo em linguagem de programação

Como Escrever Meus Próprios Softwares?

Existem diversas ferramentas profissionais, que auxiliam na escrita ou desenvolvimento do código, na execução do código, e na configuração do código para que ele esteja pronto para disponibilizar aos usuários (clientes). Dentre elas, o SublimeText, Notepad++, Eclipse, NetBeans, CodeBlocks, Aptana, Dreamweaver, etc. Porém, com qualquer editor de texto simples você consegue programar, como o bloco de notas do Windows por exemplo.

O objetivo desse artigo não é te ensinar a programar, mas contextualizar a disciplina de lógica de programação. Portanto, a partir dessa contextualização o seu professor irá te ensinar os primeiros passos na construção de um programa na prática. Instalando as ferramentas necessárias, configurando o ambiente de desenvolvimento, escrevendo o código, e executando.

Alguns professores até preferem abstrair toda essa parte de ferramentas e instalação de ambientes para alunos que estão começando, e preferem escrever os códigos em caderno, para que o aluno aprenda melhor assim. Outros são ainda mais radicais e preferem além de escrever no caderno, não utilizar uma linguagem de programação, mas o português, focando apenas na lógica do algoritmo. Outros professores, como eu particularmente, preferem já começar utilizando ferramentas e uma linguagem de programação, e na primeira aula já executar uma aplicação. Todas as didáticas possuem pontos positivos e negativos, portanto, acredito que todas são válidas.

Por fim, o objetivo da disciplina de lógica de programação, é capacitar o futuro programador, a ter habilidades de raciocínio lógico utilizando as linguagens que o computador entende. Até porque algoritmos do mundo real, nós já aprendemos a desenvolver desde crianças não é verdade? Se bem que, de vez em quando, fazemos algumas coisas fora da ordem lógica em nossas vidas ;D

Um forte abraço, e seja muito bem-vindo ao mundo da programação!