O que fazer antes de postar uma pergunta online?

E aí pessoal! No post de hoje, o Data Bootcamp me chamou para falar um pouco sobre como fazer perguntas online. Muitos dos alunos do curso são iniciantes no mundo de ciência de dados e, normalmente, de programação. Nessa fase é normal ter dúvidas sobre o tema e, muitas vezes, ter dúvidas sobre como e onde tirar suas dúvidas.

É comum quando estamos começando a aprender a programar que tenhamos um montante consideravelmente grande de dúvidas. N-o-r-m-a-l. Muitas vezes, no desespero, nossa primeira reação é jogar uma pergunta mal preparada no primeiro canal de comunicação que vemos. Isso pode parecer excelente, mas dificulta muito a vida de quem vai te ajudar.

Vejo muitos iniciantes colocando perguntas que não fazem o menor sentido, mesmo para a alma mais paciente em tentar entender. Então, decidi fazer esse guia como uma forma de passo a passo do que fazer quando se esbarra em um problema, até o momento de decidir colocar a pergunta (e como colocar a pergunta) nos canais certos.

Um bom problema, claro e bem descrito, é algo extremamente útil, especialmente quando é colocado em um local em que outras pessoas podem encontrá-lo. Uma boa comunicação nessa hora também tende a te garantir respostas melhores e mais pacientes.

Então, vem comigo resolver um problema!

TLDR

1) Tente entender as mensagens de erro das ferramentas, esse esforço se pagará com o tempo;
2) Tente isolar o problema;
3) Ao pedir ajuda na internet, evite grupos e Facebook, tente buscar em espaços dedicados como Stack Overflow;
4) Em espaços de conversa evite perguntar: "posso fazer uma pergunta?". O espaço é pra isso mesmo. Só pergunte! :)

O problema

Vou criar um problema fictício para nos ajudar a vislumbrar como podemos agir perante ele. O problema vai ser simples, mas serve pra ilustrar um problema mais complexo, ok?

Neste caso, estamos criando uma função para achar o percentual de alunos com notas acima de uma média escolar:

O problema vem quando passamos uma lista de notas vazia, ou seja, tentamos fazer uma divisão por zero.

percentual_acima_da_media(np.array([]))

Temos nosso problema. Agora, vamos buscar a solução:

1. Você já tentou “ler” o que o interpretador está tentando te dizer?

Sim. Primeira coisa: tenha calma! Apesar de ter uma tela de erro enorme e cheia de coisas que parecem incompreensíveis, aquilo tudo está ali para te ajudar.

No nosso caso o erro vai aparecer como algo assim:

É possível ver que o interpretador mostrou o erro: ZeroDivisionError: division by zero. Legal, mas vamos supor que esta conta está no meio de um script enorme, cheio de contas e códigos. Onde está escondido o erro?

Em Python, o traceback vai tentar te indicar o caminho que o interpretador percorreu. No caso, primeiro ele indica que tentou chamar a função percentual_acima_da_media com uma array vazia na linha 10 do meu script.

Depois, ele entrou dentro da função e o erro estourou quando ele tentou passar pela linha 7. Exatamente no momento em que ele tenta fazer a divisão:

Percorrendo assim cada passo do interpretador, temos uma ideia exata de por onde ele passou e o momento exato onde o erro aconteceu.

2. Já tentou ver o que as variáveis te dizem?

Nosso caso é bem simples, mas vamos supor por um momento agora que você leu o que o interpretador disse; viu o erro, mas mesmo assim não entendeu o que está acontecendo? Coloque linhas que mostrem (“printam”) na tela cada uma das variáveis que você suspeita que podem estar gerando erros. Tente ver o valor das variáveis e qual é o estado atual que elas se encontram quando 
você percebeu o problema.

Se você trabalha com Python e tem que debugar muitas coisas, recomendo fortemente que você procure sobre ipdb. Vamos dizer que ele funciona como uma versão “avançada” de prints e é particularmente útil em sistemas complexos. Vai por mim, você não vai querer viver sem ele depois. Tem um tutorial do Henrique Bastos sobre o assunto pra quem já quer um material maneiro e em português :)

3. Não tem jeito, precisamos ir online

Você tentou encontrar a fonte dos problemas de todos os jeitos. Debugou, olhou o valor das variáveis, verificou tudo o que fez, não encontrou nenhuma coisa estranha e tudo parece perdido, certo? Ok! Sem problemas. Vamos tentar encontrar uma solução online. As chances de alguém já ter feito essa mesma pergunta online são grandes.

O Stack Overflow é um lugar sagrado. Procure seu erro lá. Coloque o retorno do interpretador no Google (no nosso caso, o ZeroDivisionError: division by zero), busque pelo que você deseja fazer. Uma das grandes habilidades necessárias para se programar é aprender a perguntar a coisa certa ao Google e, adivinha? Se aprende perguntando :)

Caso você não fale inglês, não se preocupe! A plataforma criou uma sessão inteira destinada a perguntas em português.

4. Socorro, não encontrei nada!

Maravilha! Agora sim você está perdido de vez. Se seguiu todos os passos, tentou encontrar o erro, buscou ajuda online e nada: não existe o que você procura. Hora de pedir ajuda aos oráculos da internet: temos que postar nossa pergunta online. Vamos ao que precisamos para fazer uma boa pergunta online.

Porque compartilhar a pergunta online? Lembre-se que ao mesmo tempo que você pede ajuda, você está contribuindo para sanar a mesma dúvida de outra pessoa. Então compartilhar a dúvida ajuda a todos.

Agora preste bastante atenção: não adianta nada jogar uma pergunta vaga e sem contexto. Você está profundamente inserido no contexto e tudo pode parecer simples, mas acredite que, maioria das vezes as pessoas não terão a MENOR ideia do que você está falando. Vai por mim! Lembre-se que uma pergunta vaga, gera respostas vagas.

Então a primeira coisa é: descreva seu problema com calma. O que você busca? O que você está tentando fazer? Quais ferramentas 
usa? Qual a versão da linguagem/framework/qualquer coisa você está usando?

Uma boa sugestão para deixar o código de forma clara para quem escreve é colocar o pedaço crítico dele no Gist do Github. Coloque o código ali e salve com a extensão da linguagem que você está usando. Na parte superior colocamos uma descrição breve do que o código faz, na caixa imediatamente abaixo temos o nome e o formato do arquivo, e o código vai na caixa maior. Em seguida, é só salvar e o seu código vai estar público para ser compartilhado.

Se não gosta do Gist, o Pastebin é uma ótima alternativa também. Até mais simples, pra ser sincera.

Uma vez descrito o problema e apresentado o código, mostre o erro encontrado. Qual foi o output do seu código? Que erro ele retornou?

Exemplo de pergunta ruim:

Meu código está retornando erro e não consigo descobrir o que é. Alguém sabe Python?

Exemplo de uma boa pergunta:

Estou tentando fazer um cálculo para encontrar o percentual de alunos que estão acima da média da sala, mas o interpretador me retorna "ZeroDivisionError". Estou usando Python 3.6.1, numpy 1.14.3. Já vi que a variável de 
denominador aparece como 0. O meu código está disponível aqui.

Última coisa: quando em canais de comunicação rápida, evite perguntar se você pode perguntar ou se alguém pode te ajudar. Por exemplo, evite: "posso fazer uma pergunta?" ou "alguém entende dessa biblioteca?". Normalmente, o espaço é pra isso mesmo! As pessoas esperam e incentivam perguntas!
Apenas pergunte :)

5. Onde colocar seu pedido de ajuda?

Apesar de grupos de WhatsApp/Telegram/Facebook serem muito bons e rápidos na obtenção de respostas, eles são lugares em que as respostas facilmente são perdidas. Essas plataformas não foram feitas para que se possa fazer buscas de forma fácil e, muitas vezes, os resultados postados nesses grupos não aparecem em sites de busca.

Dessa forma, quando você faz uma pergunta e obtém uma resposta ela acaba se perdendo nas redes e na próxima vez que a dúvida surgir, é praticamente impossível encontrar a resposta dada na última vez e a pergunta tem que ser respondida novamente. Ou seja, é um ciclo vicioso: você pergunta no Facebook porque não encontrou ajuda porque outras pessoas perguntaram no Facebook.

Minha sugestão é fazer a pergunta nos chats para obter respostas rápidas, mas depois escrever a dúvida em um fórum (como Stack Overflow em português), ou escrever um blog post com a resposta. Dessa forma, se consegue a ajuda que quer de forma rápida, e ainda temos meios de procurar respostas para as nossas dúvidas. Além de facilitar o caminho das próximas pessoas.

Dicas

Uma dica legal é ler esse artigo do Stack Overflow sobre como criar um 
exemplo mínimo, completo e verificável. E esse artigo sobre como pedir ajuda!
Ambos dicas do Elias Dorneles ❤

Finalmente

Não deixe de ouvir o Pizza de Dados para saber mais sobre novas tendências da área de ciência de dados, veja várias dicas sobre essa área no Guia do Cientista de Dados da Galáxia e fique ligado(a) também no meu site, que contém vários posts como esse :)

E o Data Bootcamp?
Nós do Data Bootcamp acreditamos que com conhecimento prático sobre Python e estatística, junto com o seu conhecimento sobre o negócio, é possível mudar a forma como você olha, analisa e prediz sobre os dados que passam todo dia por você.

Saiba tudo sobre o nosso calendário de turmas visite o nosso site, estamos com turmas abertas para várias cidades.

Em breve teremos mais posts em parceria com o Pizza de Dados aqui no Medium, com temas muito interessantes e super esclarecedores da área de Ciência de Dados e Aprendizado de Máquina (Machine Learning). Fique ligado!