Concrete | Lógica de Programação em pauta
por Marcos Bérgamo
Quando entramos na faculdade de TI em geral, uma das primeiras matérias é Lógica de Programação. Conforme o curso evolui começamos a refinar algumas concepções que normalmente passam despercebidas. Eu fiz essa matéria três vezes, e não foi porque bombei! Eu troquei de cursos e quis fazer novamente para ter um novo "insight", a partir de uma ótica diferente.
A que mais gostei foi no curso técnico da ETEC Coronel Raphael Brandão, em Barretos. Foi lá que tive o primeiro contato de verdade com lógica de programação, não foi só ver códigos em PHP e tentar decifrar aquilo sem entender. Acho que o principal problema dos cursos em geral são as ferramentas utilizadas para ensinar a lógica em si. Então vamos avaliar algumas delas, deixando claro que essa é a minha opinião sobre o assunto, ok?
Vou fazer um comparativo entre as três vezes que cursei o Lógica de Programação e uma quarta, que eu acredito ser mais prática e eficaz. Acredito que uma das premissas para usar as ferramentas listadas aqui para o ensino da lógica de programação seja que o estudante já tenha familiaridade com uma delas, para que seja um bom início de carreira.
#1 Lógica de Programação com Java
Java é uma das linguagens mais utilizadas no mundo, além de ser a linguagem de programação utilizada para o desenvolvimento de aplicativos Android. Entretanto, quem já teve contato sabe que ela é muito verbosa para coisas realmente simples, como um Hello World, por exemplo. Veja abaixo:
Para uma pessoa que nunca teve contato com nenhuma linguagem de programação, ver tanta coisa para simplesmente imprimir Hello, World! em uma telinha preta pode parecer algo de outro mundo.
Mas o grande ponto nem é esse, o fato é que eu deveria estar aprendendo lógica, e não Java. E em muitas vezes os professores simplesmente pedem para você ignorar todo o resto do código e focar apenas no meio dele, que é onde você escreve, ou te dá uma explicação minima e rápida só para você ficar quieto e focar na lógica, ignorando todo o resto. Isso mexe um pouco com a nossa natureza, pois simplesmente ignorar parte importante do código pode nos tornar um pouco preguiçosos com algo que não devíamos fazer. Temos que entender o que está se passando no nosso código, não dá para simplesmente ignorar isso.
O que nos leva à nossa segunda linguagem.
#2 Lógica de Programação com C/C++
C/C++ é praticamente a mãe de muitas linguagens, foi uma das primeiras criadas para uso "doméstico" (se posso usar esse termo). A linguagem em si dá praticamente super poderes para o usuário, pois ele tem a possibilidade de escrever também códigos de mais baixo nível, entretanto a responsabilidade de cuidar da memória também passa para o programador.
No final é uma linguagem um pouco menos verbosa que o Java, mas temos algumas peculiaridades que não necessariamente precisam entrar como lógica de programação e acabamos vendo porque é uma característica importante.
#include <stdio.h> int main (int argc, char** argv) { printf("Hello World!\n"); return (0); }
Novamente, temos diversos elementos que "não precisamos saber o que significam agora".
Se não precisamos saber para o que servem essas partes do código, não seria melhor achar alguma linguagem que pudéssemos simplesmente usar sem ter que carregar códigos que não precisamos conhecer ou usar uma estrutura sem saber realmente a necessidade?
#3 Lógica de Programação usando Papel e Caneta
Para ser bem sincero essa é uma das que menos me frustra, claro que hoje em dia. Na época que eu estava iniciando, em meados de 2010, o que eu queria era passar o maior tempo possível no computador, e o máximo que eu pudesse escrever e compilar diretamente nele seria o ideal.
Entretanto, para cunho de aprendizado, quando escrevemos nossos algoritmos, aplicamos testes de mesa e estamos treinando nossa lógica, é um ganho escrever diretamente no papel, usando talvez até Português Estruturado. (Não vá querer escrever em Java no papel, pois suas mãos não merecem isso e no papel não tem ctrl + space)
Por um lado isso é bom, mas o retorno do que escrevemos é um pouco demorado, principalmente nas primeiras iterações, pois temos que fazer sempre o teste de mesa para garantir que a lógica aplicada está correta. Com o tempo, isso melhora e conseguimos até prever erros apenas olhando o código, mas isso leva tempo e experiência.
#4 Lógica de Programação com linguagens interpretadas
Quando utilizamos linguagens como C/C++ ou Java precisamos editar/compilar nosso código para algo que o computador entenda. E isso tem que entrar no seu ciclo de desenvolvimento, ou seja, além de ter códigos que você não entende ainda tem que executar uns comandos lá na telinha preta também.
Quando usamos uma linguagem interpretada, normalmente essas linguagens trazem consigo uma ferramenta chamada REPL (Read Eval Print Loop), que basicamente é um terminal iterativo da linguagem, no qual os comandos normalmente são separados por linhas e você consegue executar um código e ter um retorno instantâneo, seja a sua resposta ou um erro.
Além disso, você consegue também escrever seu código, chamar o interpretador apontando para seu arquivo e o conteúdo será executado. Nesse sentido, temos dois candidatos fortíssimos para o páreo: Python e Ruby. Antes de tudo, como é um Hello World nessas duas linguagens?
Perceba que não tem nenhum cabeçalho específico nem nada do gênero para conseguir rodar o seu programa de exemplo, imprimindo na sua tela o texto Hello, world!.
KISS – Keep It Simple, Stupid
O importante é aprendermos lógica, e o ideal é manter o mais simples possível. Não existe motivo para usar uma ferramenta que adiciona uma complexidade desnecessária ao conjunto da obra.
Em computação, você deve ouvir muito o termo KISS e é algo que deveríamos passar logo no início para os ingressantes na área. Lembro que para meus amigos e eu, na época em que cursamos o técnico em informática, a matéria de Java era uma das mais temidas por conta da curva de aprendizado inicial alta.
O foco deve ser sempre no objetivo (frase feita). Ensinar Java, C/C++ ou outra linguagem que demanda um pouco mais de entendimento é o foco nas aulas de lógica de programação? Se sim, continuem, mas se o foco realmente for ensinar a lógica, devemos quebrar um pouco o pensamento arcaico e voltarmos ao princípio, usando a maneira mais simples e eficiente.
A área da computação, independente da área em que você atua, é sempre muito iterativa e você deve sempre buscar melhorar a cada ciclo de aprendizagem.
Uma das sugestões do livro O Programador Pragmático é que devemos tentar aprender uma linguagem por ano, seja porque que o mercado demanda ou para aprender algo novo. Aliás, é um ótimo livro que recomendo para ingressantes ou já atuantes na área.
Nesse processo de melhoria contínua, recomendo que você também aprenda Java, C/C++, JavaScript, Elixir, Haskell, Rust... qualquer linguagem que temos à disposição, pois cada uma delas com toda certeza vai te beneficiar de alguma maneira, nem que seja apenas uma maneira nova de codificar.
Por fim, o mais importante é termos a lógica afiada, pois ela é a base do conhecimento. A linguagem em si é apenas um ferramenta para moldar sua lógica em código de máquina.
Ficou alguma dúvida ou tem alguma opinião sobre o assunto? Aproveite os campos abaixo! Até a próxima.
Quer ser desenvolvedor e quer fazer parte de um time que adora compartilhar conhecimento? Clique aqui.
Desenvolvedor Node.js na Concrete, Marcos Bérgamo é apaixonado pelo universo open source e pelas comunidades mundo afora. Nas horas vagas é uma pessoa comum, que joga RPG e curte um bocado de seriados com maratonas intermináveis.