Pular para o conteúdo

Fundamentos que precisam permanecer fortes

Você pode delegar a sintaxe. Não pode delegar o modelo mental do que o código faz.

⏱ 9 minCapítulo 5 / 18

5.1Semântica antes de memória

Leia código como uma execução, não como texto

A IA pode produzir a sintaxe de uma rotina assíncrona. Julgamento é saber se o cancelamento se propaga, se uma tarefa fica órfã, se exceções se perdem e se recursos são liberados. Teste seu modelo mental.

Preveja o comportamento

Pergunta 1 de 2

await Promise.all([fetchA(), fetchB(), fetchC()]) — fetchB rejeita após 50 ms. O que acontece com fetchA e fetchC?

5.2Algoritmos, complexidade, representação

Reconheça a forma do custo

Você pode delegar a escrita de uma busca e ainda precisar perceber que a composição de duas operações simples criou custo quadrático. Arraste o volume e veja duas implementações “igualmente corretas” divergirem.

O(n²) · para cada pedido → pedidos_vistos.includes(id)5.0 ms

≈ 1.0×10^6 operações · tempo estimado @ 2×10^8 ops/s

O(n) · vistos = new Set(ids) → vistos.has(id)10 µs

≈ 2.0×10^3 operações · tempo estimado @ 2×10^8 ops/s

As duas versões parecem corretas na revisão com 100 linhas. A diferença só aparece com volume real — por isso é preciso reconhecer a forma do custo, mesmo sem ter digitado o código.

5.3Idempotência e efeitos colaterais

Ausência de resposta não é ausência de efeito

Timeout, repetição e falhas parciais estão no centro de muitos sistemas — e das ferramentas de agentes. Um contrato de idempotência permite repetir uma chamada sem acrescentar o efeito indesejado. Avance pelas duas versões.

Repetição após timeout

Cliente / ferramenta do agente
API de reservas + banco

Estado compartilhado

Unidades disponíveis
5
Reservas
0
Chaves de idempotência
0

Aperte reproduzir ou avance passo a passo.

Repetição ingênua

5.4Dados e concorrência

Três perguntas que toda mudança de dados precisa responder

Uma consulta pode executar sem erro e duplicar registros num join ou contar a entidade errada. Uma transação pode ser válida e insuficiente para uma regra de negócio concorrente. “Coloque em uma transação” não descreve toda a solução. [F28]

  1. ?

    O que acontece quando duas requisições chegam juntas?

  2. ?

    O que acontece quando uma falha depois de gravar?

  3. ?

    O que acontece quando uma migração precisa conviver com versões diferentes da aplicação?

Veja uma condição de corrida simulada no caso técnico →

A IA produz camadas, adaptadores e serviços em segundos. O engenheiro precisa exigir uma razão para a existência de cada um.

5.5Depuração como investigação causal

Que observação mudaria sua hipótese?

A IA amplia sua capacidade de levantar causas e preparar experimentos. Seu trabalho é manter a investigação conectada ao fenômeno real.

Situação

Depois de um release, a latência p99 do endpoint de checkout saltou de 300 ms para 2,4 s. O agente propõe várias correções.

Qual é o melhor próximo passo?

← Experimente

5.6Operação e observabilidade

O sistema precisa ser compreensível em execução

Logs descrevem eventos, métricas acompanham comportamento agregado, traces relacionam as etapas de uma operação — o OpenTelemetry oferece uma base comum. [F31] Gerar um painel pode ser delegado; saber se ele responde à pergunta de operação, não.

Latência

Olhe as caudas e separe requisições bem-sucedidas das que falharam.

Tráfego

Demanda sobre o sistema, na unidade que importa.

Erros

Falhas explícitas, conteúdo errado e violações de política.

Saturação

O quão “cheio” está o recurso mais restrito.

Os quatro sinais de ouro do livro de SRE do Google. [F32]

5.7Produto, domínio e UX

Quanto mais fácil construir, mais a escolha importa

O framework HEART traduz objetivos de produto em sinais e métricas centrados no usuário. [F37] A IA pode explorar alternativas; os critérios de sucesso precisam representar pessoas reais — inclusive navegação por teclado, estados de erro e acessibilidade.

Pontos-chave

  1. 1

    Entender código é modelar sua execução: estado, erros, recursos, cancelamento e concorrência.

  2. 2

    Reconheça a forma do custo; o volume revela o que a revisão com poucos dados esconde.

  3. 3

    Ausência de resposta não é ausência de efeito: projete contratos de idempotência para tudo que pode ser repetido.

  4. 4

    Depure com hipóteses que discriminam, observe os sinais certos e mantenha os critérios de sucesso ligados a usuários reais.

Verifique seu entendimento

Pergunta 1 de 3

Uma ferramenta do agente dá timeout após chamar “deploy”. Qual a suposição mais segura?

Ler a seção completa do relatório originalO texto integral — com todas as fontes e nuances.

5.1. Compreensão de código: semântica antes de memória

O engenheiro precisa ler um trecho e compreender o que ele faz, quais estados modifica, que suposições usa e como pode falhar. Isso exige familiaridade com tipos, escopo, mutabilidade, tratamento de erros, recursos, concorrência e modelo de execução da linguagem relevante ao seu trabalho.

Esse domínio permite selecionar o que investigar e quais controles exigir. Ele não pressupõe releitura humana integral de toda a produção dos agentes; a seção 7 descreve como distribuir verificação e atenção.

A IA pode produzir a sintaxe de uma rotina assíncrona. O julgamento necessário inclui perceber se o cancelamento é propagado, se uma tarefa fica órfã, se exceções se perdem e se recursos são liberados. Esses problemas exigem um modelo mental da execução.

Critério prático: diante de código novo, conseguir prever um comportamento importante, criar um caso que confirme ou refute a previsão e explicar o resultado. É possível usar IA na investigação; o entendimento precisa se tornar demonstrável.

O currículo CS2023, elaborado por ACM, IEEE-CS e AAAI, já distinguia a mudança de atividades da permanência dos fundamentos: maior abstração, compreensão, verificação e decomposição convivem com a necessidade de avaliar algoritmos e programas. É uma orientação curricular de especialistas, publicada em 2024, e não uma medição das capacidades atuais dos modelos. F14

5.2. Algoritmos, complexidade e representação

O estudo de algoritmos deve servir à escolha e à avaliação. Interessa reconhecer quando uma estrutura de dados muda a ordem de grandeza do custo, quando o volume torna uma implementação inviável e quando uma aproximação altera a resposta do produto.

Um engenheiro pode delegar a escrita de uma busca ou de uma ordenação e ainda precisar identificar que a composição de duas operações aparentemente simples criou um custo quadrático. Também precisa distinguir desempenho assintótico de custos concretos: alocação, rede, disco, cache, serialização e contenção podem determinar o comportamento observado.

Prioridade: entender classes de problemas e limites de recursos, usar medição e examinar casos adversos. A quantidade de algoritmos recitados de memória é um indicador muito limitado desse domínio.

5.3. Modelagem de dados e correção sob concorrência

Dados exigem atenção a significado, identidade, cardinalidade, invariantes, autorização, histórico e evolução de esquema. Uma consulta que executa sem erro pode duplicar registros em um join, misturar clientes ou contar a entidade errada. Uma transação pode ser válida sintaticamente e insuficiente para uma regra de negócio concorrente.

A documentação do PostgreSQL mostra, por exemplo, que o isolamento Read Committed trabalha com snapshots por comando e tem comportamentos específicos diante de atualizações concorrentes. A escolha de isolamento e de restrições precisa ser compatível com o invariante pretendido; “coloque em uma transação” não descreve toda a solução. F28

Critério prático: explicar o que acontece quando duas requisições chegam juntas, quando uma falha depois de gravar e quando uma migração precisa conviver com versões diferentes da aplicação.

5.4. Sistemas distribuídos e efeitos colaterais

Timeout, repetição, ordenação, consistência, filas, controle de carga e falhas parciais continuam sendo parte central de muitos sistemas. O engenheiro deve perceber que ausência de resposta não significa ausência de efeito.

A Amazon Builders’ Library descreve a idempotência como um contrato para permitir repetição de chamadas sem acrescentar o efeito indesejado, com identificação de intenção e tratamento explícito de solicitações repetidas. A habilidade relevante é definir esse contrato e verificar seu cumprimento, inclusive em concorrência. F29

Esse conhecimento também vale para agentes. Se uma ferramenta falha após enviar uma solicitação, tentar novamente pode duplicar uma ação. Ferramentas que expõem identificadores de operação, estados consultáveis e regras claras de repetição permitem recuperação mais confiável.

5.5. Arquitetura como definição de restrições úteis

Arquitetura deve tornar claras as responsabilidades, dependências e decisões difíceis de reverter. Em um ambiente com execução abundante, esses limites ajudam a impedir que soluções locais prejudiquem o conjunto.

Vale aprofundar contratos de APIs, separação de domínio e infraestrutura, compatibilidade, evolução de esquema e isolamento de componentes. O objetivo é permitir mudanças independentes e reduzir o conhecimento necessário para executar cada tarefa corretamente.

É igualmente necessário reconhecer abstração sem benefício. A IA pode produzir camadas, adaptadores e serviços rapidamente; o engenheiro deve exigir uma razão para sua existência. Uma arquitetura precisa responder a necessidades observadas ou restrições concretas. O grau de formalização deve acompanhar a duração e as consequências do sistema.

O tratamento de tempo, escala e escolhas em Software Engineering at Google ajuda a situar esse julgamento: construir software inclui sustentar sua capacidade de mudança ao longo do tempo. F35

5.6. Depuração como investigação causal

Depurar bem envolve formular hipóteses, buscar evidência que as discrimine e reduzir o problema. A IA amplia a capacidade de levantar causas, localizar código e preparar experimentos. Cabe ao engenheiro manter a investigação conectada ao fenômeno real.

Se uma requisição está lenta, é necessário separar espera de CPU, I/O, bloqueio, fila, rede e dependências. Acrescentar cache sem compreender a causa pode esconder o sintoma e introduzir inconsistência. A pergunta útil é qual observação mudaria a hipótese atual.

Exercício de domínio: antes de executar um experimento, prever qual sinal deve mudar se a hipótese estiver correta. Depois comparar previsão e observação. Isso ensina a reconhecer quando uma correção apenas deslocou o problema.

5.7. Operação e observabilidade

O sistema precisa ser compreensível em execução. Logs descrevem eventos; métricas permitem acompanhar comportamentos agregados; traces relacionam etapas de uma operação. OpenTelemetry oferece uma base comum para produzir e correlacionar esses sinais. F31

O engenheiro deve saber escolher os sinais relevantes, interpretar caudas de latência, distinguir erro de sucesso e relacionar uma alteração ao comportamento observado. O capítulo de monitoramento do Google SRE destaca latência, tráfego, erros e saturação, combinando observação interna e experiência externa. F32

Gerar um painel pode ser delegado. Saber se o painel responde à pergunta de operação continua sendo julgamento técnico. Isso inclui limitar dados sensíveis na telemetria e evitar métricas cuja cardinalidade torne a observação cara ou pouco utilizável.

5.8. Produto, domínio e experiência do usuário

Quanto mais fácil implementar uma ideia, maior a necessidade de escolher bem o problema. O engenheiro precisa compreender quem usa o sistema, qual tarefa está tentando realizar, quais restrições importam e como reconhecer melhora.

O framework HEART, apresentado por pesquisadores do Google, propõe traduzir objetivos de produto em sinais e métricas centrados no usuário. É uma referência para conectar engenharia a resultados observáveis. F37

Essa conexão exige competências concretas: conversar com usuários, observar uso, interpretar feedback, negociar escopo e avaliar acessibilidade. Uma tela pode parecer completa e ainda falhar na navegação por teclado, em estados de erro ou na compreensão de uma decisão importante. A IA pode explorar alternativas; os critérios de sucesso precisam representar pessoas reais.