O que é um framework?
Imagine que você está construindo um pequeno aplicativo web: contas de usuário, um feed, uma página de configurações. Antes que qualquer uma das suas próprias ideias apareça na tela, você precisa de código que transforme URLs em páginas, código que converse com um banco de dados, código que mantenha as senhas seguras e código que redesenhe a tela quando algo muda. Nada disso é a ideia do seu app. Todo app precisa disso, e a maior parte é igual de projeto para projeto.
Você poderia escrever toda essa infraestrutura você mesmo, e as pessoas faziam isso, por anos. É lento, é onde vivem os bugs mais sutis, e cada equipe acabava com uma versão ligeiramente diferente, e ligeiramente quebrada, do mesmo mecanismo. Um framework é a resposta acumulada para isso: a infraestrutura compartilhada, escrita uma vez e testada por milhares de projetos, empacotada com uma estrutura que indica onde o seu próprio código deve entrar. Você constrói as partes que fazem o seu projeto único; o framework cuida das partes que todo projeto repete.
Frameworks não são uma coisa exclusiva da web. Eles existem em todos os lugares onde programas são construídos, e este capítulo é sobre a ideia em si, em qualquer linguagem e em qualquer área.
O que é um framework (e o que é uma biblioteca)
A palavra é usada de forma solta, então aqui está a distinção que realmente importa, em código:
// Uma biblioteca: seu código está no comando e chama a biblioteca quando é útil.
const label = dateLibrary.format(order.createdAt, "MMM D");
// Um framework: o framework está no comando e chama o código que você conecta a ele.
export default function OrdersPage() {
return listOfOrders();
}A primeira linha é você no controle: seu programa roda e ele toma um recurso emprestado para uma tarefa específica. A segunda é diferente por natureza. Você nunca chama OrdersPage diretamente. Você a escreve, coloca no lugar que o framework espera, e o framework a chama no momento certo — neste caso, quando um visitante abre a página de pedidos.
Essa inversão tem um nome: inversão de controle. Com uma biblioteca, o seu código controla o fluxo do programa e toma helpers de empréstimo. Com um framework, é o framework que controla o fluxo, e o seu código preenche as lacunas que ele deixa para você. Um resumo útil: você chama uma biblioteca; um framework chama você.
A mesma lógica aparece em todos os cantos da programação. O Django recebe a requisição web e chama a sua função de view. O Flutter executa o app e pergunta aos seus widgets o que desenhar. A Unity executa o loop do jogo e chama os seus scripts a cada frame. O pytest encontra as suas funções de teste e as executa para você. Áreas diferentes, uma mesma ideia: o framework é dono do motor, e você fornece as peças que ele foi construído para receber.
Se uma imagem ajuda: uma biblioteca é uma caixa de ferramentas ao seu lado enquanto você constrói, e você põe a mão dentro dela sempre que uma ferramenta é útil. Um framework se parece mais com a estrutura de um prédio, já em pé quando você chega. As paredes, a fiação e o encanamento já têm seus lugares definidos, e o seu trabalho entra nos cômodos que tornam o prédio seu. Os dois economizam esforço; a diferença é quem decide a forma da construção.
O que um framework te dá, e o que ele custa
O argumento a favor de um framework é concreto. Problemas que te tomariam semanas chegam já resolvidos, e resolvidos por pessoas que enfrentaram primeiro os casos mais difíceis: tratamento de senhas, validação de formulários, roteamento, renderização. O seu projeto ganha uma estrutura que um novo colega de equipe reconhece em minutos, porque é a mesma estrutura de qualquer outro projeto naquele framework. E você herda um ecossistema: plugins, tutoriais, perguntas já respondidas, e um grupo de profissionais que já conhecem bem aquele terreno.
Os custos são igualmente concretos, e merecem o mesmo olhar direto. Um framework é uma dependência grande que você não controla, com os próprios bugs, o próprio ritmo e as próprias opiniões. Existe uma curva de aprendizado antes que a sua primeira página seja renderizada, e parte do que você aprende é conhecimento sobre o framework, não sobre programação em si. O seu código se molda às formas dele, o que torna sair mais difícil quanto mais tempo você fica. E os frameworks mudam: versões importantes chegam, padrões são repensados, e se manter atualizado é um trabalho contínuo que não existia com código simples.
Nenhuma das duas listas ganha por si só. O equilíbrio depende inteiramente do projeto, então a pergunta a fazer sobre qualquer framework é "esse framework torna este projeto mais simples". Um framework justifica o seu lugar quando torna o seu projeto mais simples. Quando isso acontece, use-o com prazer. Quando não acontece, os próximos dois capítulos são sobre reconhecer isso a tempo.
Para onde ir a partir daqui
Com a ideia estabelecida, a próxima pergunta natural é o que realmente existe por aí: Os tipos de frameworks percorre as principais famílias, da web aos jogos e aos testes, com as opções mais populares em cada uma. Depois disso, Escolhendo e aprendendo um framework entra na prática de escolher um, aprender um, e saber quando você não precisa de nenhum. E se os exemplos de JavaScript acima pareceram estranhos, a trilha de JavaScript cobre a linguagem em si, o que é o primeiro passo certo antes de qualquer framework construído sobre ela.

