A few months ago, I blogged about problems in the hacker world. One of the biggest issues that people ended up mentioning in comments and other discussion with me is that it is important for less-experienced people to ask intelligent questions of the more-experienced people. If they are able to do that, then the more-experienced hackers will be able to help faster and more easily, and will be more likely to put the effort into providing a helpful response. So… how do you ask good questions?
The classic guide is How To Ask Questions The Smart Way, which I was pointed at as recently as a year ago to improve my question-asking skills (and, coincidentally, I’ve become much more technically competent in the past year). Since reading that article, I’ve think that I’ve significantly improved my ability to do research beforehand, and to formulate well thought-out questions before asking them. The article is quite long, so I’ll summarize a few of the more relevant points here (but I highly encourage you to go read the whole thing yourself). I’m focusing more here on people who are beginning hackers, as opposed to users with questions.
Do research beforehand. If you have a question to ask, you should try to find the answer yourself before you go ask somebody else. One of the things that’s most valued in the hacker community is the ability to find things out yourself. Most of the people that you view as extremely competent and awesome and smart got that way because they went to all the effort to find things out for themselves. If you never do the work yourself, then you won’t learn the answers as well. Furthermore, having the ability to find answers itself is very useful – what happens when you become an expert in your field, and there is nobody else to ask questions of? If you don’t have the ability to find the answers for yourself, then you will have hit a dead end.
Include as much information as possible. Don’t just say that your computer or some program is broken and it needs to be fixed, say how it’s broken. For example, if Firefox keeps freezing when you start it up, say so! Don’t just say “Firefox doesn’t work any more”; people aren’t mind readers, and we won’t be able to help you if you don’t give us specific information on the problem. Furthermore, if you’ve tried to fix it yourself (see #1), say what research you’ve done (e.g. what you’ve Googled for) and what you might have done to try to fix the problem. Don’t say what you think might be wrong unless you have evidence to back it up; otherwise, it’s just irrelevant and unhelpful.
Ask about methods or pointers rather than concrete solutions. Occasionally, you just need a factual answer to a question, but more often than not, it’s more useful to ask for pointers or methods of solving the problem. If you’re asking about some large aspect of a program or project, then it is probably better to ask for documentation that you can read. First of all, the person you’re asking probably doesn’t have time to tell you about all of it; second, you’ll now have a resource you can refer to again and again when you forget details. For example, if I wanted to learn about AFS, I might ask a hacker friend to point me at a document giving a good overview of AFS (and they might point me at AFS and You, though I should have been able to find that by Googling “afs mit”). In other cases, if you do not know the solution to a problem, you might want to ask what sort of method or tool you can use to solve your problem, and where a good overview of using that tool would be. In another example, if I wanted to know how to add user-defined variables into my Debian package, I would ask how that is done. My friend might tell me about Debconf, and point me to a tutorial on using it. In both of these examples, the questioner gains a new tool or resource. If the person they were asking had just fixed their problem for them, then they wouldn’t have learned anything new, and would know just as little as they did before.
Be polite. Don’t expect people to give you their time freely at your beck and call. If they are going to help you, they’re doing it because they’re volunteering their time (and most likely, they are usually busy with a lot of other projects). If you’re going to ask them a question, then at least be respectful of the fact that they’re helping you out of the goodness of their hearts, and that they don’t have endless time or patience. In addition, if you are polite, then they’ll be more likely to be polite as well.
Don’t grovel. Just because you’re new and ignorant of a lot of the tools and methods that experienced hackers use doesn’t mean that you are incompetent or incapable of learning them. Don’t act like you are! Just state your question clearly and with confidence. Apologizing for not knowing anything or being new or whatever isn’t going to help your case; if anything, it will hurt your chances of getting help, because claiming that you’re incompetent implies that you can’t or are unwilling to learn anything new. Giving that impression is perhaps the worst possible thing you can do: we want to help people who are eager to learn, but are instantly turned off by people just seeking someone to do the work for them.
Do you have other points that you find important when asking (or answering) questions? If there was one thing you would encourage people to do when asking questions, what would it be? On the flip side, how can more experienced people answer questions better? What problems do you run into on that end?