Exercícios e desafios para praticar e desenvolver habilidades de lógica de programação e resolução de problemas utilizando algoritmos.
Também é um laboratório para aprender linguagens.
Tenho muito a agradecer ao Prof. Nélio Alves, pois comecei a estudar lógica pelo curso de algoritmos dele, muito bom. E ao lendário Guanabara, pois também consegui algumas informações valiosoas com o curso dele de lógica de programação.
Podem te ajudar também!
Note
Esse texto é fruto de uma combinação de muitos materiais que consumi (vídeos, posts, artigos) na busca de entender melhor esse tema com parte do que aprendi sobre lógica e linguagem em meus estudos de filosofia. Pensar sobre isso tornou as coisas mais claras para mim e espero que te possam te ajudar , mesmo sendo de iniciante para iniciante.
A lógica de programação não é simplesmente o ato de "escrever código": ela é um processo de pensamento para transformar um tipo de situação em algo que computadores sejam capazes de processar. Pois nós, seres humanos, temos a capacidade de imaginar e temos intuições: isso nos permite completar e criar sentido para informações incompletas que recebemos. No entanto, computadores não tem essa capacidade.
Um computador (ou máquina de processamento de dados) faz operações de acordo com instrucões (linhas de código) que recebe para processar dados. Esse é um processo muito restrito e o computador, diferente de nós, não imagina o que deveria fazer em uma situação para a qual ele não foi programado. A lógica de programação é uma forma de organizarmos nosso pensamento para projetar uma série de passos que um computador possa executar sem "ficar perdido", ou seja, que ele possa utilizar para lidar com tipo de situação seguindo os passos estabelecidos: da entrada, no processamento até saída de dados há um caminho bem estruturado a se seguir.
As linguagens de programação, por sua vez, são uma forma de traduzir os elementos desse caminho. Não uma forma qualquer de tradução, mas um tipo especial pois, dentre outras coisas, evita problemas como a ambiguidade e isso é muito importante para o processo de programar o computador para realizar a solução qu projetamos.
Desse modo, a escrita do código é uma etapa final de um processo que envolve: identificar o que quero que o computador faça, dividir essa ação em problemas menores, elaborar passos para resolver esses problemas e, então, traduzir essa solução para uma linguagem de programação (codificar a solução).
Logo, mais importante que começar a codificar logo na linguagem X é treinar o processo de pensamento mencionado. Dessa forma, em vez de se sobrecarregar consumindo conteúdo descontextualizado sobre a linguagem X (documentações tem centenas de páginas e existem milhares de tutoriais para qualquer linguagem) é mais eficiente primeiro treinar o processo de pensamento para desenvolver soluções, e então aprender sobre a linguagem X ou Y.
Por exemplo, se minha solução inclui solicitar e coletar dados do usuário, processar esses dados e exibir o resultado desse processamento em uma tela, são essas funcionalidades específicas que vou buscar na documentação da linguagem e em tutoriais. Não vou me perder num oceano de conteúdo, pois sei o que preciso, ou seja, me ajudo a ter um aprendizado contextualizado e mais eficiente.
É uma situação semelhante a aprender um novo idioma. Se simplesmente pego um dicionário e começo a ler na esperança de começar a falar, logo vou me sobrecarregar com uma enxurrada de informações fora de contexto. Por outro lado, se quero ser capaz de fazer um pedido num restaurante, posso buscar as palavras e expressões específicas para estruturar meu pedido. É claro que é uma simplificação, mais ilustra como uma abordagem contextualizada é mais eficiente.
No meu caso, iniciei estudando por pseudocódigo, pegando exercícios e elaborando soluções em portugol. Por enquanto não tenho uma linguagem que domino, mas estou aprendendo Java e percebo que coisas como System.out.println( ), ou println( ) em C, ou Console.WriteLine( ) do C# são apenas outra forma de dizer o escreval em pseudocódigo. Ou seja, são apenas formas diferentes de resolver o mesmo problema "Como exibir uma mensagem para o usuário?".
Então, por mais que não teha ideia de como fazer algo específico em Java ou qualquer outra linguagem, consigo pensar sobre o problema e tentar resolvê-lo. Assim na hora de utilizar o Java, por exemplo, o que eu busco são as "palavras" e "sentenças" específicas que a linguagem disponibiliza para que eu possa dizer o que penso de uma forma que o computador seja capaz entender.