- Debugging é, na prática, uma competência essencial para desenvolvedores
- No debugging, é importante ter a mentalidade de como abordar o problema
- Debugging é o processo de encontrar a causa de um problema com base na situação e nos dados disponíveis
- O autor chama isso de intuição
- Intuição é conectar o conhecimento que tenho ao problema
- A experiência funciona como um atalho que liga conhecimento à intuição
- Ao fazer debugging para encontrar a causa de um comportamento inesperado, o desenvolvedor acaba naturalmente reduzindo as possibilidades
- O autor considera mais eficiente reduzir as possibilidades uma a uma com base em princípios
- Apresenta quatro etapas para encontrar o problema
- Primeiro, desconfiar
- Código, logs, mensagens de erro, dados de monitoramento, requisitos, hardware etc. servem para coletar informações para resolver o problema
- É bom montar uma checklist
- Segundo, classificar
- Entre as informações coletadas, separar o que você conhece do que não conhece bem
- As informações que já são filtradas na etapa de coleta decorrem de uma pequena intuição
- O autor classifica em quatro tipos: falhas lógicas, falhas em tecnologias dependentes, falhas em tecnologias de base e falhas físicas
- Terceiro, aprender
- Com base nas informações coletadas, identificar as lacunas de conhecimento e estudar
- Quarto, conectar
- Com base nas informações, formular hipóteses sobre o problema e testá-las
- Se surgirem novos insights nesse processo, usar um loop de feedback e voltar a percorrer as quatro etapas
- O conteúdo apresentado acima é uma forma útil de praticar a intuição mencionada anteriormente
- Se você ainda não tem seus próprios princípios de debugging, pode criá-los com base neste texto ou inventar novos. Melhor ainda se compartilhar boas dicas
7 comentários
Concordo muito. E acho que ele organizou bem e propôs uma abordagem mais geral para depuração.
Na prática, no processo de depuração, há muitos fatores e conhecimentos prévios diferentes se entrelaçando de forma complexa, então considero realmente importante ir estreitando o foco para encontrar as pistas necessárias nesse contexto.
No texto, foi dito que, nesse processo, é preciso lapidar a intuição e a capacidade de insight; parece que, para identificar intuitivamente onde está a causa e por onde começar a investigar, a intuição construída com experiência e feeling tem um peso enorme aqui.
Concordo. Eu queria expressar bem a intuição que você mencionou, mas pensando no texto como um todo, acho que seria melhor padronizar tudo como insight em vez de intuição.
A ideia de que algumas pessoas conseguem raciocinar e outras não.
Acho que foi há uns 30 anos.
Os veteranos costumavam dizer que, depois de uns 3 anos em TI, a habilidade de todo mundo acabava ficando igual.
Olhando agora, pensando bem ....
Não seria mais natural pensar em conectar informações menos como um campo da intuição e mais como inferência ou prova lógica? Quando se adquire prática repetida com demonstrações, pode ser que as etapas intermediárias sejam omitidas e a resposta surja de imediato, como ao decorar a tabuada, parecendo intuição, mas ainda assim acho correto distinguir as duas coisas.
Quanto ao restante — suspeita, classificação e aprendizado — concordo, porque vivi na prática que isso melhora à medida que se acumulam experiência e conhecimento prévio.
Vou acrescentar algo depois de reler o texto mais uma vez
Parece que a definição de intuição defendida pelo autor é diferente da definição de intuição socialmente aceita. Eu entendo que a definição comum de intuição é compreender um problema sem um processo de pensamento. Ao ler o texto, em certo momento até fiquei pensando se eu mesmo não tinha entendido errado o significado de intuição, então acabei conferindo de novo. Também acho que isso não deixa de contradizer a tese geral de que a depuração exige um procedimento de raciocínio. Se depuração realmente fosse um trabalho que pudesse ser realizado inteiramente por intuição, então não deveria ser verdade também a afirmação de que, ao depurar, não seria necessário verificar logs ou dados, nem fazer controle de versão?
Olá. Obrigado pelo interesse no texto.
Como você disse, em geral, intuição significa compreender algo sem uma atividade de pensamento direta. Ainda assim, não acho que seja possível chegar à resposta certa partindo de um estado de completa ausência de conhecimento.
Primeiro, para explicar o que penso sobre a palavra intuição: quando falamos sobre depuração, é comum ouvir de colegas — ou dizer nós mesmos — coisas como “veio à cabeça de repente” ou “por algum motivo parecia que o problema estava naquela parte”. Eu considerei isso como intuição. Quando, em vez de simplesmente ignorar essa ideia que surgiu de repente, passamos a examiná-la ponto por ponto, acabamos percebendo que havia experiência prévia com aquela parte ou uma boa compreensão do conhecimento relacionado. Por isso usei a palavra intuição e, como isso pode causar mal-entendidos, acrescentei a frase “intuição é conectar o conhecimento que eu tenho ao problema”.
Então, para responder a algumas das dúvidas que você levantou,
quanto à “contradição com a tese geral de que a depuração exige um procedimento de pensamento”, a intuição que descrevi no texto foi retratada como a omissão, sem grande esforço mental, de algo que já foi vivido ou de fatos que já se conhecem. Portanto, não quis dizer que o processo de pensamento não é necessário, mas sim retratá-la como uma ferramenta para pensar mais rápido.
Em seguida, sobre “se depuração pudesse realmente ser feita inteiramente por intuição, então a afirmação de que durante a depuração não haveria nenhuma necessidade de verificar logs, dados ou controle de versão também não deveria ser verdadeira?”, eu não disse que ela pode ser feita inteiramente por intuição. Pelo contrário, acrescentei a frase “depuração é o processo de encontrar a causa do problema com base na situação e nos dados disponíveis”. Ainda assim, acredito que quase não existam desenvolvedores que passem, a cada depuração, pelo processo de inferência em quatro etapas defendido no texto. Se a pessoa tiver certo nível de experiência e conhecimento, às vezes ela pode omitir etapas com base no próprio julgamento. Penso que elementos como logs e dados, que você mencionou, têm dois papéis: se houver experiência ou conhecimento, ajudam a evocá-los; se não houver, ajudam no processo de inferência. Portanto, mesmo para a intuição mencionada no texto, são informações importantes e indispensáveis.
Acho que a própria palavra intuição, como usada neste texto, pode ser ambígua. Talvez a estrutura ou a construção do texto não tenham sido boas o bastante para expressar o que eu queria dizer. Por enquanto, pretendo revisar as partes que não estavam concretas o suficiente. No entanto, ainda não consigo decidir bem se seria melhor substituir a palavra intuição. Desde o momento em que comecei a escrever, escolhi a palavra intuição como núcleo do texto, então não consigo pensar em outro termo para substituí-la. Se você tiver alguma boa sugestão, ficarei grato se puder me dizer. :)
Acredito que a completude do texto pode ser melhorada se, na introdução, for acrescentada uma explicação de fundo sobre a necessidade de tanto intuição quanto raciocínio na depuração, e, no desenvolvimento, forem adicionados o método de encontrar problemas e a relação entre intuição/raciocínio.
Antes da mudança
Depois da mudança
Introdução
Desenvolvimento (procedimento de depuração)