quarta-feira, 20 de abril de 2016

O que é lógica de programação

O objetivo deste texto é auxiliar nosso aluno a ter uma compreensão básica sobre como construir programas de computador e apresentar a abordagem utilizada nos cursos online de lógica de programação da Alfamídia.

Aproveite e confira os cursos online Alfamídia de Desenvolvimento Web e Mobile, Desenvolvimento de Software e Programação Javascript.

Temos aqui o desafio de apresentar alguns conceitos fundamentais para criação de programas, assumindo que o leitor não tem nenhum conhecimento prévio na área.

Ao mesmo tempo, é nosso objetivo diminuir um pouco as confusões e distorções presentes na Internet em relação ao que é lógica de programação e esclarecer as principais abordagens adotadas para seu ensino.

Começaremos, assim, buscando um entendimento sobre o que é um programa.


O que é um programa?


Você já pensou em como você decide o que vai fazer a cada instante? O que você faz ao levantar? Como toma um banho?

Na literatura, é comum encontrarmos um exemplo de um programa em uma comparação com os passos de uma atividade simples, como tomar banho. São enumerados passos em sequencia, como tirar a roupa, ligar o chuveiro, etc.

Sob certo aspecto, pode ser considerado um exemplo ruim, ao transmitir a falsa ideia que os seres humanos têm um programa que define suas ações. Tanto seres humanos quanto animais tomam suas decisões através de uma complexa interação entre neurônios, sem seguir nenhum programa escrito em nenhum lugar.

No entanto, para se comunicar com outros seres humanos, nós utilizamos uma linguagem. Através dela interagimos, trocamos informações, compartilhamos decisões e, muitas vezes, damos ordens ou passamos instruções para serem seguidas.

Ao desenvolver os primeiros computadores, ficou claro que precisávamos de algo parecido para que eles executassem determinada função. Ou seja, precisávamos de uma forma de passar instruções para que eles executassem determinada tarefa.

Assim, temos aqui aquilo que podemos definir como um programa:

um conjunto de instruções que iremos fornecer para um computador, para que ele execute determinada tarefa.



Por que um programa não é apenas um texto em linguagem natural?


Linguagens naturais são aquelas linguagens que surgiram naturalmente, de forma não premeditada, e são utilizadas para a comunicação entre seres humanos. Elas são extremamente poderosas e praticamente todo ser humano domina pelo menos uma delas e a utiliza diariamente para se comunicar com as pessoas ao seu redor.

Assim sendo, é válido o seguinte questionamento: por que não utilizar uma língua natural para nos comunicarmos e passarmos instruções para um computador? Em outras palavras, por que o português (ou o inglês) não é utilizado para escrever os programas de computador?

Adicionalmente, adotando uma língua natural, o português, por exemplo, não estaríamos tornando todos os falantes da língua, automaticamente, em programadores?
Existem três questões fundamentais aqui, e vamos analisar uma a uma:



1. Compreender uma língua natural é algo extremamente complexo e, até recentemente, muito além da capacidade dos computadores.



Pode parecer estranho em um primeiro momento, já que qualquer criança consegue falar sua língua materna, mas línguas naturais são extremamente complexas.
Basta observar nosso esforço para aprender uma nova linguagem, especialmente se for uma linguagem que não tem nenhuma proximidade com a língua que falamos desde criança. É comum, inclusive, que adultos jamais adquiram pleno domínio de novas línguas naturais, mesmo praticando diariamente.

Apenas recentemente temos conseguido desenvolver sistemas com a capacidade de interpretar linguagens naturais – ainda que de forma limitada – possibilitando, por exemplo, a tradução automática entre duas línguas.

Em outras palavras, programar utilizando linguagem natural era impossível no passado pelo simples fato que os computadores não eram capazes de compreender sequer uma frase em língua natural.

A limitação técnica para interpretar linguagens naturais, porém, é apenas um dos problemas desta abordagem.


2. Linguagens naturais não foram criadas para especificar comandos de forma clara e precisa.



Na verdade linguagens naturais nem sequer foram criadas, no sentido de alguém ter definido as mesmas. Elas evoluíram naturalmente, sem nenhum planejamento prévio.

Assim sendo, elas não foram feitas para especificar comandos de forma precisa. Não que isso seja em si impossível. Pode-se definir uma forma de, usando uma linguagem natural, sermos sempre precisos no que falamos. Uma receita, por exemplo, pode ter comandos bastante precisos, como “coloque 3,5 gramas de sal no recipiente e coloque no fogo, a temperatura de 83,7 graus, deixando por 5 minutos e 15 segundos”.

Entretanto, o fato é que as linguagens naturais não foram feitas para isso. Para garantirmos a precisão, temos que tomar inúmeros cuidados de não usar qualquer comando impreciso (quantas receitas não dizem apenas colocar um punhado de sal, e deixar no fogo por um pouco de tempo).

No fundo, teríamos que reaprender a utilizar nossa língua natural para um fim completamente diferente daquele para o qual ela é normalmente utilizada. Teríamos, assim, basicamente o mesmo trabalho que temos ao aprender uma língua nova, e ainda estaríamos utilizando uma linguagem que não foi construída para programar computadores.



3. Linguagens construídas são fáceis. Não é na linguagem o problema para desenvolver programas de computador.


Programar não é fácil. Na verdade, é tão difícil que muitas pessoas desistem muito antes de chegar ao ponto em que programar se tornaria fácil para elas, e abrem mão do que poderia ser uma carreira promissora.

Mas, e esta é a questão fundamental, não é a linguagem que torna a programação difícil. É a capacidade de desenvolver programas a questão realmente desafiadora.

Toda linguagem construída é normalmente muito mais fácil de aprender que uma linguagem natural (na verdade quase todas, mas de Klingon a Piet, também podemos encontrar exceções a esta regra). Em particular, linguagens de programação foram especificamente criadas para que pessoas possam, o mais facilmente possível, criar programas.



A verdadeira dificuldade não está nas linguagens, mas na capacidade de desenvolvermos um programa de computador, sendo uma linguagem de programação apenas o instrumento que iremos utilizar para isso. Isso nos leva a uma polêmica entre ensinar “lógica de programação” versus ensinar direto uma linguagem de programação, mas chegaremos em breve a esta questão.


Lógica de Programação e Paradigmas de Programação


Utilizar uma linguagem construída para tal fim tem sido uma solução mais viável e efetiva de desenvolvermos programas de computador, ou seja, conjuntos de instruções que dizem o que o computador deve fazer.

Estas linguagens desenvolvidas para construir programas são chamadas de linguagens de programação. Já foram desenvolvidas inúmeras destas linguagens, algumas muito semelhantes entre si, outras completamente diferentes. Algumas foram desenvolvidas para objetivos muito específicos, enquanto outras buscam atender uma ampla gama de situações.

Apesar de cada linguagem ter suas particularidades, linguagens de programação podem ser agrupadas de acordo com diferentes critérios, sendo que possivelmente o mais relevante deles é o “paradigma” utilizado.

Aqui temos um conceito complexo de entendermos nesta etapa do aprendizado, por isso não vamos nos aprofundar nele, apenas mencioná-lo para podermos apresentar um conceito adequado de lógica de programação. Existem diferentes paradigmas de programação, por exemplo a programação funcional, em que um programa é tratado como uma avaliação de funções matemáticas.

O que chamamos de “Lógica de Programação” abrange um conjunto de conceitos que são utilizados na grande maioria das linguagens utilizadas comercialmente nos dias de hoje.

Existem outras formas de desenvolver programas, utilizando linguagens que adotam outros paradigmas e que, seja por questões comerciais, seja por questões técnicas, neste momento não são tão populares quanto as linguagens que se baseiam nos conceitos vistos em lógica de programação.

Especificamente, hoje praticamente todas as linguagens utilizadas comercialmente são linguagens procedimentais ou linguagens orientadas a objetos. Em ambas, os conceitos de “lógica de programação” são a base para a construção de programas.

Como Aprender Lógica de Programação


Embora não seja exatamente verdade que Lógica de Programação é essencial para desenvolvermos programas - como vimos, existem outros paradigmas que não se baseiam nos conceitos de lógica de programação – ela é essencial quando falamos da maioria das linguagens de mercado.

Existem aqui duas grandes escolas ou linhas de pensamento no que diz respeito a ensinar lógica de programação.

Lógica antes da Linguagem


Nessa linha de pensamento, ensinar uma linguagem sem ensinar a lógica de programação é inverter a ordem natural do ensino. Sem nunca aprender lógica de programação, o aluno se tornará um profissional capaz de dominar uma linguagem de programação, mas incapaz de desenvolver programas, ou pelo menos terá muito mais dificuldade de se desenvolver na área.

Alguns também argumentam que o aluno se vê obrigado a aprender ao mesmo tempo uma nova linguagem e uma nova maneira de pensar. Preso a necessidade de dominar uma nova sintaxe, o aluno não tem como se concentrar no aprendizado da lógica em si que é utilizada no desenvolvimento dos programas.

Ensinar lógica de programação, sem ter algum tipo de linguagem de programação, porém, é quase impossível. Nesta linha de ensino, isso é resolvido com o uso de dois instrumentos principais, na verdade duas linguagens: fluxogramas e pseudocódigo.

Fluxogramas nada mais são que programas escritos em uma linguagem de programação, uma linguagem visual, em que os comandos são representados por figuras e setas.

Pseudocódigo, da mesma forma, é uma linguagem de programação, apenas uma simplificada e baseada no português, que, a rigor, não é necessariamente diferente de tantas linguagens de programação.


Lógica Através da Linguagem


Defendendo o caminho oposto, existe a abordagem do ensino de lógica ser feito através de uma linguagem comercial de programação.

Neste caso, sim, estaremos ensinando lógica e uma linguagem ao mesmo tempo.

Pense na abordagem do ensino de uma língua estrangeira... Para aprender inglês, inicialmente é mostrada a gramática da linguagem, as regras, vocabulário, para só depois de tudo plenamente dominado, começarmos a praticar a linguagem em si? Quão chato e quão difícil seria aprendermos uma nova linguagem desta forma?

Pense agora no ensino da linguagem sendo feito em paralelo com seu uso. Começamos com frases simples, que vamos praticando, e sofisticando cada vez mais.

A chave aqui é prática. Prática e interatividade.

Nesta abordagem, adotada pela Alfamídia em seus cursos, a prática da lógica de programação é contínua e segue junto com o ensino da linguagem.

Começamos com a popular aplicação “Ola Mundo”. Simplesmente ensinamos o mínimo – às vezes apenas 1 ou 2 conceitos e recursos da linguagem – para então fazermos nossa primeira aplicação, uma aplicação que exibe para o usuário a frase “Ola Mundo”.

Os passo s seguintes vão apresentando cada vez mais recursos. Talvez uma forma do aluno entrar com algum comando, o que já nos permite, por exemplo, criar um programa em que o usuário escolhe se sua mensagem será “Ola Mundo” ou “Tchau Mundo”. Qual o próximo passo? Talvez exibir a mensagem um certo número de vezes, ou fazer uma operação matemática qualquer.

Nesta abordagem, a prática é fundamental, e uma prática já no mundo real, já utilizando linguagens que no futuro o aluno utilizará profissionalmente para desenvolver seus programas.

Como Aprender a Programar


Falamos do que é um programa (um conjunto de instruções), mencionamos que existe uma variedade de abordagens utilizadas pelas linguagens de programação (diferentes paradigmas), e comentamos da importância da Lógica de Programação para a grande maioria das linguagens.

Falamos então das duas principais abordagens de ensino, defendendo aquela que acreditamos ser o caminho mais adequado.

Resta-nos agora falar da forma como você, como aluno, irá aprender a programar, e é algo muito simples, que se resume em uma frase: um passo de cada vez.

Ou seja, assim que o primeiro conceito básico da linguagem é apresentado e aplicado – nosso exemplo da aplicação “Ola Mundo”, pratique. E esta é a grande vantagem de aprender lógica de programação diretamente em uma linguagem: pratique o “Ola Mundo”, descubra tudo que você pode fazer. Mude a mensagem, exiba ela 2, 3 vezes. Após, quando forem mostradas variáveis, utilize-as para montar uma mensagem mais complexa. Quando forem mostrados recursos que permitem repetir uma ação várias vezes, cria uma repetição contínua da mensagem de “Ola Mundo”.

Em geral, o aluno que encontra dificuldades no entendimento de lógica de programação tenta absorver e aplicar um conteúdo muito grande de uma só vez. Através do ensino simultâneo com a linguagem, não há esta necessidade. Você pode praticar cada novo conceito tanto quanto necessário até conseguir incorporá-lo com naturalidade.

Com a prática, a solução de problemas mais e mais complexos vai se tornando mais natural, a medida que você ganha desenvoltura no uso dos recursos da linguagem e da lógica de programação.




Aproveite e confira os cursos online Alfamídia de Desenvolvimento Web e Mobile, Desenvolvimento de Software e Programação Javascript.