Embora eu não possa listar todas as armadilhas, em geral, formular uma pergunta e colocá-la em um problema autônomo geralmente exige tanto trabalho que, no momento em que você a preparou o suficiente, você respondeu sua própria pergunta com mais tempo do que seria necessário.
Eu experimento o mesmo em> 75% das perguntas que eu postar.
No entanto, esse não é um argumento para não se incomodar em fazê-lo. Esta é efetivamente a depuração de pato de borracha. Você está encontrando respostas para as perguntas que acha podem surgir em resposta à sua pergunta; o que significa que você está pensando sobre o problema do ponto de vista de diferentes pessoas; o que significa que você está pensando no problema de todas as direções possíveis; qual é a melhor maneira de encontrar a falha.
Na melhor das hipóteses, você provou conclusivamente que claramente não consegue pensar na resposta aqui. No "pior", você acaba respondendo sua própria pergunta. Cuidado com as citações, porque isso não é ruim. Talvez tenha sido um pouco ineficiente, mas resolver o problema lentamente é melhor do que decidir rapidamente não resolver o problema . Você será mais rápido em resolver o problema eventualmente.
Caso em questão:
Quando eu era um desenvolvedor iniciante, lidei com a página de erros do ASP.Net várias vezes. Eu precisava procurar no Google a mensagem para descobrir o que havia de errado. pode demorar várias horas até que eu tenha a solução certa. Basicamente, cometi todos os erros do livro e, posteriormente, tive que lidar com as consequências de ter que depurar os problemas.
Agora, quando um erro aparece, eu já conheço os "suspeitos do costume" do que pode estar causando o problema. Minha lista mental de "suspeitos do costume" é efetivamente baseada nos problemas com os quais tive mais problemas durante minha carreira. Sem primeiro ter feito o trabalho de pernas ineficiente em termos de horas no Google, eu nunca teria feito essa lista mental . Mas agora que tenho essa lista mental, sou consideravelmente mais rápido na solução de problemas.
Além disso, embora eu não consiga entender, a capacidade de resposta da conversa gratuita não pode ser comparada a qualquer forma de discussão textual da Internet em que eu possa pensar.
Eu discordo um pouco aqui. Você está certo que a comunicação na Internet é menos responsiva, mas você (na minha opinião) está errado que isso faz mal a você.
Como desenvolvedor solitário, você dependerá da depuração de patos de borracha. O ingrediente chave para fazer o RDD funcionar é que você antecipa perguntas que o pato de borracha possa ter para você. Você obviamente não pode confiar no que o pato de borracha realmente diz.
Ao lidar com sistemas de mensagens lentos (postando no StackOverflow ou se comunicando escrevendo cartas), você é inerentemente incentivado a garantir que esteja certo da primeira vez. Porque precisar corrigir um erro será um processo lento e árduo.
Por comparação, considere que sistemas de mensagens rápidas (conversação, mensagens instantâneas), você pode corrigir imediatamente algo. A capacidade de corrigir rapidamente algo torna as pessoas menos incentivadas a garantir que ele esteja correto.
Quatro casos em questão:
- Quando estou fazendo minha própria análise pessoal / lista de tarefas como desenvolvedor, ainda uso caneta e papel. Percebi que falo sobre suposições e falsidades ao digitar minhas anotações, porque minha mente pensa que "posso consertar isso mais tarde". No entanto, ter que corrigir algo que você escreveu no papel é irritante, você precisa riscar as coisas e escrever nas entrelinhas, e o documento fica muito pior quando há rabiscos. Escrever em papel me faz checar os fatos antes de me comprometer a escrevê-lo. Isso pega muitos mal-entendidos cedo, antes mesmo de escrever um código que produzisse bugs.
- Minha avó era secretária (era da máquina de escrever). Fazer um erro de digitação em um documento formal significava ter que digitar a página inteira novamente. Minha tia é secretária (idade do processador de texto). Ela pode confiar em um verificador ortográfico automático, e os erros podem ser corrigidos facilmente e com o mínimo de esforço. Sem surpresa, minha avó comete menos erros de digitação e ortografia em comparação com minha tia.
- Os videogames costumavam ser impressos em cartuchos. Corrigir um bug após o lançamento era quase impossível. Você precisaria reimprimir todos os cartuchos, distribuí-los a todos os fornecedores e torcer para que os fornecedores entrassem em contato com os clientes que já compraram o jogo. Custaria toneladas de dinheiro (o dobro do custo de produção física) e ainda não alcançaria alguns clientes. Agora, na era das correções na Internet, os desenvolvedores de jogos mostraram ser consideravelmente menos investidos em testar seus jogos para evitar erros de lançamento, porque é muito mais fácil simplesmente corrigir uma correção diretamente para cada cliente. O impacto de cometer um erro é minimizado a um ponto em que é melhor corrigir alguns problemas após o fato, em comparação com a necessidade de testar todos os possíveis erros que podem ocorrer.
- Eu morava em um apartamento do terceiro andar, sem elevador, e precisava estacionar uma ou duas ruas do meu prédio. Eu quase nunca esqueci de tirar algo do meu carro. Agora, moro em uma casa com meu carro ao meu lado na garagem. Eu esqueço de tirar coisas do meu carro o tempo todo .
A idéia subjacente aqui é que um sistema de intercâmbio difícil incentiva as pessoas a fazer trocas corretas e verificadas . A severidade da punição (= processo de correção difícil) ensina você a não cometer erros.
Além disso, ocultar detalhes para fazer uma pergunta bem definida elimina a possibilidade de alguém detectar problemas nos quais você não tinha pensado.
Ao criar um MCVE , você não deve apenas criá-lo e publicá-lo na pergunta. Você deve primeiro fazer isso por conta própria , para poder isolar o problema. E então, quando você acha que o problema não pode mais ser reduzido e ainda não vê a causa; então você tem uma pergunta válida para o StackOverflow.
Caso em questão:
Eu sempre tenho um segundo Visual Studio em execução com um aplicativo de console simples chamado Sandbox. Sempre que encontro um problema técnico, copio o código incorreto na sandbox e começo a brincar com ele.
- O que acontece quando eu mudo essa configuração?
- Posso reproduzir o problema se diminuir o código?
- Quais configurações tornam possível / impossível reproduzir o problema?
Em 90% dos casos, encontro a causa do problema porque o sandbox me ajudou a analisar o código incorreto sem ser distraído pelo contexto circundante (ou, por exemplo, por qualquer incerteza sobre valores que ocorrem em diferentes partes do código.
Nos outros 10% dos casos, fiquei com o código mínimo para reproduzir o problema, que serve como um exemplo de snippet perfeito para postar no StackOverflow.
Por último, mas não menos importante, não quero postar todo o meu projeto para o mundo ver pelo resto da eternidade, por razões óbvias.
Quando você já possui seu MCVE, não deve ter muita informação pessoal (ou da empresa). Se o fizer, como o código é mínimo, é fácil renomear as coisas para um exemplo mais básico de foo / bar / baz.