How To Ask A Question On WinDev

Tim Lesher <tim at lesher.ws>

When you're new to a community, it often takes some time to figure out what the local customs and expectations are. WinDev is a community of software developers, though, and developers never have enough time to do their work. If you're new to the Windows Developers' List (WinDev), and short on time, here's the "Harried Developers' Summary":

  1. Do your homework. Before you ask a question, know what resources are out there, and know how to use them. Make sure that what you think you're seeing is really what you're seeing. If you have source code available to you, install it and use it.
  2. Ask a good question. Be concise, but complete. Don't be afraid to ask a "newbie" question if you've tried to find the information yourself, but let us know where you looked so we don't waste your time. Post in English; good grammar and spelling will improve your responses, but don't worry if English isn't your native language--we'll figure it out.
  3. Read the answers and try them out. If you get a suggestion that doesn't work, or an answer that doesn't match your question, let us know. If an answer solves your problem, let us know that, too.
  4. If you don't get an answer, reconsider your question. Maybe you left some vital clue out of your question, or maybe we really don't know the answer. Feel free to post again if you have further insights, or if you discover the solution on your own.

About WinDev

The WinDev List is, most simply, a place to ask questions. Every developer runs into unfamiliar situations, bizarre behaviors, and unexplainable software phenomena. The community rests on the willingness of its members to ask questions that help them learn, and on the willingness of its members to answer the questions that are posed.

Developers helping developers isn't just an altruistic goal: everyone eventually runs into a snag. By contributing to the level of knowledge of the group, you increase the chance that when you need help from the group, the other members will be willing and capable of helping you figure out your problem. In addition, some of the folks on the list genuinely enjoy the challenge of a good, difficult problem. If we didn't, we wouldn't still be programming under Windows.

It's often been said that the only stupid question is the one that isn't asked. This is an admirable attitude, but unfortunately not a realistic one. The members of WinDev who actively seek out and answer questions do so in their spare time. Time is one of the few resources consumed by software development, and it's non-renewable.

When you come to WinDev with a question, help us to help you. With a little forethought and forbearance, you can not only help us be efficient in answering questions, but also increase the likelihood that you'll get an answer that helps you solve your problem quickly.


Before You Ask

You're at work, coding madly under (yet another) crushing deadline. The code is due tomorrow, and it's working... mostly. Suddenly, something seems wrong. A function you're calling is crashing deep within the bowels of KERNEL32, three calls beyond the API you called. You check the documentation, and check your call. Everything looks fine. Even worse, it only crashes on Windows 98, not 95 or NT. This is strange. Very strange.

What do you do?

Doing Your Homework: RTFM and STFW

RTFM /R-T-F-M/ imp.
[Unix] Abbreviation for `Read The ****ing Manual'. 1. Used by gurus to brush off questions they consider trivial or annoying. Compare Don't do that then!. 2. Used when reporting a problem to indicate that you aren't just asking out of randomness. "No, I can't figure out how to interface Unix to my toaster, and yes, I have RTFM." Unlike sense 1, this use is considered polite.
—The Jargon File

Well, you passed the first test: you re-read the documentation. One of the worst things you can do is immediately fire off a message to WinDev or another users' group, asking "URGENT!!! I'm getting a crash in a call to FooBrotz(). What am I doing wrong?". The nicer people who want to help will send you an email asking for more information anyway; the less-nice people will shake their heads and press the DELETE key, and the even-less-nice people might send you a blistering email questioning your parentage and inquiring as to in which cereal box you found your Computer Science degree.

Two acronyms apply: RTFM and STFW. While the 'F' in each stands for an unprintable word, they otherwise translate to "Read The Manual" and "Search The Web." Questions like "How do I change the cursor?" or "How do I read from the Registry?" can be solved either by looking in one of the introductory books on Windows programming, or by searching the online help either on your local machine or at Microsoft's MSDN Web Site. Additionally, you can see if the issue has been discussed previously on WinDev by searching the WinDev archives at http://search.windev.org.

What You Know That Isn't So

"It’s not what you don’t know that kills you; it’s what you know that isn’t so."—Tom DeMarco, Deadline

The art of debugging and defect analysis is beyond the scope of this document, but the main principle in analyzing strange occurrences is to think about what assumptions you're making, and determining which are really valid. If you are seeing a crash in CreateWindow(), and you're sure all your parameters are correct, think: "What if one of them really isn't correct?" Question your assumptions. Replace the code in question with a brain-dead simple version of it, and see if the problem still occurs. Replace each parameter with its default value. Replace each parameter for which you're already using a default with a non-default parameter. Even if this doesn't immediately answer your question, you might be able to better categorize and describe the problem, which will help you write a better question to WinDev.

Use the Source, Luke!

Some Windows libraries like ATL, MFC, and the C Runtime libraries come with source code. Use it. If it's not installed by default on your machine, install it. It's worth burning the 20 or so megabytes on your development machine. Many times, questions like "This MFC method is crashing and I don't know why" will be answered by someone saying, "Did you step into the MFC source?". That's essentially a wasted email transaction.

Conversely, if you have stepped into the MFC code and are still confused, say that in your question. It will help us narrow down what the problem might be.


When You Ask

How you phrase a question often is as important as what you ask. A terse, vague question with no sample code is likely to be passed over. Definitely include information about your compiler version, library versions, and runtime environment. Traditionally, you can do this with a simple one-line preface to your question like "Environment: VC++ 6.0, ATL 3.0, NT 4.0"

Sample code and reproduction steps are important. Nothing is more frustrating for a would-be answerer than to painstakingly try to reconstruct the problem from sparse information, just to learn later that the problem was caused by a typo in the original code. Try to reduce the code to under 20 lines if you can, but be sure to include enough context (variable declarations, setup calls, etc.) to give a feel for what is happening in your program at the time

If you've already tried several fixes, and they didn't work, tell us so we don't waste time telling you things you already know. If you've searched Google or MSDN and come up empty, tell us that, too, so we don't point you there. Writing about where you've looked and what hasn't worked so far also makes it clear that you've already put some effort into solving your own problem. We like that.

Off-Topic Questions

Would you ask your mechanic about a pain in your chest? Would you ask your doctor to change your spark plugs? Probably not. WinDev is primarily a list for questions about Windows Development, and most of the developers here focus on C, C++, and Visual Basic. Asking questions that don't pertain to Windows development using these languages is probably not your best route to a good, correct answer. Still, off-topic questions are usually tolerated by the list, within reason. We're pretty easy-going here. It's customary to prepend an off-topic subject with "OT:", as in, "OT: Need a good book on Python programming".

Of course, every rule is made to be broken, and we like a good non-technical conversation every now and again. There's a longstanding tradition on WinDev that off-the-wall, off-topic questions seem to happen on Fridays (probably because everyone is tired of programming Windows all week!). Feel free to join in, but still mark your question's subject with "OT:".

Introductory Questions

"I hesitate to respond at all, this is not an advanced question, and posts like this one have driven some very talented people away from the list...." —Mark McGinty, WINDEV, October 1998

We at WinDev enjoy helping people. If we didn't, we'd have unsubscribed by now. But everyone who's been on the list for more than a year or two has seen questions that make them shake their heads and think, "Read your Petzold! " WinDev is not a tutorial; it's assumed that you have some basic knowledge of Windows programming when you walk through our virtual door.

However, we don't expect everyone to be experts here. If we did, there wouldn't be a need for a list. Don't worry about "breaching etiquette" by posting an easy question if you're really stumped and you can't find the answer in MSDN, the online help, or the WinDev archives. It's often difficult to figure out what magic key words will yield good search results. Just let us know where you've looked so we don't send you back to the same place again.

Like an off-topic question, an "newbie" question will often be answered, but with an introductory, "This isn't really an advanced Windows programming question..." If you get a reply like this, and you don't feel that your question was introductory, don't feel insulted. Take it as an opportunity to expand your knowledge: there's probably more to the issue than you know, and it's probably well-explained in the essential Windows texts.

Style and Substance

WinDev is an international list, and while the most commonly-used language is English, for many subscribers English is not their native or most fluent language. That's fine. Most WinDev subscribers have a pretty good tolerance for broken English from non-native speakers. If your grasp of English isn't very good (but you've managed to get this far in this document!), go ahead and do the best you can. We won't hold it against you.

Of course, if you are able to choose between writing clear, grammatically-correct, correctly-spelled language and writing drivel, choose the former. A grammatical error or misspelling won't cause your email to be immediately deleted, but it does indicate that you're sloppy in your writing. Whether or not it's a true indicator, to many people sloppy writing indicates sloppy thinking. Take the extra few seconds to read over your post before sending it, and you'll have a better chance of success.

One way to make sure you have a lower chance of being answered is to write in "'leet speak" or "hacker" language. It doesn't take much extra time to spell out "you" instead of "U", and there's no reason to m4ngl3 yer pr0ze when you're asking for someone else's time. Adopting 'leet speak might get you points on IRC, but it won't here. The bottom line is that making your question artificially hard to read decreases the likelihood that anyone will bother.

WRITING IN ALL CAPS will come across as shouting; don't do it unless that's really what you intend.


When You Get Answers

"If my answers frighten you then you should cease asking scary questions."
—Samuel L. Jackson as Jules Winnfield, Pulp Fiction

So, you've researched your problem, posted a brilliant analysis, and the mail responses are flooding in. Hopefully, someone has exactly the answer you're looking for... but that's not always the case.

The Blind Leading The Blind

You might very well get answers to your question that are wrong. Sometimes laughably wrong. Go ahead and let the responder know that the answer doesn't work, or isn't feasible, or isn't possible to implement. Do it in a way that explains the problem, and not in a way that insults the person. After all, they went out of their way to suggest a solution, and if you can explain to them why their suggestion isn't a solution, you've helped them in the same way you wanted to be helped.

Right Answer, Wrong Question

Sometimes, people will misunderstand your question, and post something that seems completely irrelevant. Hold back on that reply button! Sure, if you're asking about a resource leak in the CPaintDC class, and someone tells you to make sure your monitor cable is firmly plugged in, they're probably a bit off the mark. But it might be that they just misunderstood the question, or it might be that you missed an important piece of context from your question. Go back to the original post, read over it again, and see if you can connect your question to their post. If you can, reply to the list and say why you think they're off—the respondent might know the real answer, but won't be able to tell you if they think they've already answered acceptably.

Bull's-eye!

It's customary to post a followup response some time after you've solved the problem. If someone had the answer you needed, thank them. This isn't just a matter of courtesy, but it provides closure for the question, and someone searching the archive years from now can be more secure that the response really did solve the problem. If the response didn't quite solve the problem, and you had to do some additional work to fix it, post that, too.

What if the responses were all wrong, and you fixed the problem on your own? Then definitely post a followup! Educate the rest of us—that's what this list is all about.


When You DON'T Get Answers

Alice sighed wearily. "I think you might do something better with the time," she said, "than wasting it in asking riddles that have no answers."
—Lewis Carroll, Alice's Adventures in Wonderland

Sometimes questions on WinDev are answered within minutes; other questions can take a few days before someone interested and knowledgeable sees the question, has time to research it, and posts a reply. If it's been three or four days and you haven't seen an answer, you can probably assume that you won't get one. Questions do go unanswered on WinDev for a number of reasons. Maybe the question was vague, or maybe no one really knows the answer to the question as you posted it. There are some things you can still do...

Twice Zero Is Still Zero

The second worst thing to do if you don't get an answer to your question is to post it again, unchanged. If a question doesn't get a response the first time, it probably won't the second time. The chance that several hundred people who are waiting to help you just accidentally deleted or overlooked your message is about the same as the chance of generating the same GUID twice in a row.

The worst thing you can do is to post it again, and prepend an indignant outburst like, "HELLO?! Is anybody out there?". True, this will probably get you a response of some kind, but probably not the kind you're looking for. Worse, it marks you as a whiner who isn't willing to think about why your question wasn't answered, and reduces the chance that someone will take the time to answer even a good question from you in the future.

Think About The Question

The first thing to do is to think about how you asked the question. Did you include enough detail? Did you include too much detail? Have you described what really happened? Frequently when you're in the thick of debugging a problem, and you're thinking in code, it's hard to make the transition back to natural language. It's easy to forget to add enough context to tell the recipient exactly what you're talking about.

So, go ahead and post again. But don't post a copy of the original question. Post a new question, one that acknowledges that you posted before and didn't get a reply, but sheds new light on the problem. You've probably tried a few things that didn't work — tell us about them. They'll tell us what not to suggest, and they might set us thinking in the right direction. Sometimes revealing what didn't work ignites the spark that will tell you what does.

Maybe The Well Is Dry

"I just find it interesting that whenever I post messages about htmlhelp, no one ever takes me up on my queries.
This is either...
1. sod off, find out yourself... (hope not!)
2. i don't know"
—Andrew Truckle, WINDEV, March 2001

There are some very smart people on WinDev. Unfortunately, it seems that omniscient programmers are few and far between, and none of them subscribe to our list. As a result, it's possible that we really don't know how to solve your problem. This is especially true if you're working in a specialized area of Windows (like DirectX, or HTML Help) that many programmers don't get to deal with in their day-to-day lives.

If this is the case, it still might be appropriate to post your question again, with some explanatory comments. Mention similar subsystems to the one with which you're working. Ask for pointers to other resources or books (but search the web yourself first!). And, by all means, if you do find the answer, tell us! Your answer will be assimilated into the Borg-like WinDev Archives, where future generations of Windows programmers can benefit from your hard work.


Acknowledgements

Thanks go out to the hundreds of people who have subscribed to WinDev and contributed over the years. Their questions and answers (both good and bad) have built a community. Special thanks to those who let me use their out-of-context comments as quips here.

Thanks also to Mark McGinty, whose excellent WinDev search archive was useful in researching past questions (and provided some of the quips for this article), and to Serge Wautier for his suggestions and comments on this article.

This How-To was inspired by a similar document, "How To Ask Questions The Smart Way", written by Eric S. Raymond. Eric writes about asking experts in the Linux, Free Software, and Open Source community; many of the suggestions and attitudes there are different from those on WinDev, but the idea is the same. Thanks to Ken Nicolson for pointing out these differences, and inspiring this document.


Last Modified 26 November 2001