Debugando como um profissional
Tags: tip, debug
Published: 2020-01-21 14:35:53

# O que é "debugar"?

Debugar é a arte de achar a causa de um bug. Nem sempre debugar é algo trivial e pode tomar horas, dias ou até semanas para que você consiga resolver o bug.

# O mindset correto

Debugar é uma atividade que requer que o programador pense de uma forma clara e não enviezada sobre um problema. É muito fácil culpar o outro quando um bug surge, e saber que independente de quem for a culpa a responsabilidade de corrigir este bug é da equipe requer tempo e, claro, o *mindset* correto.

### Nada é impossível

É comum querermos pensar *"mas isto é impossível!"* ou *"no meu código não acontece esse tipo de coisa."* quando um bug ou um erro surge. Sinto lhe informar mas isto é tão possível que já aconteceu! Então ao invés de lamentar ou discordar que este bug acabou de acontecer, use o seu tempo para corrigi-lo! *Fix the problem, not the blame*.

### Não entre em pânico

Somos pagos para resolver problemas. A partir do momento que somos contratados por alguém ou por alguma empresa, nossa função é resolver os problemas dessa pessoa, agregando valor para a sua marca ou produto. Não entrar em pânico é _imprescindível_, e ao debugar um código não será diferente. Dê um passo para trás e veja o contexto como um todo. Por que isso aconteceu? Dada as circunstâncias, isto acontecerá novamente? Lembre-se, computadores fazem o que o instruímos a fazer, e não o que queremos que ele faça.

### Corrija o bug, e não os seus sintomas

Sintomas são comportamentos que existem por conta de um determinado bug, e é fácil pensarmos que estes sintomas *são* o bug. Corrigir sintomas significam que o bug ainda está lá, e sinto lhe informar, mas ele vai voltar! Busque a raiz do problema e não os sintomas que o cercam.

# Técnicas para debugar como um profissional

### Reproduza o bug

Reproduzir um bug é uma frase conhecida no nosso meio, ela significa que você foi capaz de alcançar o mesmo comportamento reportado pelo seu usuário ou QA (controle de qualidade). Esta etapa é super importante, pois se você não consegue reproduzir um bug, como saberá que o mesmo foi corrigido? Se possível, isole este comportamento por meio de testes unitários/integração ou em um ambiente controlado, principalmente em casos onde você precisa passar por vários passos até chegar no bug. Você ganhará tempo e consequentemente resolverá este problema mais rápido.

### Tenha controle dos dados

Como um bom programador JavaScript, uma das técnicas que mais uso para debugar minhas aplicações é por meio do `console.log`. Essa função escreve no console do browser (ou terminal) o que receber como parâmetro. Ou seja, posso escrever um payload de um requisição, o estado de uma variável em determinado bloco ou até um simples *"cheguei aqui!"* para saber se uma função foi chamada, por exemplo. É muito mais fácil descobrir um erro quando você pode visualiza-lo com clareza. Use funções de print ao seu favor!

### Diga em voz alta

O ato de explicar o erro para outra pessoa é esclarecedor. O simples fato de você expressar o que está acontecendo para um colega de equipe muitas vezes é o necessário para que a solução apareça. Comunique-se!

### Refatore seus testes

Sempre que possível cheque a integridade dos seus testes. Testes não podem ser enviezados e devem funcionar com as mais diversas entradas! Refatore quando for conveniente.

### Use um debugger!

Temos várias ferramentas para auxiliar o processo de debugging do seu código. Use-as! IDEs geralmente contam com debuggers, como por exemplo Netbeans, Visual Studio Code e as IDEs da [JetBrains](https://www.jetbrains.com/). Use aquela que você se sentir mais a vontade e que te ajude a resolver os seus problemas. 

Posteriormente pretendo escrever um artigo ensinando a usar o debugger do [VS Code](https://code.visualstudio.com/) para debugar aplicações front-end e Node.js. Fique de olho!

# Conclusão

Estas são dicas valiosas e que uso no meu dia-a-dia. A maioria vieram de notas que fiz enquanto lia o capitulo 3 do livro [O programador pragmático](https://www.amazon.com.br/Pragmatic-Programmer-Journeyman-Master-English-ebook/dp/B003GCTQAE/ref=sr_1_2?adgrpid=78035804821&gclid=EAIaIQobChMItvPf9dWF5wIVhgmRCh1OsAUuEAAYASAAEgLsTfD_BwE&hvadid=392902864299&hvdev=c&hvlocphy=1001536&hvnetw=g&hvpos=1t1&hvqmt=e&hvrand=5262209604856440125&hvtargid=kwd-298735734907&hydadcr=5651_10696943&keywords=pragmatic+programmer&qid=1579093562&sr=8-2) e ver que eu estava no caminho certo foi uma sensação muito boa 😆. Recomendo a leitura do livro, lá ele aborda vários outros tópicos além de *debugging*.

Dúvidas ou sugestões estou sempre a disposição!