Sabemos realmente o que é um algoritmo?!
São termos cada vez mais populares no quotidiano de cada um, mas sabe realmente o que é um algoritmo e do que precisa para ser processado?
Começarei esse artigo com a seguinte afirmação:
Todos (sim, realmente todos 🤯) os problemas podem ser resolvidos de maneira simples: com algoritmos modelados e lógica.
Primeiramente, irei introduzir um pilar da forma de raciocínio que possibilitou todo o avanço tecnológico que temos atualmente, o Pensamento Computacional:
- Decomposição
Consiste em dividir problemas complexos em partes menores e mais fáceis de resolver. Por exemplo: se tentar construir um prédio de 20 andares de uma vez só, poderia parecer impossível, correto? Mas se tijolo a tijolo construir o primeiro andar, e depois de vários pequenos passos evoluir para o segundo, até chegar ao vigésimo, seria um problema com uma solução mais visível (ora, exatamente como acontece na prática 😲).
É exatamente assim que ocorre com grandes problemas computacionais e algoritmos complexos como o caso do Google e Facebook, que possuem “infinitas” linhas de código, mas que foram construídos passo a passo.
O que é um Algoritmo?
Na disciplina de lógica, há uma regra para prova de teoremas denominada Generalização Universal na qual deduzimos algo para depois criarmos uma regra. Poderíamos passar dias a discutir sobre este artifício, mas tentarei aplicá-la nesse artigo de forma simples. Vejamos o seguinte algoritmo:
Preparação de bacalhau com natas.
Ingredientes |
Preparação |
Batata 500g |
1-Pré-cozinhar o Bacalhau a 200 graus |
Bacalhau 400g |
2-Corte as batatas |
Azeite 100ml |
3-Cozinhar o bacalhau num tacho |
Natas 250ml |
4-Juntar as batatas e acrescentar as natas |
E teremos como resultado uma saborosa refeição 😋 (e talvez um peso maior na balança) …
Generalizando a preparação de bacalhau com natas, podemos inferir que um Algoritmo é uma sequência de instruções bem definidas utilizada para resolver problemas. Em resumo: vai receber algo, depois modificar ou realizar um trabalho com o que recebeu, e por fim, devolver uma saída.
Algumas analogias importantes:
- Recebe um ou mais (inputs) entradas, na nossa linguagem 😯
Essas entradas não são mais do que os dados que nosso algoritmo vai receber do mundo exterior. No nosso exemplo, os ingredientes (batata, bacalhau, azeite e natas).
- Irá realizar uma sequência de passos: poderá alterar as nossas entradas (inputs), modificá-las, agrupar ou separar dependendo do contexto. Ou seja, seguir uma sequência bem definida de ações. No nosso exemplo, a preparação (1-Pré-aqueça o bacalhau, 2-Corte as batatas, 3-Cozinhar o bacalhau num tacho e 4-Juntar as batatas e acrescentar as natas).
- Irá realizar uma sequência de passos: poderá alterar as nossas entradas (inputs), modificá-las, agrupar ou separar dependendo do contexto. Ou seja, seguir uma sequência bem definida de ações. No nosso exemplo, a preparação (1- Pré-aqueça o bacalhau, 2- Corte as batatas, 3- Cozinhar o bacalhau num tacho e 4- Juntar as batatas e acrescentar as natas).
- Por fim, o nosso algoritmo irá produzir uma saída (output). É o que finalmente se pretende, ou seja, a nossa solução final. No nosso exemplo, é finalmente o bacalhau com natas pronto para ser saboreado 😋
O que são testes lógicos?
No mundo real, utilizamos testes lógicos intermitentemente, mas na maioria das vezes de forma inconsciente. Utilizando a nossa preparação de bacalhau com natas novamente, faço-lhe as seguintes perguntas:
- E se não tivéssemos forno para pré-aquecer o bacalhau, como manda o passo 1?
- E se as batatas já estivessem sido cortadas, seria necessário cortá-las novamente como sugere o passo 2?
De maneira geral, testes lógicos são uma (ou mais) pergunta(s) que fazemos e esperamos como resultado apenas dois valores específicos: Verdadeiro ou Falso. Depois desses resultados, normalmente, tomamos uma decisão específica ou um caminho alternativo.
Ao fazermos a pergunta “Temos forno para pré-aquecer o bacalhau?”, teremos dois resultados possíveis, verdadeiro ou falso. Agora, é importante notarmos que dependendo do nosso resultado, tomaríamos uma decisão diferente para a continuação do nosso algoritmo.
Vamos supor que se a nossa resposta fosse verdadeira (temos o forno), então o nosso próximo passo seria obviamente começar o pré-aquecimento. De maneira análoga, se a resposta fosse falsa (ou seja, não possuímos o forno), o nosso caminho seria ramificado para a compra de um, já que em hipótese alguma poderíamos ficar sem jantar o nosso querido bacalhau com natas 😊.
Dito isto, os testes lógicos são primordiais para ultrapassarmos nossos obstáculos. Visto que no mundo real temos diversas variáveis que irão determinar qual o caminho que devemos seguir para obtermos o resultado esperado.
Para finalizar, revisitarei a afirmação que fizemos ao começar o artigo: Ao dividirmos o nosso problema (por mais complexo que seja) em uma sequência de instruções mais simples (Algoritmo), e se aliarmos com Testes Lógicos bem estruturados, a solução poderá ser entregue nas nossas mãos.
Agradeço pela atenção até aqui, até o próximo artigo.
Tiago.