Yes, we’ve all heard it: “No such thing as a stupid question.” I always feel tempted to ask something ridiculous whenever someone says that, just to see their reaction. I understand the spirit: be nice to people who are trying to learn and help them understand new concepts. Yet there is a definitive line between a useless query that helps neither the questioner nor the person responding, and an informed, thoughtful question. Often, an ignorant person will use a lazy, some may say “stupid” question to get the answers out of the expert, learning nothing in the process. This is counterproductive to both parties since it is a waste of the teacher’s time and a lost opportunity for the student. On the other hand, someone who thoroughly tries to understand, debug, and verbalize their problem before coming to another person for help will ask vastly better questions.
Everyone always looks for the easy way out of things. As a programmer, I will admit it is very tempting to jump straight to asking for help the minute I run into a problem. It is so much faster to copy and paste your code into a site such as StackOverflow, rather than taking the time to sit down, carefully examine your program, and try to isolate the issue. But the long way is usually better, at least in the end. When you ask someone to figure out your problem for you, there is minimal, if any, learning involved. How are you supposed to understand why something did what it did if someone replies: “Put this here and it will work”? Yes, you got your solution but did you understand how it works? I believe one of the best ways that I learn how to code is when I run into a problem, then l figure out what is causing it and correct it. It is a much greater learning moment when you find a missing semi-colon and say “there it is! I’ll never do that again”, then when someone just fixes the error for you.
Okay, there will eventually come that time when you have pulled nearly every bit of hair out of your head and still cannot sort out the issue. Then, go for help. Your hours of toil were not wasted; you are essentially an expert on the problem, and just need someone who is an expert on the solution. Be professional, respectful, and concise. Don’t waste the other person’s time with too much (or too little) information. Provide all the helpful data that you can, and be ready and willing to work with the person you’re asking in order to find and understand a solution. Make sure that you clearly state the goal that you are trying to achieve, and carefully explain the symptoms of the problem that you are facing. Ultimately, if you want to ask smart questions, do your research and come prepared.
Read more tips in Eric Raymond’s essay, “How To Ask Questions The Smart Way”
Always do your best to ask the smartest question(s). As an example, this is a question posted on StackOverflow that demonstrates some elements of smart questioning:
This poster began his question with a clear but concise summary. He provided his code, the data he had collected, and some information on additional testing that he had performed in a different coding language prior to posting the question. He discussed some of the things that he had been considering and demonstrated that he had put some thought into the problem before asking his question. As a result, his question received a lot of attention and sparked a plentiful discussion to find an answer.
Contrast that with this question, which was also posted to StackOverflow, and is an example of a stupid question:
The person who asked this question followed essentially none of the tips for asking smart questions. Their title is very vague and just requests “help”. They post a small bit of code with little context and simply ask the other members to “please debug”. It would appear to be a blatant case of asking others to do their work for them. They do not demonstrate that they have done anything towards solving the problem, and they provide no additional information to help facilitate an answer. Quite clearly, they have no intention of learning from their question.
The easy way out is always there. Even if you ask a stupid question, you will likely still get an answer. But that is about it. You will not learn anything, develop any skills, or appear credible to your colleagues. The programming community bonds over a shared love of code, but has minimal tolerance for anyone who is not going to contribute to the process. Personally, I think that if you ask a question and get an answer, you should be able to go immediately to someone else with the same problem and teach them the solution. It’s about paying it forward and helping people gain more knowledge, so please make an effort to ask the best questions, and don’t be “that guy”. As programmers, we will all run into roadblocks as we work, but the only way to effectively conquer them is to ask the smart questions.