Copyright © 2001 Eric S. Raymond
Revision History | ||
---|---|---|
Revision 2.0 | 4 August 2002 | esr |
First XML version. Suggestions from Evelyn Mitchell's presentation. Also took off from her material to write "How To Give Good Answers". Added "Make it easy to reply". | ||
Revision 1.19 | 20 July 2002 | esr |
Added the Bass-O-Matic question example and more troubleshooting steps. | ||
Revision 1.18 | 11 July 2002 | esr |
Change the subject on request email. | ||
Revision 1.17 | 21 April 2002 | esr |
Still more about choosing an appropriate forum. | ||
Revision 1.16 | 15 March 2002 | esr |
More about choosing an appropriate forum. | ||
Revision 1.15 | 11 March 2002 | esr |
Don't flag your question "Urgent". Don't line-wrap data. | ||
Revision 1.14 | 4 February 2002 | esr |
Added links to related resources. | ||
Revision 1.13 | 1 February 2002 | esr |
Two new translations. Typo fixes. | ||
Revision 1.12 | 1 January 2002 | esr |
Recommend object-deviation format for bug reports. How to verify that your mail format is not bogus. | ||
Revision 1.11 | 17 October 2001 | esr |
More about project mailing lists. | ||
Revision 1.10 | 5 October 2001 | esr |
Using project mailing lists. | ||
Revision 1.9 | 2 October 2001 | esr |
MIME attachments are OK. How to turn off HTML. Homework questions. | ||
Revision 1.8 | 28 September 2001 | esr |
On being specific about your question. | ||
Revision 1.7 | 21 September 2001 | esr |
A few tips on email etiquette. Noted objections to "Thanks in advance." | ||
Revision 1.6 | 14 September 2001 | esr |
More on how to deal with not getting an answer. | ||
Revision 1.5 | 13 September 2001 | esr |
Added "Volume Is Not Precision" and "Dealing with Rudeness". | ||
Revision 1.4 | 11 September 2001 | esr |
Minor editorial changes. | ||
Revision 1.3 | 10 September 2001 | esr |
Added comments on what to do if you don't like the hacker attitude. Added another archetypal stupid question. | ||
Revision 1.2 | 9 September 2001 | esr |
Contributions by Richard Gooch. | ||
Revision 1.1 | 9 September 2001 | esr |
Contributions by William Stearns. | ||
Revision 1.0 | 6 September 2001 | esr |
Initial version. |
Table of Contents
In the world of hackers, the kind of answers you get to your technical questions depends as much on the way you ask the questions as on the difficulty of developing the answer. This guide will teach you how to ask questions in a way that is likely to get you a satisfactory answer.
The first thing to understand is that hackers actually like hard problems and good, thought-provoking questions about them. If we didn't, we wouldn't be here. If you give us an interesting question to chew on we'll be grateful to you; good questions are a stimulus and a gift. Good questions help us develop our understanding, and often reveal problems we might not have noticed or thought about otherwise. Among hackers, "Good question!" is a strong and sincere compliment.
Despite this, hackers have a reputation for meeting simple questions with what looks like hostility or arrogance. It sometimes looks like we're reflexively rude to newbies and the ignorant. But this isn't really true.
What we are, unapologetically, is hostile to people who seem to be unwilling to think or to do their own homework before asking questions. People like that are time sinks — they take without giving back, they waste time we could have spent on another question more interesting and another person more worthy of an answer. We call people like this "losers" (and for historical reasons we sometimes spell it "lusers").
We realize that there are many people who just want to use the software we write, and have no interest in learning technical details. For most people, a computer is merely a tool, a means to an end; they have more important things to do and lives to live. We acknowledge that, and don't expect everyone to take an interest in the technical matters that fascinate us. Nevertheless, our style of answering questions is tuned for people who do take such an interest and are willing to be active participants in problem-solving. That's not going to change. Nor should it; if it did, we would become less effective at the things we do best.
We're (largely) volunteers. We take time out of busy lives to answer questions, and at times we're overwhelmed with them. So we filter ruthlessly. In particular, we throw away questions from people who appear to be losers in order to spend our question-answering time more efficiently, on winners.
If you find this attitude obnoxious, condescending, or arrogant, check your assumptions. We're not asking you to genuflect to us — in fact, most of us would love nothing more than to deal with you as an equal and welcome you into our culture, if you put in the effort required to make that possible. But it's simply not efficient for us to try to help people who are not willing to help themselves. If you can't live with this sort of discrimination, we suggest you pay somebody for a commercial support contract instead of asking hackers to personally donate help to you.
If you decide to come to us for help, you don't want to be one of the losers. You don't want to seem like one, either. The best way to get a rapid and responsive answer is to ask it like a winner — to ask it like a person with smarts, confidence, and clues who just happens to need help on one particular problem.
(Improvements to this guide are welcome. You can mail suggestions to esr@thyrsus.com. Note however that this document is not intended to be a general guide to netiquette, and I will generally reject suggestions that are not specifically related to eliciting useful answers in a technical forum.)
Send plain text mail, not HTML. (It's not hard to turn off HTML.)
MIME attachments are usually OK, but only if they are real content (such as an attached source file or patch), and not merely boilerplate generated by your mail client (such as another copy of your message).
Don't send mail in which entire paragraphs are single multiply-wrapped lines. (This makes it too difficult to reply to just part of the message.) Assume that your respondents will be reading mail on 80-character-wide text displays and set your line wrap accordingly, to something less than 80.
However, do not wrap data (such as log file dumps or session transcripts) at any fixed column width. Data should be included as-is, so respondents can have confidence that they are seeing what you saw.
Don't send MIME Quoted-Printable encoding to an English-language forum. This encoding can be necessary when you're posting in a language ASCII doesn't cover, but a lot of mail agents don't support it. When they break, all those =20 glyphs scattered through the text are ugly and distracting.
Never, ever expect hackers to be able to read closed proprietary document formats like Microsoft Word. Most hackers react to these about as well as you would to having a pile of steaming pig manure dumped on your doorstep.
If you're sending mail from a Windows machine, turn off Microsoft's stupid "Smart Quotes" feature. This is so you avoid sprinkling garbage characters through your mail.
If you're using a graphical-user-interface mail client, (such as Netscape Messenger, MS Outlook, or their ilk) beware that it may violate these rules when used with its default settings. Most such clients have a menu-based "View Source" command. Use this on something in your sent-mail folder to check that you are sending plain text without unnecessary attached crud.
Describe the symptoms of your problem or bug carefully and clearly.
Describe the environment in which it occurs (machine, OS, application, whatever).
Describe the research you did to try and understand the problem before you asked the question.
Describe any recent changes in your computer or software configuration that might be relevant.
Simon Tatham has written an excellent essay entitled How to Report Bugs Effectively. I strongly recommend that you read it.
Get over it. It's normal. In fact, it's healthy and appropriate.
Exaggeratedly "friendly" (in that fashion) or useful: Pick one.
Here are some classic stupid questions, and what hackers are thinking when they don't answer them.
Q: | Where can I find program or resource X? |
A: | The same place I'd find it, fool — at the other end of a web search. Ghod, doesn't everybody know how to use Google yet? |
Q: | How can I use X to do Y? |
A: | If what you want is to do Y, you should ask that question without pre-supposing the use of a method that may not be appropriate. Questions of this form often indicate a person who is not merely ignorant about X, but confused about what problem Y they are solving and too fixated on the details of their particular situation. It is generally best to ignore such people until they define their problem better. |
Q: | How can I configure my shell prompt? |
A: | If you're smart enough to ask this question, you're smart enough to RTFM and find out yourself. |
Q: | Can I convert an AcmeCorp document into a TeX file using the Bass-o-matic file converter? |
A: | Try it and see. If you did that, you'd (a) learn the answer, and (b) stop wasting my time. |
Q: | My {program, configuration, SQL statement} doesn't work |
A: | This is not a question, and I'm not interested in playing Twenty Questions to pry your actual question out of you — I have better things to do. On seeing something like this, my reaction is normally of one of the following:
|
Q: | I'm having problems with my Windows machine. Can you help? |
A: | Yes. Throw out that Microsoft trash and install an open-source operating system like Linux or BSD. |
Q: | My program doesn't work. I think system facility X is broken. |
A: | While it is possible that you are the first person to notice an obvious deficiency in system calls and libraries heavily used by hundreds or thousands of people, it is rather more likely that you are utterly clueless. Extraordinary claims require extraordinary evidence; when you make a claim like this one, you must back it up with clear and exhaustive documentation of the failure case. |
Q: | I'm having problems installing Linux or X. Can you help? |
A: | No. I'd need hands-on access to your machine to troubleshoot this. Go ask your local Linux user group for hands-on help. (You can find a list of user groups here.) |
Q: | How can I crack root/steal channel-ops privileges/read someone's email? |
A: | You're a lowlife for wanting to do such things and a moron for asking a hacker to help you. |
This question just begs for "STFW" as a reply.
This one has already STFWed, and sounds like he might have a real problem.
He assumes that somebody else screwed up. Arrogant of him.
He's specified the environment, he's read the FAQ, he's showing the error, and and he's not assuming his problems are someone else's fault. This guy might be worth some attention.
J. Random Hacker's response to this is likely to be "Right. Do you need burping and diapering, too?" followed by a punch of the delete key.
This person, on the other hand, seems worthy of an answer. He has exhibited problem-solving intelligence rather than passively waiting for an answer to drop from on high.
In the last question, notice the subtle but important difference between demanding "Give me an answer" and "Please help me figure out what additional diagnostics I can run to achieve enlightenment."
In fact, the form of that last question is closely based on a real incident that happened in August 2001 on the linux-kernel mailing list. I (Eric) was the one asking the question that time. I was seeing mysterious lockups on a Tyan S2462 motherboard. The listmembers supplied the critical information I needed to solve them.
By asking the question in the way I did, I gave people something to chew on; I made it easy and attractive for them to get involved. I demonstrated respect for my peers' ability and invited them to consult with me as a peer. I also demonstrated respect for the value of their time by telling them the blind alleys I had already run down.
Afterwards, when I thanked everyone and remarked how well the process had worked, an lkml member observed that he thought it had worked not because I'm a "name" on that list, but because I asked the question in the proper form.
Hackers are in some ways a very ruthless meritocracy; I'm certain he was right, and that if I had behaved like a sponge I would have been flamed or ignored no matter who I was. His suggestion that I write up the whole incident as instruction to others led directly to the composition of this guide.
If you need instruction in the basics of how personal computers, Unix, and the Internet work, see The Unix and Internet Fundamentals HOWTO.
When you release software or write patches for software, try to follow the guidelines in the Software Release Practice HOWTO.