Entrevistas de pair programming: praticar, ferramentas e exercícios reais
Por John Pires · 14 de março de 2026

Entrevistas de pair programming: praticar, ferramentas e exercícios reais
Quando e por que usar
Contexto de entrevistas e sinais para pair programming
Pair programming em entrevistas é usado quando o avaliador quer observar não só o resultado do código, mas o processo de tomada de decisão, comunicação e colaboração. Empresas que valorizam integração rápida com times e revisão contínua preferem esse formato: ele revela como o candidato explica raciocínio, aceita sugestões e resolve impedimentos em tempo real.
Se você tem entre 1 e 3 anos de experiência, já conhece sintaxe, estruturas de dados básicas e padrões comuns. A diferença nos exercícios de pair interviewing está em expor como você pensa e em mudar rapidamente de papel entre driver e navigator.
Benefício prático para quem contrata e quem entrevista
Do lado do recrutador, pair programming diminui ruído: problemas de ambiente local ou mau entendimento do problema são visíveis e podem ser corrigidos na hora. Para o candidato, é oportunidade para demonstrar clareza, uso de ferramentas, testes e disciplina para manter commits limpos e incrementais.
Usar pair programming durante entrevistas evita avaliações superficiais baseadas em solucionar um problema isolado; permite checar habilidades essenciais como depuração, leitura de código e adaptação a constraints do projeto.
Comparacao com alternativas
Pair vs. teste take-home
Teste take-home dá tempo e ambiente controlado, mas pode mascarar colaboração indevida e não mostra como o candidato se comunica em tempo real. Pair revela a capacidade de articular decisões, aceitar feedback e lidar com pressão imediata.
Se o objetivo for avaliar trabalho solo profundo, take-home é melhor. Para avaliar integração com time, pair é superior.
Pair vs. whiteboard e system design
Whiteboard foca pensamento arquitetural sem código executável; system design avalia visão de alto nível. Pair oferece um meio-termo: mostra modelagem, design e habilidade de transformar ideias em código que roda ou passa em testes unitários.
Preferir pair quando a vaga exige entrega contínua, revisão ativa e conhecimento prático de ferramentas e fluxos de trabalho do dia a dia.
Implementacao progressiva
Setup inicial e contratos de comunicação
Antes da sessão, definir regras claras reduz ruído: tempo total, duração de trocas de papel, quem comanda o teclado por X minutos e quando se muda. Um contrato simples funciona: 15 minutos de exploração, 30 minutos de implementação com trocas a cada 10 minutos, 15 minutos de revisão e perguntas.
Defina expectativas sobre o ambiente: linguagem permitida, frameworks, se testes são obrigatórios e se o compartilhamento será em editor remoto ou via sessão local com vídeo. Isso evita surpresa durante a avaliação.
Exercícios progressivos para praticar
Treine com exercícios incrementais: começar com pequenas refatorações, depois adicionar uma feature simples, por fim resolver um bug que envolve leitura de código legado. Essa progressão simula o dia a dia e permite treinar padrões de comunicação técnica.
Aqui vão exemplos que você pode praticar em pares. Cada exemplo tem contexto, objetivos e critérios mínimos de aceitação.
- Refactor: tornar um endpoint mais legível sem alterar comportamento.
- Feature: adicionar paginacao e testes ao endpoint existente.
- Bugfix: diagnosticar e corrigir leaking de memória em um loop assíncrono.
Exemplo de exercício 1: implementar e testar um endpoint simples
Contexto: sistema mínimo Express que armazena usuários em memória. Objetivo: adicionar POST /users com validação simples e teste unitario usando jest. Critério: 201 criado com body validado e teste cobrindo caso feliz e caso de validação.
O bloco abaixo cria o handler. Após rodar, requests POST com body valido retornam 201 e objeto criado.
const express = require('express')
const bodyParser = require('body-parser')
const app = express()
app.use(bodyParser.json())
const users = []
app.post('/users', (req, res) => {
const { name, email } = req.body
if (!name || !email || !email.includes('@')) {
return res.status(400).json({ error: 'invalid payload' })
}
const user = { id: users.length + 1, name, email }
users.push(user)
return res.status(201).json(user)
})
module.exports = app
O que acontece depois: o servidor aceita posts e armazena dados na variável users. Em pairing, o navigator pergunta sobre validações adicionais, e o driver implementa testes e refatorações incrementais.
Integracao com ecossistema real
Ferramentas para sessões remotas e locais
Escolha a ferramenta conforme o foco:
- Para edição colaborativa em tempo real: VS Code Live Share ou CodeTogether.
- Para pair em terminal: tmux com sessão compartilhada ou tmate.
- Para ambiente isolado: GitHub Codespaces ou Gitpod quando quiser reproduzir config de projeto.
Cada ferramenta muda a dinâmica: Live Share facilita mover o cursor entre participantes; tmux exige comunicação verbal sobre mudanças. Pratique ambas modalidades.
Fluxo de trabalho com git durante pair
Manter commits pequenos e atômicos é crucial. Combine branch por feature, commits incrementais e mensagens claras. Use co-authored-by para atribuir trabalho quando ambos contribuíram diretamente.
Exemplo prático de comandos para um par trabalhando no mesmo branch remoto, com commits incrementais e co-author:
# iniciar branch
git checkout -b feature/add-users
# primeiro commit pelo driver
git add src/users.js
git commit -m 'add basic users endpoint'
# quando navigator acrescenta testes
git add tests/users.test.js
git commit -m 'add tests for users endpoint'
# ao encerrar a sessao, combinar autoria
git commit --amend --no-edit --author='Nome Par <par@example.com>'
# ou usar trailer
git commit -m 'finalize users feature
Co-authored-by: Nome Par <par@example.com>'
O que acontece depois: o repositório registra contribuições de ambos. Em entrevistas, explicar esse fluxo mostra disciplina em controle de versionamento e colaboração.
Integração com CI e testes automatizados
Durante a sessão, mostre que você sabe rodar testes localmente e interpretar falhas de CI. Se o projeto tem pipeline CI, simule commits que rodem testes e corrija falhas rapidamente. Isso demonstra responsabilidade com qualidade.
Se não houver CI disponível na entrevista, explique como você escreveria um pipeline mínimo: instalar dependências, executar lint, rodar testes e gerar cobertura. Saber priorizar falhas críticas é diferencial.
Checklist de qualidade para producao
Critérios mínimos a demonstrar em uma sessão de pair
Use este checklist durante a prática para garantir que você mostra o essencial:
- Explique o problema antes de codificar.
- Faça commits pequenos e bem descritos.
- Rode testes e interprete falhas.
- Faça refactorings seguros com testes cobrindo mudanças críticas.
- Troque de papel regularmente (driver/navigator).
Demonstrar atenção a esses pontos reduz fricção e evidencia mindset de produção desde a entrevista.
Erros comuns, armadilhas e dicas praticas
Seja explícito sobre suposições. Se você precisa instalar algo ou rodar um comando, descreva e peça permissão antes de executar no ambiente do entrevistador.
Erros que vejo com frequência em candidatos intermediários:
- Começar a codar sem uma rápida estratégia de solução.
- Cometer grandes blocos de mudança sem testes; torna revisão difícil.
- Ignorar a troca de papéis: o candidato fica no teclado o tempo todo e perde pontos de colaboração.
Dicas práticas:
- Use TDD em exercícios pequenos: escreva um teste que falha, implemente e refatore.
- Se a rede está lenta, sincronize o que cada um fará para evitar sobreposição.
- Documente decisões rápidas no PR/commit para que o avaliador veja raciocínio.
Exemplo de exercício 2: teste que guia implementação (TDD simples)
Contexto: você escreve um teste que descreve comportamento desejado de função que filtra emails válidos. Implementar a função até o teste passar.
// tests/emailFilter.test.js
const { filterValid } = require('../src/emailFilter')
test('filters only valid emails', () => {
const input = ['a@x.com', 'nope', 'b@z.org']
const out = filterValid(input)
expect(out).toEqual(['a@x.com', 'b@z.org'])
})
// src/emailFilter.js
function filterValid(list) {
return list.filter(e => typeof e === 'string' && e.indexOf('@') > 0)
}
module.exports = { filterValid }
O que acontece depois: rodando jest o teste passa. Em pair, discuta bordas, performance e possíveis internacionalizacoes do criterio de validação.
Conclusao pratica
Pair programming em entrevistas é uma ferramenta direta para avaliar colaboração, comunicação e entrega. Pratique com exercícios progressivos, domine ferramentas como Live Share e tmux, e mantenha disciplina com git e testes. Mostrar que você pode explicar decisões, dividir trabalho e adaptar-se rapidamente é mais valioso que entregar uma solução perfeita em silêncio.
Use o checklist apresentado nas suas sessões de preparação: explique o problema, escreva testes, faça commits pequenos, troque de papel e registre coautoria quando aplicável. Esses hábitos replicam o fluxo de trabalho em times reais e aumentam sua chance de sucesso.
Pratique os exemplos fornecidos, altere constraints (tempo, ambiente, linguagem) e repita até que a comunicação e os passos técnicos fiquem automáticos. Entrevistas de pair são menos sobre acertar tudo e mais sobre demonstrar como você trabalha em equipe sob pressão.
Resumo das ações imediatas para treinar hoje:
- Configurar Live Share e tmux e testar uma sessão com um colega.
- Rodar os dois exercícios de código em par, alternando driver a cada 10 minutos.
- Simular um PR com commits atômicos e mensagens claras, incluindo trailer Co-authored-by.
Boa prática: grave a sessão (quando permitido) e reveja 10 minutos para identificar padrões de comunicação que podem melhorar. Pequenas mudanças — pedir mais contexto, resumir decisões, confirmar antes de refatorar — trazem ganhos imediatos na percepção do entrevistador.
Assuntos: Carreira, pair-programming, entrevistas-tecnicas, Git, vscode, tdd
Leia também
LinkedIn para dev júnior: otimizar perfil, projetos e templates de mensagem
Guia prático para devs júnior aprimorarem LinkedIn em 2026: otimize About, transforme projetos em provas e use templates de mensagem que funcionam — com…
Negociação salarial para dev júnior: script, cálculo do piso e roleplay prático
Guia prático para dev júnior: calcule seu piso salarial, construa contra-propostas objetivas e treine com scripts e roleplays. Inclui scripts Python/JS, erros…
Pair programming em entrevistas técnicas: setup, roteiro e exercícios práticos
Guia prático de pair programming em entrevistas: setup reprodutível, scaffold Node.js com endpoint e testes, roteiro por checkpoints, armadilhas técnicas e de…
Como apresentar refatorações de código legado em entrevistas técnicas
Guia prático para explicar refatorações de código legado em entrevistas: demonstre problema, extraia responsabilidades, adicione testes, meça impacto e…
Transforme Pull Requests em estudos de caso práticos para seu portfólio
Use pull requests reais como estudos de caso: extraia problema, decisão técnica e métricas. Automação com scripts e GitHub Actions transforma PRs em cases…
Usar IA para melhorar seu portfólio técnico sem inventar resultados
Aprenda a usar IA para melhorar descrições e organização do seu portfólio técnico sem inventar resultados: padrões, scripts, validações automáticas e…