One of the ways I spend my spare time is moderating the Programming Discussions Discord server. It’s an online community of almost 20,000 people, focussed around helping people with their programming problems through real-time chat.
A frequent mistake I see people make in the server is to treat it like a small group. How you should behave in front of tens of thousands of people you don’t know is very different to how you behave in front of a small number of people you do know.
Here are some do’s and don’ts of interacting with thousands of people.
Don’t ping everyone
Online group chat tools often have a way to notify individuals or groups that you have messaged them. Both Slack and Discord allow you to type
@everyone to notify everybody in the server that you have sent a message. This is useful when you’re letting your team know you’re heading out for lunch, but when the audience is thousands of people you’re going to cause annoyance.
We find people typically do this to bring attention to their question, and that’s totally understandable. It will work, too, but we’ve disabled the feature in Programming Discussions. Hang tight, re-post your question if it has been a few hours and it has scrolled off the screen.
Do ask your whole question
Often phrased as “don’t ask to ask” or “no hello”, this is polite in real-life but doesn’t translate well to large online communities.
In real-life it would be strange if you blurted out a question about the possible modifiers you can prefix a Java method with, but online this is what we prefer.
bob: does anyone here know about Java methods?
bob: I’m struggling to understand why you would make a Java method
final. At first I thought it had something to do with the return value being constant, but that doesn’t seem to be the case. What use-case do
finalmethods have in Java?
In the first example, the reader will be hesitant to say yes for fear that they don’t know the answer, or the question ends up taking a long time. It’s also possible for hours to pass between asking and answering, by which time bob could be asleep. The next day he’ll check back and see: “yes, what’s the problem?” and the cycle continues1.
In the second example, anyone that knows the answer can contribute. Even if bob leaves and comes back the next day, the answer will be there.
Do ask your question well
A good question has the following components:
- What you’re trying to achieve.
- What you’ve done.
- What you expected to happen.
- What actually happened.
Including relevant code and error messages if there are any.
When it comes to posting code, dumping a multi-hundred line script into the chat isn’t going to make you any friends. It wastes vertical space and often only a dozen lines of it will be relevant. Spend time coming up with a small, self-contained, runnable example.
It also helps to have put some effort into solving your problem on your own before asking for help. If you fix it and it makes sense, you’ve learnt something. If you fix it and it doesn’t make sense, you have a great question to ask. If you can’t fix it, well, at least you tried. People respect the effort. They don’t respect people wanting to be spoon-fed.
Do be mindful of others
Behind your screen are thousands of people, collectively tens of thousands of years of life experience. You don’t know everyone, so you need to be mindful what you say.
The following are all bad form:
bob: I can’t believe I didn’t understand
finalin Java, I’m such a retard.
alice: If I miss another semi-colon, I’m going to kill myself.
This happens a lot. It can be easy to forget that usernames are people, and everyone is different. While none of the above sentences may bother one set of people, they could all cause real discomfort in others.
Gratitude over self-deprecation.
finalmakes so much more sense now! Thanks for taking the time to explain it to me.
Seeking help over getting frustrated.
alice: How do you all make a habit of remembering to end lines with semi-colons? I keep forgetting them.
Discussion over fire.
Don’t use enter as punctuation
sandra: what would happen
sandra: if I used modulo
sandra: two negative numbers
This pushes others’ messages off the screen faster than if the entire question were one message. It’s not that bad in small groups, but in a large community this can be frustrating to those trying to keep their questions “above the fold.”
Train yourself to hit space instead of enter, then read what you’ve written before hitting enter for good measure. A good 50% of what I type has mistakes first time around, and I bet I’m not the only one.
Don’t private message people
If you’re giving an answer, try not to disappear into private messages. A lot of people will first try searching their question before asking it, and if the answer is hiding in a private conversation they’ll never find it.
We also worry about shady things happening behind closed doors. On more than one occasion, we’ve had reports of abuse or illegal activity happening in private messages. As moderators, the more that happens behind closed doors, the more difficult our job becomes.
If you do need to ask a question privately for whatever reason, seek permission first. It could be that the person you thought would have the answer doesn’t, or they’re not at their keyboard. Asking to private message in the open gives another person a chance to offer to help.
Do say thank you
Lastly, it’s great to show gratitude to the people that help you. It doesn’t matter if it’s a little “thank you” or an Oscar acceptance speech. This is what makes the whole thing feel worthwhile to those who give their evenings and weekends to being a part of the community.
The points again:
- Don’t ping everyone.
- Do ask your whole question.
- Do ask your question well.
- Do be mindful of others.
- Don’t use enter as punctuation.
- Don’t private message people.
- Do say thank you.
If you follow this advice, at least in the servers I’m a part of, you’ll have a much easier time getting help and will make a lot more friends along the way.
finalin Java is to stop inheriting classes overriding a method. Any method marked
finalwill generate a compile-time error if a child attempts to override it. ↩