It's dangerous to code alone! Take this.

How to Ask Questions

Published on 02 Apr 2022.

Are you thinking about asking a technical question in the Discord server or somewhere else? Read this guide to ensure you give your question the best chance at getting answered in a way that will actually help you.

This is not meant to be a checklist. I doubt there’s a single question you could ask that needs all of the details provided below. There isn’t a template to follow. these are just things to keep in mind when asking your question.

1. Remember that you’re asking volunteers and nobody owes you anything.

All of the people on this Discord server (and in virtually every part of the Internet) are willingly sacrificing their time to help you.

I don’t want to be too brusque, but I do want to make the point clear: nobody owes you an answer.

This is a community of people who are enjoying their C# journey. Unless you’ve paid money for a support contract or for tutoring, every second of help you get is freely donated by somebody who wants to help you grow in your knowledge, skills, and experience.

Make sure your questions are respectful of people’s time and efforts in helping you. Don’t be dismissive of help that you do get.

Erring on the site of kindness, generosity, and friendliness will ensure people will be willing to answer your next question as well.

In fact, most of the guidelines here are derived from this rule–things that help lighten the load on these volunteers to get better and more efficient answers.

2. Make sure you’re asking relevant questions.

The Internet is full of groups of people willing to help you get answers to your questions. However, you can’t just ask any question to any of these groups, and expect a good answer. Think about what expertise and experience the collective group has, and make an educated guess about if you’re asking the right people.

Take our Discord server, for an example. We’re a group that knows the C# Player’s Guide quite well, and as a whole, we know C# and programming in general pretty well. The farther you drift from that core topic, the less likely you’ll be able to find good answers here.

For example, this is a fantastic question for this server:

I’ve got 5th Edition, and on page 105, it says, “You can only use an expression body if the whole method can be represented in a single expression. If you need a statement… you must use a block body. But I was able to make this work: void PrintOnce(string message) => Console.WriteLine(message);. Is that statement in the book accurate?”

This is hyper-focused on the book itself, and there is no other place in the world that is better suited to answering this question than this server.

(Before somebody gets cheeky and asks that question on Discord, the answer is that there are expressions and there are statements, and there are expression statements. Expressions can always work for an expression body. As can expression statements. But not other statement types. The fuzzy area is that a void-returning method isn’t often considered an expression, yet it actually does work on this case. You could, perhaps, consider it a void-typed expression.)

This question is also good:

I’m working on a personal project, and saw some code that says, ++x. I’ve always used it with the ++ after the variable. Is there a difference?

There are other places where this could also be answered (we’re not uniquely suited to answering it here) but you’re highly likely to get good, considered answers to this question.

This one is starting to drift off of the focus of this particular Discord server, but is still close enough you’d likely get some sort of an answer:

I’m writing some ASP.NET code, and there’s this builder.UserSqlServer thing I don’t understand. How does it work?

This book isn’t focused on ASP.NET, but we do have some people around who know a thing or two about it.

And here, we’re getting to a point of diminishing returns:

I’m running into this issue in my JavaScript code. What’s going on?

While we likely have some people who could answer some JavaScript questions, we’re several levels removed from the focus of this server, and you probably won’t get a good answer.

And at the far end of the spectrum:

How could anybody possibly vote for [PoliticalCandidate17]? He’s an idiot.

There’s a handful of topics that are “forbidden” on this server. Politics is one of them. There’s plenty of other places on the web to discuss politics (and every other “forbidden” topic on the server). These will be deleted, and run a risk of getting you banned if they’re egregious or persistent enough.

3. Ask an actual question.

It is common both here and in the rest of the world to think you’ve asked some question when you haven’t.

Here’s my code. It doesn’t work.

Don’t do that. Make sure you explicitly state the question you have. Those who would help you can’t read minds.

4. Provide all relevant details but ignore irrelevant details.

Zoom in on the problem. Cut out any unnecessary stuff, but give us all of the relevant detail about the specific problem you’re having.

This is not a great question:

I got the error CS0218. Why does that come up sometimes?

It doesn’t provide any detail about what scenario led to your problem, and you’re likely to only get vague answers.

This isn’t any better:

I got the error CS0218. Here’s my 10000 line project. What’s going on in the file Something.cs at line 218?

Don’t ask people to download a massive project or dig through a lot of irrelevant details to help you.

If you can’t pinpoint the relevant lines, then it means you need to a bit more work first before asking the question.

As a guideline, you should be able to ask your question with no more than about 20 lines of code. There are occasional exceptions to that, but they’re quite rare.

5. Don’t ask if you can ask. Just ask.

We get this type of question a lot:

Is there anybody around who can help me right now?

Usually, this stems from not wanting to spend the time to write up a question that won’t get answered, but as explained well elsewhere (https://dontasktoask.com/), this puts potential answerers in a tough spot. If they say, “Yes, I’m around,” then they’re on the hook to stick around and answer your question regardless of what it is, and how much they know about it. It’s almost like asking for a blank check of the person’s time and energy. So most people just say nothing.

You’re usually better off just writing up your question and asking it than asking if you can ask a question. That allows those who are interested and able to answer it to just get to the point.

6. Don’t say ‘hello’ in a separate message. Just ask your question.

This happens quite a bit too:

[3:14 pm] Hi there. I have a quick question.

[3:19 pm] I don’t know how X works, and I could use some help.

That left five minutes where your pending question was just “hanging” in the air.

You don’t need to start with a greeting. It’s perfectly fine to just ask a question.

But if you do want to add a greeting, feel free to do so at the start of your message instead of as a separate message.

7. Tell us what you’ve tried.

It helps us greatly to know what you’ve already tried. For one thing, it shows us you’re not just being lazy about it. You’ve put some effort into it already.

But it also ensures we don’t waste your time asking you to try things you’ve already tried, and gives us a feel for what territory has been explored and what territory has not.

8. Tell us your best guess.

Another way to greatly improve the chances of getting high-quality answers is to tell us what your best guess is on the answer.

For one thing, it gets you to do just a bit more work and in doing so, you might completely answer your question and be the wiser for it. But if you are right, it is very easy for people with more experience to say, “Yes, you’ve got it!” than it is to write out the whole answer.

It also gives people a glimpse of your current understanding of the problem, which allows people to spot potential problems in the mental model you have. Rather than just getting some pithy answer to some random question, this opens up the possibility that somebody might spot a fundamental misunderstanding in your mental model and be able to give an answer that shifts your way of thinking drastically, fixing not just your current problem, but a hundred future problems as well.

You may have no meaningful guess at all. That’s okay too.

9. Tell us why you’re trying to answer the question you have.

It is often usually helpful to describe why you’re trying to answer some question. At a minimum, it gives meaningful context to what’s going on.

But if you can explain how you got to the issue you’re currently dealing with, sometimes, people can back up a step or two and provide you with a much cleaner solution to the thing you’re trying to solve.

For example, instead of this:

How do you get the last three characters off of a string?

You might be better served with this:

How do you get the last three characters off of a string? I want to do that because I’m trying to get an extension for a file name.

If you’re going down a good path, you’ll still get a good answer to your “last three characters” question. But in this case, you’re also likely to get somebody responding with, “There’s a method specifically designed to get the extension of a file name: Path.GetExtension(someString).” And you might get somebody to point out that not all file extensions are three characters, and that some files don’t even have an extension. All of that is information you might not get if you just ask your question without explaining why you’re trying to do it.

10. Don’t DM people for answers to questions unless they have specifically agreed to it.

Even if you suspect somebody might be able to help answer your question, don’t direct message (DM) people your questions unless they’ve already agreed to it ahead of time.

This community works best when questions are asked and answered publicly. You often get multiple views and explanations on the subject. Plus, it allows people to search the history for related messages, and it allows others to observe and learn as well. Asking a single person in a direct message negates that, and prevents the community from getting the broader benefits.

It is easier for somebody answering questions to justify spending their time on a question that will be viewed by hundreds of people vs. a single person.

Also, just because somebody is willing to answer one question via DM doesn’t imply they’ll answer all questions via DM in perpetuity.

A counterpoint to this item is me. You can DM me questions if you want. There’s an occasional question about the book that needs/deserves some degree of confidentiality. (I can’t think of any off the top of my head, but I know I’ve seen them.) Feel free to DM me if you need.

However, if it is a question I think will be helpful to the broader group, I’ll either redirect you to ask in the server or I’ll ask if I can post an anonymized version of the question in the server and answer it there. (For example, “I just had somebody ask me this question: [X]. Here’s my answer.”)

So if you’re hesitant to ask a question to the group, I can post it for you.

11. Don’t worry about “dumb” questions! Just ask!

Most of the other items here place extra burden on you, the one with the questions.

I want to end this with some words of encouragement.

Learning to program is a complex journey. You will have questions. Frankly, you will have questions that you can’t easily answer.

There was a time–not even that long ago–where if you had questions you didn’t know the answer to, you were just out of luck. These days, there’s a lot of places you can have a discussion and get an answer to the questions you’re facing. This server is one of those places! We’re here to help you grow and want to see you succeed.

Don’t worry about if your question is going to “sound dumb” or anything like that. We’ve all been there before. If you’re afraid of asking “dumb” questions, you may never be able to ask the “smart” questions.

So just ask.