13 pontos por kciter1 2024-07-29 | 7 comentários | Compartilhar no WhatsApp
  • 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

 
cosine20 2024-07-30

O autor considera eficiente ter princípios e ir afunilando uma hipótese de cada vez

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.

 
kciter1 2024-07-30

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.

 
halfenif 2024-07-30

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 ....

 
savvykang 2024-07-29

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.

 
savvykang 2024-07-30

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?

 
kciter1 2024-07-30

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. :)

 
savvykang 2024-07-31

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

  1. Depuração é o processo de encontrar a causa de um problema com base na situação e nos dados fornecidos
  2. A resolução de problemas por meio da depuração normalmente vem da intuição do desenvolvedor
  3. Existem quatro etapas para encontrar o problema

Depois da mudança

Introdução

  1. Depuração é o processo de encontrar a causa de um problema com base na situação e nos dados fornecidos
  2. Na depuração, são necessárias em sequência duas tarefas detalhadas: reconhecimento do problema e resolução do problema
  3. No reconhecimento do problema atua a intuição, e na resolução do problema atua o raciocínio. Uma teoria que sustenta isso é a teoria do processo duplo (dual process theory)
  4. Se no processo de reconhecimento do problema for usado apenas o raciocínio, é preciso verificar e validar um a um detalhes técnicos como a configuração do sistema, o que limita o aumento de produtividade. Em vez disso, usar a intuição de forma auxiliar no processo de reconhecimento do problema é vantajoso para a estratégia de depuração
  5. Para aumentar a efetividade da intuição, é importante acumular no dia a dia experiência e insights, ou seja, heurísticas.
  6. Sempre existe a possibilidade de a intuição estar errada ou não se adequar à situação, e também é importante treinar para escapar dos vieses cognitivos

Desenvolvimento (procedimento de depuração)

  1. Coleta de informações
  2. Classificação - a intuição e as heurísticas atuam aqui
  3. Aprendizado
  4. Formulação e verificação de hipóteses - o raciocínio atua aqui