O que é Depuração com Pato de Borracha?
Depuração com Pato de Borracha é uma técnica de depuração baseada em descrever em voz alta para um pato de borracha, ou qualquer coisa ou pessoa, o que seu programa deve fazer, o que geralmente faz você perceber o que está fazendo de errado. Como rubberduckdebugging.com descreve melhor do que eu, vou citá-los (e traduzi-los) aqui:
O método de depuração com pato de borracha é o seguinte:
Implore, peça emprestado, roube, compre, fabrique ou obtenha de outra forma um pato de borracha (daqueles de banheira).
Coloque o pato de borracha na mesa e informe-o que você vai apenas revisar algum código com ele, se estiver tudo bem.
Explique ao pato o que seu código deveria fazer, e então entre em detalhes e explique seu código linha por linha.
Em algum ponto você dirá ao pato o que vai fazer em seguida, e então perceberá que não é de fato o que você está fazendo. O pato ficará lá serenamente, feliz em saber que ajudou você em seu caminho.
**Nota**: Em um aperto, um colega de trabalho pode substituir o pato, no entanto, muitas vezes é preferível confiar os erros ao pato em vez de seu colega de trabalho.
Eu tenho um Funko Pop do cachorrinho This Is Fine com quem eu às vezes converso quando estou empacado, que me lembra que, bem, ao mesmo tempo não está tudo bem em ficar empacado por muito tempo, está tudo bem quanto a eu cometer erros. Enquanto isso, meu relógio de cozinha do cogumelo vermelho do Mario me lembra que essas são sempre oportunidades de crescimento.
A depuração com pato de borracha costuma ser ensinada como uma forma de evitar interromper outros colegas com perguntas simples que você provavelmente responderá enquanto descreve o problema - pessoas desenvolvedoras e designers não gostam de interrupções, dizem por aí.
Sessões rápidas de programação em par
Contudo, somos pessoas legais e prestativas, e gostamos de ajudar. Na maioria das vezes, sim, estamos disponíveis para uma sessão rápida de programação em par. Talvez não agora, mas daqui a alguns minutos. Pode valer a pena pedir a uma colega 10 minutos do tempo dela. Você pode aproveitar essa oportunidade e ser intencional sobre quem você está procurando, buscando alguém fora do seu círculo imediato. Essa é uma ótima técnica para gerenciar o viés inconsciente e ainda expandir seu círculo.
Pode acontecer que essa colega sirva como um pato de borracha sofisticado. Como você tem que explicar seu código para um ser humano, você pode entrar em mais detalhes e descobrir por conta própria. Às vezes, essa colega pode pegar sua suposição errada enquanto você fala e fazer uma pergunta esclarecedora. Ou ela pode apenas confirmar que esse é um comportamento muito estranho, e pelo menos você sabe que não é a única pessoa que não sabe o que está acontecendo. De qualquer forma, existem grandes chances de você estar melhor depois dessa sessão de programação em par do que antes.
Patos de borracha não-humanos interativos
Infelizmente, existe a chance de você não encontrar alguém para te ajudar.
Com o surgimento dos assistentes virtuais como o ChatGPT, as pessoas começaram a usá-los massivamente como seus patos de borracha. Eles são ótimas ferramentas e tendem a fazer boas perguntas que o guiam para entender o que deu errado. Existem até versões especializadas embutidas como plugins de editores - sem falar no GitHub Copilot.
Enquanto essas ferramentas são úteis e ajudam as pessoas desenvolvedoras a codificar mais rápido, isso mina a colaboração e o compartilhamento de conhecimento em uma escala muito maior do que um simples pato de borracha. Como você fez suas perguntas a um programa de computador e ninguém nem sabia que você tinha esse problema, ninguém teve a oportunidade de aprender com você.
Depuração com pato de borracha em público
Se você realmente não quer incomodar ninguém, a comunicação assíncrona pode te ajudar a se destravar e ainda compartilhar algo com sua equipe.
Na thoughtbot, temos o canal #dev no Slack, onde as pessoas desenvolvedoras fazem perguntas quando estão empacadas, compartilham o que acabaram de aprender e discutem quaisquer tópicos que acham que seria bom compartilhar. Você pode dar uma olhada neste canal lendo a série This Week In #dev.
Diversas vezes, depois de escrever a pergunta, eu me vi percebendo as suposições erradas que eu fiz. Momentos antes de apagar minha mensagem, me ocorreu que o que eu aprendi poderia ser benéfico para outras pessoas que poderiam encontrar desafios semelhantes e procurar soluções lá. Então eu enviei mesmo assim, junto com minha própria resposta.
O que é mais interessante é que, enquanto eu compartilhava, outras pessoas ofereceram soluções alternativas que funcionaram melhor no meu caso. Isso acabou sendo uma vitória dupla: eu aprendi duas coisas novas, e outras pessoas também tiveram a oportunidade de aprender.
Não guarde na sua cabeça
No fim, não importa se você teve seu momento eureka enquanto digitava uma mensagem no Slack, descrevendo o que estava fazendo para uma colega enquanto programavam em par, ou conversando com um ursinho de pelúcia. Eu encorajo fortemente você a compartilhar seus aprendizados sempre que possível: pode ser mencionando casualmente o que você aprendeu durante uma revisão de Pull Request, compartilhando uma mensagem curta no Slack ou escrevendo um post num blog. O que é realmente valioso é que outras pessoas também tenham a chance de aprender com você, promovendo uma cultura de aprendizado contínuo.