Friction Between Programming Professionals and Beginners
In this article I want to talk about negative aspects of the programming community, regarding beginner programmers. This is a touchy topic. I will try to explain both sides to the best of my ability, but I’m not endorsing either side. My only hope is that some readers will gain more empathy for the people they are communicating with, and hopefully use that knowledge to make friendlier communities.
The problems usually start when a beginner asks a question online.
Where is the most obvious place to ask a programming question? Stack Overflow.
Stack Overflow is a community of 4.7 million programmers, just like you, helping each other. Join them; it only takes a minute. Join the Stack Overflow community to: Ask programming questions, […]
It sounds like exactly the right place to be. It even sounds friendly. But actually asking questions on Stack Overflow is often far from friendly, for a beginner programmer.
“I gave up programming after the last time I asked a question on StackOverflow.”
Stack Overflow users ands moderators are quick to downvote and close questions, for a multitude of reasons. These reasons are often surprising to first-time users.
I’m going to pick on Stack Overflow as an example in this article, because it is the most obvious place to ask questions, but the same problems can be seen anywhere that beginners ask questions.
“I must have gone to a couple dozen IRC rooms, whatever online communities I could find. Everywhere I went people shat on me, and I never got an answer to a single question.”
Questions can be closed because they are common, or answered elsewhere. It’s not unusual to see comments like “ever heard of Google?”
So, did they even search? Quite probably. Posting a question is usually a last resort.
What turned me off was that I did consult the documentation first. I googled. That’s the reason I’m asking the f***ing question.
RTFM (Read the Fine Manual)
Another common response is to “just read the documentation,” maybe with a link to said documentation.
Technical documentation is usually impenetrable to beginners, for the same reason that searching is difficult: lack of vocabulary. The documentation is not useful unless you can understand it.
The documentation may answer the problem in a broad sense, but it’s unlikely to provide a specific answer to the asker’s particular problem.
“Almost every time I’ve been told to read the documentation, there’s nothing about my problem in the documentation.”
Off-Topic Opinions and Corrections
I would tell someone “oh yea, I started learning HTML and what a string is” and they would reply back with “please, HTML isn’t even a real programming language” and then go on to boast about how much they knew and what they could do. So I kind of kept to myself and tried learning on my own
If the question mentions PHP, someone might have a rant about how that language is bad and you should use this other language. If the question happens to contains the magic words “programming in HTML,” there will be no shortage of people explaining why HTML is not a programming language. If the question has grammatical errors in it, the grammar police might even make an appearance too. None of them bother to actually answer the question.
Another form of this is the comment “why would you want to do that?” This can be asked of any question, and the answer is usually irrelevant.
Most beginner problems are obvious to experienced developers. I’m sure this is true for all fields. Yet Stack Overflow moderators quickly close these questions for being “off-topic”:
off-topic: This question was caused by […] a simple typographical error. While similar questions may be on-topic here, this one was resolved in a manner unlikely to help future readers.
Even where the mistake is not a typo, commenters often describe the problem as “simple,” “trivial” or “easy.” This implies something that is not very nice, and also untrue: If the answer is easy, that means the asker must be stupid for not seeing it.
I think that most people who call solutions “easy” are not trying to imply that anyone else dumb. Unfortunately, beginners often interpret it this way.
Well, I’m mostly embarrassed because my last Stack Overflow account got banned for asking a dumb (but legitimate) question.
Back and Forth
Because of the communication problems between beginners and professionals, a back-and-forth conversation is often required. Professionals will ask for more information, to diagnose and understand the problem. Beginners will ask for more-detailed explanations and examples, to understand and implement the solution.
Both sides are guilty of neglecting this. Beginners sometimes ask questions without providing enough information, and get upset when asked to provide more details. Professionals sometimes give terse answers, and get annoyed when asked for further explanation.
The Professional’s Perspective
I’ve written a lot about the beginner’s perspective, so now I want to explain a little about the other side.
Firstly, answering questions is usually volunteer work. It’s something that professionals do for free, in their spare time. This is one reason why there are a lot of short answers, like links to documentation. Most full-time workers don’t have much time to spare for long, in-depth answers.
It is very common for beginner questions to be missing details necessary to identify the problem. Sometimes they say there is an error, but don’t show the error message. Sometimes the code is missing, or it’s a piece of code unrelated to the problem. Sometimes the code looks fine, and there is no mention of what the problem actually is. Seeing these same details missing, over and over again, is the reason why posting guidelines are written. Given that potential answerers don’t have much time to devote, if a question is missing critical information, they tend to ignore it or leave a comment like “please read the guidelines.”
When someone decides to post an answer, they often expect to spend five minutes writing it, and then it’s done. They might not expect, or have time for, a back-and-forth discussion about their answer.
Suggestions for Professionals
After being exposed to all of these unfriendly, demotivating experiences, some beginners develop a negative opinion of professional developers. Some become angry and describe professionals with words like “hostile,” “elitist,” “egotistical” and “condescending,” but I think that most beginners just become demotivated and give up because they have been made to feel stupid and unwelcome. This is not a minority, either. Based on all the discussions I’ve been digging through, I would guess that this affects upwards of 50% of beginners.
As a community, I think we can do a better when interacting with beginners. There are a few bad actors among us, but I’d like to believe that the vast (often silent) majority are decent people.
Where you can identify that the person asking the question is a beginner, I’d like to propose some guidelines:
Attempt to answer the question, or don’t comment at all.
Don’t tell them to RTFM, Google it, correct their grammar, or give your opinions about their choice of technology. Beginners are going to be wrong a lot – that’s just a normal part of learning. The most immediate road block to their learning is probably the question that they asked. Taking a detour into whether HTML is Turing-complete, or the weaknesses of their current language, is an uneccessary distraction at this early stage of their learning.
Accept that answering may require some back-and-forth.
Expect beginners to ask for clarification, and don’t be snippy when they ask for it. Also expect that you may need to ask multiple questions before you can diagnose their problem. Patience is a virtue.
Don’t just post links to technical documentation.
This might be acceptable for intermediate developers, but it’s useless for beginners.
Don’t mention how “easy” or “trivial” something is.
Whether something is easy depends on your personal skills. Just because it’s easy for you, doesn’t mean it’s easy for everyone. Even small mistakes, like a missing semicolon, can feel impossible to a beginner. It should go without saying, but you should also never need to use words like “stupid” or “idiot.”
Call out bad behaviour from other professionals (with civility).
The standard you tolerate is the standard you accept. If you see other people exhibiting bad behaviour, please leave an opposing comment or down vote. It probably won’t change the offender’s behaviour, but it shows the beginner that not everyone in the community is against them. When there is no opposition, it is easy to interpret nasty comments as being condoned by the community. Keep it civil, though. Flame wars are counter-productive.
Suggestions for Beginners
The following suggestions are mainly aimed at improving your experience when asking questions, as a beginner. Asking questions is a necessary part of learning, and it doesn’t have to be painful.
Follow the posting guidelines.
The most common mistake I see is not providing enough information in the question. Posting guidelines exists to help you to provide all the neccessary information to diagnose your problem.
Yes, the guidelines tend to be long and confusing. I have a small, hopefully easy to understand, set of guidelines in the article: When You Know the Basics, but You Still Can’t Code. As a quick summary, the bare minimum details you should provide in your question are:
- what you expected to happen vs what actually happens
- the code
- the full error message (if applicable)
Accept that asking a question may require some back-and-forth.
Despite your best efforts, you may not have provided everything necessary to diagnose your problem. That’s OK. Just be prepared to provide any extra information that is requested.
Keep in mind that answering questions is volunteer work.
Answering questions is generally a free service that professionals provide in their spare time. If you get a curt response, or no response at all, don’t take it personally. They are probably just busy.
Use Stack Overflow with caution.
I won’t say to avoid Stack Overflow completely, but you should be aware of what you’re getting yourself into. Realistically, Stack Overflow caters to intermediate developers, not beginners. There is a good chance that you will get an answer to your question, but it might not be an entirely pleasant experience. Stack Overflow is not meant for discussions and opinions – if you want those, you should probably post your question elsewhere. Stick to the posting guidelines carefully, because the community moderators are very strict.
Don’t interact with the annoying people.
There are bad apples, as there are in any community. You will receive unjustified snarky comments, at some point. It sucks, but that’s just the reality of the situation. Don’t respond to them, or it will just get worse. Try to keep in mind that these people are a vocal minority.
Consider face-to-face learning.
People are nicer in person. They can see everything they need to diagnose your problem by looking over your shoulder. It’s also easier for you to ask follow-up questions.