Pular para o conteúdo
~/.primo-academy.sh
☰ Aulas · Fundamentos de Ciência da Computação · 0/10
Recomendado: essencial

Lógica e Pensamento Computacional

3 min de leitura

fonte

Programar não é decorar sintaxe - é resolver problemas de forma estruturada. Antes de qualquer linha de código, existe um trabalho mental: decompor, reconhecer padrões, abstrair, criar algoritmos. Esse conjunto de hábitos é o que se chama de pensamento computacional, e ele serve pra tudo - até pra resolver problemas fora da tela.

O essencial 🟢

Quatro habilidades formam o cerne:

  • Decomposição - quebrar um problema grande em problemas menores. "Fazer um e-commerce" vira "cadastrar produto", "carrinho", "checkout", "envio". Cada pedaço vira um módulo testável separadamente.
  • Reconhecimento de padrões - perceber que o problema de hoje se parece com um que você já resolveu. Botão de "favoritar" no Twitter é o mesmo conceito do botão "curtir" no Instagram - é um toggle com estado persistido.
  • Abstração - esconder os detalhes que não importam naquele momento. Quando você chama array.sort(), não está pensando em quicksort vs mergesort - só quer a lista ordenada. Escolher o nível certo de abstração é uma das habilidades mais valiosas que um dev tem.
  • Algoritmo - a sequência de passos pra resolver o problema. "Receita de bolo" é o exemplo clássico: passos claros, ordem definida, fim previsível.

A lógica booleana é o que conecta essas habilidades à máquina. Tudo se resume a AND (&&), OR (||), NOT (!). Tabela verdade na mão:

ABA AND BA OR BNOT A
VVVVF
VFFVF
FVFVV
FFFFV

É a base de qualquer if, while, switch. Se a tabela verdade não é automática pra você, vale decorar: ela aparece em todo código que você escreve.

Dica: se você travar num bug, volte pra decomposição. "Onde exatamente isso falha?" - isole o pedaço menor possível. 90% das vezes o bug está num detalhe que sumiu na abstração.

Aprofundamento 🟡

Lógica de predicados (ou lógica de primeira ordem) é a base da especificação formal de software. Em vez de só manipular valores verdadeiros, você fala sobre propriedades e relações: "todo usuário cadastrado tem email" (∀x: User(x) → HasEmail(x)). É a linguagem por trás de ferramentas como Alloy, TLA+, e dos "contratos" que você escreve em linguagens com tipos dependentes.

Na prática, mesmo sem usar lógica formal, internalizar o hábito de "especificar antes de implementar" economiza horas. Antes de escrever uma função, escreva em uma frase: "essa função recebe X, garante Y, retorna Z". Se você não consegue, a função ainda não está clara o suficiente.

Decomposição funcional é a técnica de quebrar uma função em funções menores até cada uma fazer uma coisa bem feita. O oposto - a função de 200 linhas que faz tudo - é sintoma clássico de quem não decompôs o suficiente.

Pra quem quer ir além 🔴

Máquinas de estado finitas (FSMs) são um modelo que captura sistemas com número limitado de estados e transições entre eles. Um elevador é uma FSM: estados "parado", "subindo", "descendo", "manutenção"; transições baseadas em botões e sensores. Protocolos de rede, parsers, e fluxos de UI complexos são frequentemente FSMs disfarçadas. Aprender a reconhecer e modelar uma FSM é um superpoder.

Referência: Structure and Interpretation of Computer Programs (SICP), Capítulo 1 - embora use Scheme (Lisp), os exercícios de pensamento computacional são atemporais. Tem tradução parcial em PT-BR circulando.

No próximo nó, vamos falar de algoritmos e complexidade - como medir se uma solução é "boa" além de "funciona".

// recursos

// avaliação da trilha

—
ainda sem avaliações