Cinco ideias que voltam a aparecer em cada um dos próximos módulos. Não são teoria — são lentes para enxergar código. Clique em cada conceito para o estudo aprofundado.
Quando algo der errado em produção — e vai dar — você não terá tempo de aprender
fundamentos. Eles precisam estar internalizados antes da crise.
As perguntas que separam júnior de sênior. Não decore as respostas — entenda o porquê por trás do trade-off.
Quando aplicar SOLID?
Em código que vai mudar. YAGNI vence em scripts e protótipos.
SOLID é ferramenta para gerenciar mudança — onde não há mudança esperada,
é overhead. Aplicar SOLID a uma Calculator de exemplo gera
FizzBuzzEnterpriseEdition: pedagogicamente útil para mostrar o exagero, péssimo como referência.
Herança ou composição?
Composição por default. Herança só em hierarquias verdadeiras (Animal → Cachorro),
nunca para reuso. "É um" passa, "tem um" passa, "usa um" passa — "quero reaproveitar
código" é cilada. Linguagens modernas (Go, Rust) excluíram herança de classe e o mundo continuou
girando: isso deveria dar pra pensar.
Quanto testar?
Cobertura é métrica vaidade. Teste comportamento crítico, fronteiras de domínio,
e bugs que reapareceram. 100% de cobertura com testes ruins é pior que 60% com
testes que importam. O que você quer maximizar é a velocidade de mudança com confiança,
não o número no relatório.
O foco não é resolver o problema (trivial). É estruturar como sênior: camadas claras, testes, configs externalizadas, logs estruturados. Implementado três vezes, em três paradigmas distintos.
PROJETO PRÁTICO
URL Shortener (bit.ly mini)
Serviço que encurta URLs com analytics básico. O ganho não está em "rodar" —
está em comparar como cada linguagem expressa as mesmas ideias arquiteturais.
REQUISITOS
POST /shorten — recebe URL, devolve código de 7 chars
GET /:code — redireciona e incrementa contador
GET /stats/:code — devolve hits, criado em, última visita
Storage começa em memória, depois Postgres (interface preserva)
Configuração via env vars, logs JSON, graceful shutdown
Os três projetos no GitHub (repo por linguagem ou monorepo), README explicando
trade-offs, e um ADR único comparando as três implementações:
"Estruturando a mesma aplicação em três paradigmas".
Perguntas reais de entrevistas sêniores. Pratique respondendo em voz alta, articulando trade-offs com clareza.
Q.01
Diferença entre acoplamento e coesão? Dê um exemplo de baixo acoplamento e baixa coesão (cilada comum).
Q.02
O que é Liskov Substitution? Mostre código que viola.
Q.03
Por que herança pode ser ruim? Quando é boa?
Q.04
Como você testa código que depende de DB sem subir um DB?