Fundamentos que Não Mudam
Os pilares da programação que nenhuma linguagem, framework ou tendência vai tornar obsoletos. Memória, estruturas de dados, algoritmos, recursão e orientação a objetos — dominados uma vez, aplicados para sempre.
Pilar 1: Como o Computador Executa Seu Código
Stack e Heap: onde vivem seus dados
Aprenda toda variável ocupa espaço em algum lugar da memória com conceitos práticos e exercícios aplicados.
Valor vs Referência: o bug que todo mundo tem
Aprenda passagem por valor: a função recebe uma cópia com conceitos práticos e exercícios aplicados.
Mutabilidade e Garbage Collector
Aprenda imutável não significa que a variável não muda — significa que o objeto não muda com conceitos práticos e exercícios aplicados.
1.4 Mutabilidade, Identidade & id()
id(obj) retorna o endereço único de memória na Heap. "==" compara igualdade de conteúdo, enquanto "is" compara identidade de memória.
Pilar 2: Estruturas de Dados e o Trade-off Fundamental
O(n) vs O(1): a escolha que importa
Aprenda notação big-o: medindo o custo das operações com conceitos práticos e exercícios aplicados.
Dict: a estrutura que está em todo lugar
Aprenda dicionário é uma tabela hash — não um arquivo de texto com conceitos práticos e exercícios aplicados.
Stack e Queue: controle de ordem e fluxo
Aprenda stack (pilha): lifo — o último que entra é o primeiro que sai com conceitos práticos e exercícios aplicados.
2.4 File Descriptors: Tudo no Linux é um Arquivo
No SO, arquivos abertos, conexões TCP e sockets de rede são representados como inteiros (File Descriptors) na tabela de arquivos do processo.
2.5 Memória Virtual, Paginação & Swap
A MMU (Memory Management Unit) divide a memória em páginas de 4KB, mapeando o endereço virtual do processo para o endereço físico na RAM ou disco (Swap).
Pilar 3: Algoritmos — Busca, Ordenação e Complexidade
Busca Linear vs Busca Binária
Aprenda busca linear: o(n) — funciona sempre, mas não escala com conceitos práticos e exercícios aplicados.
Ordenação: por que importa entender o sort
Aprenda python usa timsort: o(n log n) e estável com conceitos práticos e exercícios aplicados.
3.3 HTTP/HTTPS & Handshake TLS
No HTTPS, o Handshake TLS negocia chaves simétricas de sessão via Criptografia Assimétrica (ECC/RSA) antes do primeiro byte HTTP trafegar.
3.4 Resolução DNS: De Nomes a IPs
Navegador -> Cache Local -> Resolvente ISP -> Root Servers -> TLD (.com) -> Servidor Autoritativo -> Registro A / AAAA com IP.
3.5 Sockets & WebSockets Full-Duplex
Inicia como requisição HTTP com headers Upgrade: websocket. Após o aceite do servidor, a conexão TCP permanece aberta para quadros binários bidirecionais.
Pilar 4: Recursão — Quando a Função Chama a Si Mesma
Como a recursão funciona na call stack
Recursão é quando uma função chama a si mesma com uma entrada menor ou mais simples. Todo algoritmo recursivo precisa de dois ingredientes obrigatórios:.
Memoização: não calcule o que você já calculou
A sequência de Fibonacci (1, 1, 2, 3, 5, 8, 13...) parece simples:.
4.3 Análise Assintótica Big-O
O(1) busca em Tabela Hash. O(log n) busca binária. O(n) busca linear. O(n log n) ordenação eficiente. O(n²) loops aninhados.
4.4 Busca Binária & Timsort
Busca Binária elimina metade dos candidatos a cada passo em listas ordenadas. Timsort é o algoritmo de ordenação estável O(n log n) do Python.
4.5 Race Conditions em Coleções Compartilhadas
Modificar uma lista ou dicionário compartilhado por múltiplas threads simultaneamente sem trava pode corromper ponteiros internos.
Pilar 5: Orientação a Objetos — Os 4 Pilares Reais
Encapsulamento: protegendo o estado interno
Aprenda encapsulamento: expor interface, esconder implementação com conceitos práticos e exercícios aplicados.
Herança vs Composição: a escolha certa
Aprenda herança: "é um" — use com moderação com conceitos práticos e exercícios aplicados.
Polimorfismo: mesma interface, comportamentos diferentes
Aprenda polimorfismo: o código que não precisa saber com quem está falando com conceitos práticos e exercícios aplicados.
5.4 Closures Lexicais & Padrão Decorator
Closures "lembram" das variáveis do seu escopo criador. Decorators envelopam funções adicionando comportamentos (ex: log, auth, rate-limit).
Pilar 6: Modelagem de Domínio & POO (Entidades vs Value Objects)
Invariantes de negócio, Composição vs Herança, Coesão e Acoplamento.
6.1 Entidades, Value Objects & Invariantes
Entidades possuem identidade única (ID). Value Objects são imutáveis definidos por seu valor. Invariantes são regras inegociáveis de negócio.
6.2 Invariantes de Negócio & Domain Constraints
Invariantes são regras que nunca podem ser quebradas (ex: saldo não pode ser negativo sem limite). Devem ser validadas no construtor do modelo.
6.3 Composição vs Herança
Herança cria alto acoplamento ("É UM"). Composição cria flexibilidade em tempo de execução ("TEM UM").
6.4 Coesão & Acoplamento em Classes
Alta coesão: classe foca em um único propósito. Baixo acoplamento: classes interagem via interfaces bem definidas sem conhecer detalhes internos.
Pilar 7: Persistência de Dados (ACID, Índices & Normalização)
Transações ACID, Índices B-Tree, Normalização 1FN a 3FN e Eliminação de N+1 Queries.
7.1 Transações ACID & Isolamento de Dados
Atomicidade (tudo ou nada), Consistência (regras válidas), Isolamento (transações concorrentes seguras) e Durabilidade (persistido em disco).
7.2 JOINs & Planos de Execução (EXPLAIN ANALYZE)
EXPLAIN ANALYZE mostra se o banco usou índice ou fez varredura completa da tabela (Full Table Scan). JOINs devem usar chaves indexadas.
7.3 Índices B-Tree vs Hash & Custo de Leitura/Escrita
Índices B-Tree aceleram buscas SELECT O(log n) e ordenações, mas tornam INSERT/UPDATE/DELETE mais lentos pois a árvore precisa ser rebalanceada.
7.4 Normalização (1FN, 2FN, 3FN) & Desnormalização
1FN: atributos atômicos. 2FN: sem dependência parcial da PK. 3FN: sem dependência transitiva. Desnormalização estratégica é usada para relatórios analíticos.
7.5 Transações ACID & Problema N+1 no ORM
Atomicidade, Consistência, Isolamento e Durabilidade. Evite N+1 Queries no Django ORM utilizando select_related para ForeignKeys.
Pilar 8: Concorrência (Mutex, Locks, Deadlocks & GIL)
Travas de memória, prevenção de Deadlocks e isolamento transacional.
8.1 Locks, Semáforos & Prevenção de Deadlocks
Locks garantem exclusão mútua em seções críticas de código. A ordem estrita de aquisição de travas evita Deadlocks.
8.2 Mutex, Semáforos & Trava de Memória
Mutex (Lock de exclusão mútua): permite apenas 1 thread por vez. Semáforo: permite até N threads simultâneas no recurso.
8.3 Prevenção de Deadlocks & Livelocks
Deadlock ocorre quando Thread A espera Trava B e Thread B espera Trava A. Evita-se ordenando estritamente a aquisição de travas.
8.4 Níveis de Isolamento de Transação no Banco
Read Uncommitted (Dirty Read), Read Committed (Phantom Read evitado), Repeatable Read (padrão InnoDB) e Serializable.
Pilar 9: Criptografia, Hashing & Autenticação (HMAC & JWT)
Hashing unidirecional, Criptografia Simétrica/Assimétrica, AuthN vs AuthZ e Tokens HMAC.
9.1 Hashing vs Criptografia & Tokens HMAC
Hashes (bcrypt, SHA-256) validam integridade sem revelar a senha. HMAC combina chaves secretas para assinar payloads à prova de adulteração.
9.2 Criptografia Simétrica (AES) vs Assimétrica (RSA/ECC)
Simétrica (AES-256): rápida para grandes volumes de dados. Assimétrica (RSA/ECC): usada em assinaturas digitais e troca inicial de chaves.
9.3 Autenticação (AuthN) vs Autorização (AuthZ)
AuthN (Autenticação): valida quem é o usuário (senha/MFA). AuthZ (Autorização): valida permissões de acesso ao recurso (RBAC/ABAC).
9.4 Tokens Assinados HMAC & JWT (Prevenção de Falsificação)
HMAC calcula o digest do payload combinando uma chave secreta. Se o cliente alterar 1 caractere no token, a verificação do digest falha.
Pilar 10: Pirâmide de Testes, TDD & Cobertura
Testes Unitários, de Integração, Mocks, Stubs e Ciclo Red-Green-Refactor.
10.1 Pirâmide de Testes & Mocks em Produção
Testes unitários rodam em milissegundos e isolam dependências com Mocks. Testes de integração validam contratos reais com banco e rede.
10.2 Mocks, Stubs & Test Fixtures
Stubs fornecem respostas prontas. Mocks verificam se determinado método foi chamado com argumentos esperados.
10.3 TDD (Test-Driven Development): Red-Green-Refactor
1. Escreva o teste (RED). 2. Escreva o código mínimo para passar (GREEN). 3. Melhore o design sem quebrar os testes (REFACTOR).
10.4 Cobertura de Testes & A Armadilha dos 100%
100% de cobertura de código apenas garante que as linhas foram executadas, não que as regras de negócio foram testadas adequadamente.
Pilar 11: Grafo Interno do Git (DAG, Rebase & Conflitos)
Commits como Grafo Acíclico Dirigido (DAG), Rebase vs Merge e Resolução de Conflitos.
11.1 O Grafo Interno do Git (DAG) & Rebase
Cada commit aponta para seus pais formando um DAG. Rebase reaplica commits sobre uma nova base mantendo um histórico linear.
11.2 Rebase vs Merge: Preservação vs Histórico Linear
Merge preserva a história exata das ramificações. Rebase reaplica seus commits no topo da branch de destino gerando um histórico limpo e linear.
11.3 Resolução de Conflitos & Ancestral Comum
O Git compara a branch atual (OURS), a nova branch (THEIRS) e o ancestral comum (BASE) para identificar e mesclar alterações automaticamente.
11.4 Workflows: Trunk-Based Development vs Git Flow
Trunk-Based: integrações contínuas e frequentes na branch principal. Git Flow: branches de longa duração para releases, features e hotfixes.
Pilar 12: Refatoração Segura & Engenharia de Código Legado
Characterization Tests, Pontos de Costura (Seams) e Gestão de Dívida Técnica.
12.1 Characterization Tests & Pontos de Costura (Seams)
Characterization Tests capturam o comportamento atual (mesmo bugs) como rede de segurança. Seams abrem pontos de extensão sem reescrever o sistema.
12.2 Characterization Tests: Travando Comportamentos
Escreva testes que afirmem a saída atual do sistema (mesmo bugada). Eles garantem que nenhuma alteração não intencional ocorra durante a refatoração.
12.3 Refatoração Segura & Regra do Escoteiro
Faça refatoração em passos minúsculos com testes passando a cada modificação. Nunca altere comportamento de negócio enquanto refatora a estrutura.
12.4 Pontos de Costura (Seams) & Dívida Técnica
Um Seam é um lugar onde você pode alterar o comportamento sem mudar o código naquele ponto. Permite injetar dependências e testar isoladamente.