Fundamentos de Software Engineering

Em uma frase

Escrever código é a parte fácil; o trabalho de um software engineer é fazer esse código continuar funcionando quando ele cresce, quando o time cresce, quando os dados crescem e quando o mundo muda.

Para quem é este guia

Para quem já programa, mesmo que pouco, e sente que falta a teoria por trás das decisões. Por que aquele projeto ficou impossível de mudar? Por que o sistema que funcionava com mil usuários caiu com cem mil? O que exatamente acontece quando alguém diz “treinamos um modelo”?

Você não precisa ter lido nenhum livro. Cada termo técnico é explicado na primeira vez em que aparece e reunido no glossário.

Como este guia funciona

São 11 módulos, numa ordem pensada para que cada um use o que veio antes. Cada módulo explica as ideias de verdade, com exemplos e diagramas, e fecha com perguntas para você conferir se entendeu.

No fim de cada módulo há uma seção “Quer ir mais fundo?”. Ela aponta para os guias por livro deste site e para o livro original. Nada ali é obrigatório. O módulo foi escrito para se bastar; os livros são para quando um assunto te prender e você quiser os detalhes.

O mapa

flowchart TD
  subgraph C["Parte 1 · Código"]
    M1["1 · Código que aguenta mudança"] --> M2["2 · Fronteiras e dependências"]
    M2 --> M3["3 · Modelando o negócio"]
    M3 --> M4["4 · Decisões de arquitetura"]
  end
  subgraph D["Parte 2 · Dados"]
    M5["5 · Dados por dentro"] --> M6["6 · Quando uma máquina não basta"]
    M6 --> M7["7 · Sistemas distribuídos falham"]
    M7 --> M8["8 · Movendo dados: batch e streams"]
    M8 --> M9["9 · Projetando sistemas na prática"]
  end
  subgraph I["Parte 3 · IA"]
    M10["10 · Como uma máquina aprende"] --> M11["11 · ML em produção"]
  end

A ordem não é a única possível. Se você trabalha com dados, pode começar pela Parte 2. Se o seu interesse é IA, a Parte 3 funciona sozinha, mas o módulo 11 fica mais claro depois dos módulos 5 a 8.

Os módulos

Parte 1 · Código e arquitetura

  1. Código que aguenta mudança — por que código bagunçado fica caro, o que são acoplamento e coesão, e os princípios SOLID explicados por problemas reais.
  2. Fronteiras e dependências — a regra que organiza um sistema em camadas e por que banco, framework e interface são “detalhes”.
  3. Modelando o negócio — como fazer o código falar a língua do negócio e como dividir um sistema grande em partes com fronteiras claras.
  4. Decisões de arquitetura — características que um sistema precisa ter, os estilos de arquitetura (monolito, microsserviços, eventos) e como registrar o porquê de cada escolha.

Parte 2 · Dados e escala

  1. Dados por dentro — modelos de dados, como um banco guarda e encontra as coisas, e como mudar o formato dos dados sem quebrar ninguém.
  2. Quando uma máquina não basta — replicação, particionamento e transações: copiar, dividir e manter os dados corretos.
  3. Sistemas distribuídos falham — rede que perde mensagens, relógios que mentem, e como máquinas chegam a um acordo mesmo assim.
  4. Movendo dados: batch e streams — processar grandes volumes de uma vez ou evento a evento, e manter vários sistemas em sincronia.
  5. Projetando sistemas na prática — um método para sair de “preciso de um sistema que faz X” até um desenho que aguenta escala.

Parte 3 · Inteligência artificial

  1. Como uma máquina aprende — o que é treinar um modelo, como uma rede neural funciona por dentro e o que mudou desde os Transformers.
  2. ML em produção — dados, features, deploy e monitoramento: tudo o que um modelo precisa para funcionar fora do notebook.

Os livros por trás do guia

Este guia se apoia em sete livros. Para cada um existe um guia de leitura com resumo por capítulo, caso você queira ir além do módulo:

LivroAparece nos módulosGuia neste site
Clean Architecture (Robert C. Martin)1, 2Guia do livro
Domain-Driven Design (Eric Evans)3Guia do livro
Fundamentals of Software Architecture (Richards & Ford)1, 4Guia do livro
Designing Data-Intensive Applications (Martin Kleppmann)5, 6, 7, 8Guia do livro
System Design Interview (Alex Xu)9Guia do livro
Deep Learning (Goodfellow, Bengio, Courville)10Guia do livro
Designing Machine Learning Systems (Chip Huyen)11Guia do livro

Próximo: 1. Código que aguenta mudança · Voltar ao início do site