Componentes do pensamento computacional
O pensamento computacional é um conjunto de habilidades que o ajuda a encontrar uma solução generalizável para um problema e resolvê-lo usando um computador. Vamos elaborar os principais fundamentos dessa habilidade, a saber: abstração, decomposição, reconhecimento de padrão e avaliação.
Decomposição
Problemas complexos são mais fáceis de resolver quando os dividimos em partes (subproblemas). Fazemos isso o tempo todo. Por exemplo, se seu objetivo é fazer uma pizza, você precisa encontrar uma receita, comprar todos os ingredientes relevantes, aquecer o forno, fazer a massa, colocar a cobertura e, finalmente, assar a pizza por um período de tempo apropriado . Analisar um problema como esse ajuda a se concentrar em resolver cada subproblema separadamente (e talvez até mesmo reutilizar soluções que outras pessoas tenham) e evitar ser sobrecarregado pelos requisitos/demandas.
Extração e generalização de padrões
Uma vez que o problema esteja decomposto, nosso próximo passo seria procurar padrões nos subproblemas menores. Um padrão é um conjunto de recursos em uma tarefa que é compartilhada entre mais de uma instância do problema. Por exemplo, se você precisa assar uma pizza de pepperoni, o primeiro passo é fazer uma base circular plana com a massa. A base é um padrão compartilhado por todas as pizzas, então você pode generalizar esse padrão e se quiser fazer uma pizza de marguerita depois pode reaproveitar todas as informações e etapas que você executou para preparar a pizza de pepperoni.
O reconhecimento de padrões é baseado em cinco etapas principais:
- Identificar os elementos comuns em problemas ou sistemas;
- Identificar e interpretar diferenças comuns em problemas ou sistemas;
- Identificar elementos individuais dentro de sub-problemas;
- Descrever padrões que foram identificados;
- Fazer previsões com base em padrões identificados.
Abstração
A abstração nos ajuda a generalizar a solução. Nos livramos de todos os detalhes desnecessários para nos concentrar no que é realmente importante. Pode-se dizer que uma linguagem de programação é uma abstração. Você usa variáveis para realizar operações em vez de listar todos os dados que essas variáveis representam todas as vezes. É exatamente a abstração que nos ajuda a chegar a uma solução generalizável sem escrever um programa separado para cada variação do problema.
Se voltarmos à pizza e tentarmos aplicar a abstração, diremos que, para a pizza ser uma pizza, ela precisa de massa lisa, molho e coberturas. O formato da pizza e o fato de ela ter queijo seriam detalhes desnecessários já que é possível imaginar uma pizza quadrada sem queijo. Portanto, se abstrairmos nossa pizza como uma torta aberta de massa plana com recheios e molho, seríamos capazes de escrever um programa para realizar operações em todas as pizzas, não importando seu sabor, formato e compatibilidade vegana.
Avaliação
Depois de encontrar uma solução para o seu problema, é útil passar por uma lista de verificação de avaliação. Às vezes, sua solução não funciona e esta lista de verificação também pode ajudá-lo a descobrir onde você errou. Certifique-se de que sua solução seja:
- Fácil de entender. Normalmente, esse é o caso se o problema estiver bem decomposto.
- Completo. Sua solução cobre todos os aspectos do problema? Lembre-se, erros e falhas estão nos casos extremos.
- Eficiente. Certifique-se de que está aproveitando ao máximo as ferramentas que possui, no caso de programação, pode-se considerar o uso de construções de sintaxe apropriadas. A velocidade é um dos marcadores mais importantes da eficiência da solução e se torna extremamente importante ao escrever o código de produção.
Aplicar os conceitos que discutimos é útil para desenvolver um processo de resolução de problemas mais eficiente e estruturado. Afinal, a capacidade de resolver problemas é o que torna um programador uma pessoa que conhece uma linguagem de programação.
Fonte: texto traduzido e modificado de https://hyperskill.org/learn/step/8745