186 comments

[ 3.0 ms ] story [ 220 ms ] thread
Seems like this article is mainly talking about cognitive dissonance occurring between a hypothetical beginner who imagines Stack Overflow is going to be a congenial conversation, and a hypothetical expert who curates SO as more of a high-viscosity Wikipedia that would ideally be ask once, answer once.
To an extent. It also touches on the aggressive jerkishness of a certain segment of the developer world whose practitioners make their bones on a well-nourished superiority complex.
The article is mainly a blog post attempting to build hype for the author's book.
I can definitely recall how alienating the stack overflow community was to me when I first started learning programming. You ask a simple question and they yell at you to Google it. You ask a complex question and they ask you why you're doing it. My solution was just to close myself off from StackOverflow and try any other community. My experience with IRC hasn't been great, but often my responses were miles better than what I would get on SO. Honestly, the best advice I can give to beginners is to make friends who know a bit more and go to friends first whenever possible (at the very least to help them make a good SO post with proper terminology, etc.)
>You ask a complex question and they ask you why you're doing it.

How is that alienating?

Being dismissed or interrogated for every single question you ask is certainly alienating.
Maybe, but 'why are you doing it?' is a very relevant question. And imo should be the first question to be asked. Knowing why you're trying to achieve something will allow people to provide alternate ideas instead of fixating on the narrow context that you've set.
Many times I've seen that it's been out of a genuine desire to solve the asker's problem, but the asker has already started down the wrong path and is determined to see it through.

A recent example: someone was using a map/hash object to store a series of documents, and needed a way to extract N items from the map for pagination reasons. They presented a for loop but said that something "felt wrong" about that. Many of the comments were about how maps had no guarantees about order, and that each attempt to grab a "page" of objects would result in a random set, meaning pages 1, 2, and 3 could all conceivably have common items, rendering pagination fundamentally broken.

There were several suggestions to use an ordered array of map keys, but the asker was determined, stating "it's just for testing purposes, order doesn't matter, I should never have mentioned pagination".

Maybe there's an important detail that the asker left out, but by all accounts they were given sound advice and even working examples, but they still seemed frustrated and would likely describe the experience as "alienating".

Its not always the wrong path, but the only path available to you if you have a complex system. You could do as the alternatives suggest, but you know that will affect some other part of your system. The reasons for needing a particular soluition aren't always available without more context.
Without having an ordered array of keys there's just no safe way to paginate a map. The map's own documentation says that key order has no guarantees, making it effectively random. It really is a silo'd issue, I can't even imagine what other factor could change the above facts without resorting to unsafe memory access.
Presumably OP felt like the "why are you doing this?" response came with an implication that they shouldn't be doing it.
In my experience it's not so much a genuine "let's take a step back and see if this is the right approach".

It's more of a condescending "Why are you even doing THAT" (because the person doesn't actually know the answer). You see this kind of problem in person too with people who feign surprise over you not knowing something when asking a question so they can act like they're much smarter, but they're really just insecure about what they know.

"You don't know what X is?!"

This is toxic, but in real life the best approach is to just reiterate you don't know and ask. This usually reveals the person claiming to be surprised doesn't actually know either (or if they do you can at least quickly learn something). This doesn't work as well with an online community though and people usually just leave it.

> You ask a complex question and they ask you why you're doing it.

As someone on the other side of those questions, perhaps I can explain.

Very often, people unfamiliar with a subject area ask questions about solutions, instead of asking about problems. They've done a bit of googling, and have a partial solution. But the solution doesn't work, so they ask "how can I fix this solution."

To someone familiar with the problem space, the question is often nonsensical. It's based on false assumptions about how the API / system works. So the question is largely un-answerable.

The only possible response, then, is "Don't talk about the solution. Talk about the problem. What goal are you trying to accomplish? Maybe there's a different solution which can help you reach that goal."

This response can be seen as obtuse and unhelpful by the questioner. But it's often the only possible response, given the incorrect assumptions.

e.g. Q: How do I get diesel into my gas car? The nozzle just doesn't fit!

A: Why are you trying to do that?

Q: Stop being annoying, and just help me!

A: No, really... why are you trying to do that?

(after some back and forth)

Q: My car is in front of the diesel pump, and the hose from the gas pump won't reach.

A: Well... move your car.

It's not always that simple, but the back & forth is similar. It's hard work convincing people that their assumptions are wrong, and that they have to re-visit their assumptions, and re-do all of their previous work.

There are so many other ways to answer that though than asking why they are doing it.

Like.

"I would like to help you but I need some more context. What are you trying to do"

Those "what are you really trying to do?" responses are infuriating. I feel like responding "What I'm really trying to do is just get an answer to this specific question. I don't need you to re-design my architecture."
Usually, the intent is not to infuriate you, but to get context. The problem may be crystal clear to you, but to a onlooker, it might be completely ambiguous.

Imagine asking "how do you say 'house' in German?" Well that depends: is that a verb meaning "accomodate"? Is that a noun? Does that mean "a building," as in "three-bedroom house"? Or "a dynasty," as in "house Stark?" Or music, as in "house music"? Or something completely different? https://en.wiktionary.org/wiki/house

"I DONT CARE JUST ANSWER ME IS IT SO HARD?!!!!" Yes, yes it is.

There used to be a python IRC room were they would not only refuse to help you if they considered your methods "unpythonic", but they actually encouraged anyone else not to help as well. They ask you what you intended to do in order to police if they should help or not.

The answer in the above case is: "There are many different meanings of the word 'house' in translation (e.g accomodation, a building) so it depends on context."

You could then elaborate on different meanings, or suggest the question be made more specific; This is a question that requires more context; however, it's not the same as the procedural questions that often feature on SO where there is no ambiguity in the language.

I understand where you're coming from, but it's often the way questions are answered that's the problem, as shown in your example.

If someone's asking to put diesel in their petrol car, they obviously don't know that's a bad thing to do. Just asking 'Why are you trying to do that' makes you seem like you're trying to be difficult. A better answer would be 'I think you're looking at the problem wrong - diesel won't work in your petrol car, what are you trying to achieve by putting diesel in your petrol car?'

Yes it's a bit longer, but it actually helps someone know they are wrong, rather than coming across like 'Pff you idiot, you want to do it my way'.

The example was just that.. an example. And a short one at that. It was intended to be illustrative, and not a definitive overview of the problem.

In short, the answer you give doesn't matter. What matters is the attitude of the questioner, as shown by AndrewUnmuted, below.

A good questioner can say "That's not a good response. I'm trying to do X because of Y and need help with Z."

A bad questioner says "How dare you question me. Give me an answer now!"

I have 17 years of experience in running an open source project. My conclusion is that the content and/or the tone of my answers are less relevant than the attitude of the questioner.

People who want to solve a problem don't pay attention to the emotional content of an answer. They keep pushing for a solution, no matter how much they dislike the questioner.

People who have an attitude see personal insults in technical responses. An answer of "Your question is answered at URL X" is an offensive response which is intended to personally denigrate the questioner, and insult his intelligence. The only proper response for such a questioner is to insult someone back.

As I said below, the only real solution to such people is to inform them to be polite, and then to ban them. They are toxic.

> Stop being annoying, and just help me!

I don't see this, for beginners the reply will be "I'm trying to bake a cake" ... "I need to get milk from the store" ... "I need gas to get to the store"

Each ... is a back and forth focusing on the actual problem. Beginners don't necessarily know what information is useful information. This is why physically working with an experienced developer is so useful, because that exchange (which provides a useful learning experience for the beginner) is so much easier in person.

> I don't see this

Try sitting on an open source mailing list sometime. :(

Unless the question is missing important context, it should be answered; or to say it another way, anwerers shouldn't be concerned with if it's the right question, only that the question is clear.

If someone asks the wrong question, they might get the right answer, that doesn't help them. That's not a problem. That might be the right answer for someone else - no answer is just for the original submitter, but for anyone else to whom it is relevant.

The problem I've found is I've asked a very targeted question, and rather than answer it (or not, in the case that someone doesn't know the answer) people imply it's missing the context of what it's for - it doesn't matter, that would be a different question!

It seems sometimes people ask "what are you trying to solve" (in the guise of "helping newbies who ask the wrong questions") hoping it will turn out to be an easier question.

I'll also note, even if the question is the "wrong" way, those are the best ways to clarify how to do, since they'll be done on only rare occasions, and hence have less documentation.

   "You ask a complex question and they ask you why you're doing it."
Without context, it is very hard to differentiate complex questions that are necessarily so, and the much more common case of them being due to muddled thinking or fundamental misunderstanding.

If you are looking for help, the most important thing is to clearly describe the problem you are trying to solve, much more so than the details of the approach you are trying. This leads to a much more productive conversation, and can avoid a lot of back and forth based on mutual misunderstanding.

I feel StackOverflow is a bad place even as a professional. I don't agree with 90% of "closing" of questions, frequently closing a question is the ultimate upvote. StackOverflow seems to prefer questions that can be answered by just copying the fine manual - and frowns on those that might involve discussion.

From time to time I still use it, but for me it has jumped the shark.

Where do you go to for answers? I hate the over zealous moderators, but it does end up answering a lot of my programming related questions.
I'm not GP, but I often still go there via Google searches that turn up questions, and then discover that a useful question with a great answer has been closed as off-topic to the programming forum. 90% of the time it seems like a legitimate programming question.
Yes, I turn to google as well. That's what over 30 years of development experience give you: You know how to use google to turn up the correct answers. And as I use Java for a living - there's a great decompiler in my IDE. Use the source, Luke.

By the way, showing a talented beginner where good documentation is - I think that's frequently the best way to help them along.

Most of the time Stack Overflow answers are top of my Google hits.
Google Search is an elegant tool of a more...civilized...age. A long time ago, it used to have more result pages than the first one. (Technically, it still has them - but nobody ever goes there: just click through the first page results, or try something else.)

In other words: just because Google ranks a result best doesn't actually mean it is best for you: I have frequently found the actual result I was looking for two or three result pages down.

Yesterday after I complained about Stackoverflow on IRC, and people on IRC could not help me, someone suggested that I asked on Quora.

I did, and they replied :)

Same here. I feel like StackOverflow after nearly 10 years of closing questions such as 'Which is a better framework X or Y', should be honored at /r/DesirePath.

Like at which point do they understand that maybe their desire conflicts with how most community wants to use SO as.

I keep waiting to see a competitor take off because it starts by encouraging those sorts of questions, and then secondarily accepts all the other sorts of questions SO does. Of course it's more difficult to start a new community because of network effects, but a decent place to start might be to find a bunch of the popular closed questions on SO and reach out to the questioner and some of the good answerers to come participate on your site instead. If this exists already, I'd love a pointer to it!
Most of the community? [citation-needed]. Also, I severely doubt that SO === all teh internetz; the premise "if it's not immediately and precisely answered on SO, all hope is lost" is just absurd (and directly contradicts most of the article which sparked this discussion, btw).
With a stackoverflow-like system (rating, moderation, editing of questions by moderators, accepted answer) even such questions would be productive. Subjective ramblings would be voted away, answers showing advantages/disadvantages or similiarities between between frameworks would be rated up.

It's just stupid to reduce such a portal to only questions that can be answered by RTFM.

Questions that need discussion due to missing information should be voted away, I agree on that. But some allow subjective answers - and those are frequently those that require experience. (What's the best way to solve this-and-that? It depends, in situation a use solution A because, in situation b use solution B because, ...) Such questions typically are being closed by the moderators as well. And frequently the person who asks is not aware of all the factors influencing a solution, so there's a lot of useful information in such questions.

I asked a question on a Stack Exchange site (not SO) that was immediately reported as a duplicate. It wasn't, the duplicate wasn't even close in multiple ways, and someone else jumped in to defend the question - he was then upvoted by several people. Despite this, there is a permanent prompt to either accept that the question is a duplicate, or to edit my question and explain why it isn't.

This is nonsensical, because the reason that it isn't a duplicate is inherent in the question itself. I'm not sure how I would edit it without writing a non-sequitur. Even though I've actually accepted a correct answer, I cannot get rid of the prompt.

Yeah - my experience with the Stack Overflow moderation community has been uniformly negative too, they basically get in the way of the users.

Arbitrarily closing/rewriting questions, removing useful information etc. The site can be useful - but only in spite of the community tasked with running it (not because of them) and it makes it frustrating to use.

Did you try deleting it and asking it again, rewritten in a way that makes it totally clear why it isn't a duplicate?
I work for Stack Overflow: it might help to know that the prompt isn't permanent; it will go away in between 4-14 days (as the votes or flags that triggered it age away).

We added that prompt because a huge number of people were asking questions that were either duplicates or were so poorly presented that the nugget of information that made them unique was obscured; either way, the asker wasn't getting an answer. It's been live for just under a year now, and the response has been incredible: more duplicate questions are confirmed by the askers themselves than are closed by voters; meanwhile, the number of people editing their questions has also gone up.

Sorry you had a bad experience with it, but this is part of the work we've been doing to reduce the amount of conflict and frustration on the part of both askers and answerers.

and frowns on those that might involve discussion

No, it explicitly forbids questions that involve discussion.

The point of Stack Overflow is (and to a large extent always was) to be the place for definitive answers (and their alternatives) to well-asked questions. It is not a place for discussions, ranked opinions, interesting conversations, or anything else that does not have a "right" or "best-guess" answer.

It so happens that many questions are interesting to the community of people who visit Stack Overflow, but that doesn't mean they are contextually appropriate. If you want a discussion, go elsewhere. This isn't just a "if you don't like it, leave" judgement: it's explicit in the design and mission of the site[1]. There are better places to discuss things, just not on Stack Overflow.

[1] "This site is all about getting answers. It's not a discussion forum. There's no chit-chat...Avoid questions that are primarily opinion-based, or that are likely to generate discussion rather than answers.", from http://stackoverflow.com/tour

(comment deleted)
SO is definitely a club, and the guys who spend all day on that thing are not necessarily any more knowledgeable than others, despite their score.

In fact, many of the most impressive developers I've gotten to know, like Rich Hickey and others, have low scores on the site. You can't judge the contributors by whether or not they know what they are talking about, just whether or not they are addicted to answering questions first before anyone else. And many of them just like the power they have over other users to close and moderate things, often in an unpredictable way.

That said, many of the contributors are genuinely helpful and the site has helped me tremendously in the past. But just as many contributors are narcissistic and think they invented both chickens and eggs.

Some questions apparently don't belong to StackOverflow, because its stated purpose is to collect provably correct answers, not based on (mere) personal opinion.

OTOH there is definitely a need for a forum for the questions that get closed on SO but collect a huge number of upvotes. These are important questions and answers, people want and need them, and keep asking and answering them.

One important question is whether the approach to the site governance used on stackexchange sites would work on such a forum.

Quora tries to somehow serve as such a forum, but it lacks the focus of SO.

Indeed. Quite often I google a problem and the first result is a StackOverflow link. But, there's no answer. Someone asked about the same problem and got shut down by mods for some silly reason. Now, if there are other search results that look like they could give me an answer, I simply avoid the SO links.
I was discussing this yesterday with some people on IRC, and thought of writing a blog post about this myself.

Despite me being a very experienced programmer (I started to learn coding when I was 6 years old), I find SO extremely hostile.

Examples: One question of mine from 2010 got vote closed in 2014 (yes, people will hunt down questions even that later!) and now has vote deletes, also the same question the most upvoted answer is a snarky answer (copy paste of the answer: "You can't eat your cake and have it too.")

Recent questions: They all get downvoted and vote-duplicate even when they aren't.

I made some questions about RDTSC, people kept arguing with me about how I was doing something wrong, my CTO is retarded, or that I was retarded, or whatnot... and all I wanted was to fix some games (RDTSC behaviour changed from counting CPU cycles, to count whatever arbitrary frequency the hardware wants, this break old games that rely on it counting literal CPU cycles).

Another was when I asked details about some bizarre behaviour of Objective-C in recent versions of XCode, people said it was dupe (not exactly), that I was retarded, that it was all in the fucking manual, or that I could google it, and noone EVER replied with a single official answer.

I asked then on Quora, found out that XCode DO have non-standard behaviour (ie: stuff that ins't in Obj-C standard, and ins't in official distribution of LLVM), and that the Apple manual is wrong, thus no wonder why I wasn't finding the info on the manual or on google.

I asked about these issues on Stackoverflow Meta, got attacked, downvoted, deleted, etc... no meaningful discussion.

I am impressed that some people went to great lengths to argue with me without posting a proper answer, one guy even wrote something I considered an answer in the comments, but lacking details, I asked him to expand in an actual answer so I could accept it, and he replied in the comments: "Nah, that would be a waste of bandwidth."

This article fails to notice the primary problem with people learning a programming language.

Just as with a real language you learn the highest amount of material by absorbing explanations and expressions by qualified users of the language; not by immediately trying to form sentences as soon as you know 5 words.

A user of a language only becomed a skilled user when their mind contains a large enough corpus of absorbed expressions to imitate and combine.

IOW: Yes, the newbie does need to read the manual first. And after that some working code. (Though admittedly many manuals are crap and recommending a good, useful and fitting manual is a skill in itself that is lacking in many professionals.)

I'm not sure your analogy between programming languages and spoken languages supports your point. Pretty sure the best way to learn a new language involves lots of time practicing speaking. The analogy would then support trying to program as much as possible in a new language, rather than just reading books about it. Not sure if this was supposed to be a joke; I thought it was fairly well established that it's common and even encouraged for new programmers to start exploring and writing programs as soon as possible. Am I misinterpreting your comment?
> Pretty sure the best way to learn a new language involves lots of time practicing speaking.

It isn't. It really isn't. :)

While it is a big part, and necessary if you actually want to talk to people, in terms of time spent it is much more important to get the vocabulary in and as much exposure to expressions of the language by competent users as possible.

That's why people recommend travelling to where a language one wants to learn is spoken; not because one must speak it there as well, but because one hears and reads it there everywhere.

I dont think we're disagreeing. I don't suggest speaking practice to the exclusion of literary practice. In this comment you acknowledge the importance of speaking practice. That's what was missing from my reading of your first comment. I responded largely because I understood your comment to suggest (explicitly and through analogy) that new programmers study books before attempting to write code and interact with the community.

Cheers, sorry for the confusion.

Actually, i do. Completely. I acknowledge practicing is important, but attempting to write code before having gone through a full book and having read some real world code is only going to be damaging for a new learner.

Plus, newbies who refuse to actually read a book front-to-end annoy the ever-living shit out of help channel people, because they end up asking all the stuff that the book would explain fo them, and the chat people end up being nothing but an interactive and abusive book.

> Attempt to answer the question, or don’t comment at all. Don’t tell them to RTFM, Google it,

No, just no. There is no point to any of all this search technology and this accumulated knowledge if no one uses it.

Someone asking a question that is answered in the documentation or has been asked and answered over and over should be pointed at those sources. One of the most important skills anyone is going to learn in a technical position is finding answers to questions you have that have already been answered. The next important skill they have to learn is doing a little bit of your own research in understanding your problem.

This goes especially for places like StackOverflow which is not a discussion forum. It's value is diminished by asking and answering the same questions over and over.

EDIT: I'll mention the last part of the statement I quoted too, it's unfortunate the lumped the second half of the statement with the first.

> correct their grammar, or give your opinions about their choice of technology

Correcting grammar is not helpful in any way in this context. If you can't understand what they're getting at, ask for clarification. Nitpicking grammar is just being a dick.

Opinions about what they're using may have one very narrow use, if what they're using to do what they're trying to do is just so very wrong. And we're talking 'I'm trying to create a pure HTML page to run this Nuclear reactor' levels of wrong. Most of the time, you do need to keep it to yourself. Especially on sites like StackOverflow, which is not a discussion board.

I would say that the real help lies in between. You don't go out of your way to explain something that is explained somewhere else already. But, you can go out of your way to show the person where it is explained or even what to search for. Researching a problem on the internet is a skill that needs to be learned; a meta-skill, if you will. Whenever a developer has told me in the past to RTFM, aside from the rudeness of this abbreviation, it really is no help. If they gently said, "the API docs for the UIViewController class, which are located <here>, shows the function in question, and how it is used." etc.
> Researching a problem on the internet is a skill that needs to be learned

Which will never be learned if you never have to do it.

I disagree. You can definitely be helped to learn how to do this. It is possible to show someone the technique of properly researching a difficult technical problem.
You can certainly show someone the technique. But it will not help if they don't ever attempt to put said technique to practice.

For a given... "repeat customer", I will eventually resort to search links, "What did you try", and then eventually "RTFM", "Google It", etc. - and intentionally not answering the question, to force them to go through the motions - if they don't appear to be doing so.

I think that's where the need for balance comes in. Lead them to how to find the answer, and provide guidance on how to interpret it...but if they want to be spoon-fed, tell them to go somewhere else.

I start out by showing them how to describe their problem in a way that's easily understood by a more experienced programmer. Next would be to tell them some search terms likely to answer their question. If they're still stuck, ask which part is the most confusing and work through that a bit at a time.

Of course...this all can get very frustrating. After answering the same questions a dozen times, I often let someone else answer.

Agreed. This is one of the things I appreciated about the now-defunct Google Answers. The professionals there would not only answer your question, but also include a set of steps that they tried, including Google search terms and such. This let you understand their thought process, the things they tried and the places they looked in, as to how they found the answer.
My approach is to answer the question and then tell them they can find the answers faster in the manual/docs.
The problem with this approach is you make it easier to ask the question than search the documents.

Your doing all the work, they just have to sit back and let someone else do it for them.

Not really. The main reason I hate asking questions online is because of the delay in getting a response. Even if I could get the correct answer on a silver plate every time, I'd prefer finding out in a timely manner by myself so I can get on with the thing I'm doing.
> Someone asking a question that is answered in the documentation or has been asked and answered over and over should be pointed at those sources.

I think linking them to a directly-relevant resource like an answered StackOverflow question or a specific documentation page is a totally valid way to answer the question. My impression is that the author of the article is referring to replies that simply state "Google it" without providing any useful links, search terms, etc.

In fact, sometimes I do answer with lmgtfy.com. But in such an answer I always include a helpful answer. Why?

- Either they couldn't find it. Then my answer will help. - Or they were to stupid/lazy to search. Then they're not worthy of my ire.

Regarding grammar/typos on Stack Overflow, often I try to simply edit the question to fix it. That might be considered passive/aggressive, but I just want it to be pretty. :)
If you can provide links to the relevant portion of the documentation or a relevant google search result, I think that's fine. But merely telling someone "read the manual" without adding anything else serves no purpose whatsoever.
As an intermediate developer I still have trouble with many source documentation. . It's a problem of information density- I don't know where on the page to get what I need, or the documentation examples have very basic implementation that don't cover my use case. And as a beginning developer you don't have the library of personal experience to work-around use cases.

Usually I have to find a third party simplified documentation sites, like dotnetperls or ss64, which have easy to read documentation.

Besides, at least with SO, it clearly states to search before you ask. The user is only asking because searching wasn't successful. An answer of "go search more" does not help the asker.

There's also the problem that so much documentation is just straight auto-generated javadocs or xmldocs, with nothing beyond what you'd get looking at the method signatures.

MSDN is better than most, but there's still a ton in there in places that has no examples or usage information, no indication of what valid inputs are, no indication of any other external state that could derp things up.

learning how to read technical documentation is a skill in its own right, and we all need to practice it in order to get good at it.

obviously some documentation is better than others, and asking specific questions to fill in the gaps where documentation is unclear is a good thing to do.

however, programming is very much driven by learning how to find the answers to problems on your own. often those answers are in the documentation but not always. sometimes they haven't been answered by anyone before and learning how to extrapolate from documentation to understand the behavior of programs in new situations is a skill that has to be developed.

and of course, ultimately, the final authoritative document on how a program will behave is the code itself. there are times when you have to read source. hopefully those are rare occasions, but being capable of doing it when necessary is yet another skill that needs to be developed. reading through an unfamiliar codebase is difficult and requires practice and experience.

all of these technical reading skills need to be practiced. beginners frequently make the mistake of denying themselves opportunities to practice those skills by simply asking for someone to tell them the answer.

> all of these technical reading skills need to be practiced. beginners frequently make the mistake of denying themselves opportunities to practice those skills by simply asking for someone to tell them the answer.

These are skills that develop over a programmers career. And when you have issues like getting a for loop going, or if you can have a for loop in a while loop, then reading the documentation is not going to be very useful. Again, information density and assumed level of programming competence in source documentation won't help if you are trying to figure out fundamental programming issues.

Should people read documentation, of course, but the usefulness of documentation increases with programming ability.

I agree. Total beginners do deserve more patience and more explicit instruction. Novice and Intermediate programmers who have learned the basics and are looking to learn more are the ones who really need the practice in "learning how to find your own answer".
What you do when the accumulated knowledge, is wrong?

Example: I've been getting hostile responses on StackOverflow when asked about RDTSC and MS QPC, and about some strange behaviour of XCode compiler.

Found out that both MS and Apple has wrong documentation, and that XCode compiler indeed does things differently than the official LLVM distribution (And way different from the published Obj-C standard).

How I am supposed to know that without asking someone that already knows?

   > How I am supposed to know that without asking 
   > someone that already knows?
A good idea is to ask the answerer how he/she figured it out.

Usually when I run into compiler bugs, I look at the assembly output to make sure.

I don't know why you were messing with RDTSC, but usually when I need a high resolution timer I use clock_gettime() or gettimeofday(). The former doesn't work on OSX, but the latter does, and mach_absolute_time() or clock_get_system_nanotime() seem to work on OSX if you really need them.

I think you are misinterpreting what the author means. I understand the author to mean this is good:

"Python strings have a method, rstrip, for that. You can read about it here: https://docs.python.org/3.5/library/stdtypes.html#string-met.... I find Googling 'python docs x', where x is what you're looking for is a quick way to see if Python has that thing included in the standard library."

And this is bad:

"It's in the docs, google for it."

And even worse, a literal:

"RTFM."

I understand the author to mean that if you want to say the last two things, don't bother.

Continuing on your point, one thing I've found with talking with less tech oriented people is that Googling is very much a developed skill. If you don't have the foundation of knowledge to understand what question you're actually asking it becomes very hard to RTFM even if the earnest desire is there.

In my experience, when a more junior co-worker has a question outside my immediate expertise, I find my self searching for what they ~meant~ not what they are actually asking.

I think a lot of disconnect in the community comes from this acquired auto parsing.

Nothing's more frustrating than Googling a problem and finding that the first result is a post from someone with the exact same problem as you, with the only response being "Google it yourself".
One of my biggest issues with SO is questions that have been answered but the answer is wrong. Updating the answer to be correct is REALLY hard, especially when the user was a one off user, who asked a very good question. They just got a bad answer.

Another issue I see with SO is, a question gets answered then the language advances and boom the answer is now invalidated. So someone asks, "Hey I know it's answered here but I think there's a new answer, or has something changed." Those questions get shut down too which is frustrating.

I think SO should be a source of knowledge but it doesn't handle language versions well or out of date questions well. It doesn't even handle wrong answers well.

What's worse with SO is someone (new user usually) posts a good question. Someone gives a shitty answer that gets them by and it gets accepted. 10 people come along with correct answers, but nothing you can do to switch the "accepted" answer.

The bounty program is also bullshit. I 100% agree with the fact that the bounty should not be returned, otherwise dishonest users would just not award a bounty on the correct answer so they could get their karma back.

The 50% auto award of bounties to most up voted though is just garbage. I have had answers that are completely off base that extremely quickly get up voted and they end up getting the bounty. I'm pretty sure there is some type of voter ring style up vote fraud happening on bounties; at this point I doubt I will ever offer a bounty again since it typically no longer helps in me to find relevant answers.

> Attempt to answer the question, or don’t comment at all. Don’t tell them to RTFM, Google it,

I think the point is that if you're going to tell them to RTFM or google it. you should also attempt to answer it or point them in the right direction. but don't tell them RTFM or Google it and nothing else. That doesn't help. A lot of time people have already tried that and don't know enough to know where to look or what to search. At least tell them to try googling XYZ or tell them check section whatever in the docs.

> No, just no. There is no point to any of all this search technology and this accumulated knowledge if no one uses it.

And here we have a prime example of why beginners find the programming community to be so abrasive, and worse, it's sitting at the top of this comment thread.

Ask yourself, would this be the answer you give to a 12 year old girl who's taken an early interest in programming? Or a single mother who's trying to switch careers to improve her lot in life? Or your own mother, for that matter? Is it really constructive to be so abrasive?

I'm starting to understand why we have such a problem with diversity in our field. This type of response is, in no uncertain terms, the response of a bully.

Pause for a moment. Try to remember what it was like when you were first starting out with programming. When "the fucking manual" was actually really confusing and loaded with domain specific terms, acronyms, and syntax. Can't remember a time when you didn't learn something immediately? Fine, step outside your world of programming and try to recall any painful memories you might have about trying to learn something outside your area of expertise.

Ever go to a gym and ask someone how to do a basic lift only to be scoffed at? Ever been to a foreign country and have someone berate you for not understanding how to navigate through some strange process or not knowing how to speak their language well enough? Perhaps you have, and it hurt, but you brushed it off and continued on. That's great for you, but not everybody is like that. A lot of people get discouraged and never continue with that sport, or with traveling, or with programming, and it's tragic because they might have otherwise excelled at those endeavors.

So true. And not just thin skins that get discouraged. After 25 bullies, you stop asking questions. Eventually you hit a brick wall and try asking again, just to meet more glib or hurtful answers. You get discouraged by the death of 1000 cuts. You stop.
(comment deleted)
Yes, it is the answer I would give to a 12 year old girl.

First off, why does your 12 year old have to be a girl? You are spouting off about diversity but you basically just used the stereotype that teenage girls are going to cry if you give them the hard truth. Why do we have to treat single mothers with kid gloves? Guess what, diving through some docs is a lot easier than anything a parent has to put up with.

3 of the 4 interns at the company I work for were women last summer, and they kicked ass. While they weren't 12 years old, they were young, and I had no issue telling them to start at the documentation.

There is a massive difference between "read the fucking manual" and suggesting "even if it takes longer, you will be better served starting with the documentation and working through that than googling or using stack overflow". One is bullying, one is teaching.

I always teach my interns to start with the docs. Give the docs 30 minutes before you Google or Stack Overflow. Give that 30 minutes before you ask a senior engineer. Struggling through it is part of the process of learning. The things you learn by going through the docs will help you later.

Or the shorter version, I want to hire someone that can answer Stack Overflow posts not find them.

Re: your shorter version... Answering questions tends to be a pretty solid way to learn about a topic. I've talked to quite a few people whose experience on Stack Overflow was that they learned more about the topic they were working in by trying to answer others' questions than by asking questions themselves.
(comment deleted)

  > I always teach my interns to start with the docs.
  > Give the docs 30 minutes before you Google or 
  > Stack Overflow. Give that 30 minutes before
  > you ask a senior engineer. Struggling through 
  > it is part of the process of learning. The 
  > things you learn by going through the docs will
  > help you later.
This is a skill I wish more programmers had.
Why do you have to take offence at everything ? Have SJW and feminism corrupted our thinking so much so that we need thought policing every single time someone says Girl or Women ?

Tech world is better off without people like you.

> would this be the answer you give to a 12 year old girl who's taken an early interest in programming? Or a single mother who's trying to switch careers to improve her lot in life? Or your own mother, for that matter?

Yes, yes, and yes. The best thing you can do for someone is show them their questions already have been answered because they have access to a massive, growing body of human knowledge.

> Is it really constructive to be so abrasive?

It's amazing that telling someone their questions have already been answered is abrasive.

Now, I am going to be abrasive, because I'm not talking to a beginner.

> Try to remember what it was like when you were first starting out with programming.

Ya, someone was going to to bring that up, like there is some sob story everyone has not being able to read documentation.

I'm not a programmer. I have to look up all sorts of beginner stuff all the time. Always have because I don't spend a lot of time getting better at it. I don't ever have to ask questions, and I haven't from before StackOverflow or where ever programmers asked questions before, because any question or issue I had had already been asked and answered (over and over). My problems have been encountered by everyone else at the same level of experience as I am. And because I do search for answers, I don't have to wait for someone to come along to answer.

Answering the same questions over and over without telling them they could have found the answer themselves is giving a man a fish. Your not learning simply being told answers.

> Ever been to a foreign country and have someone berate you for ... not knowing how to speak their language well enough?

No I speak English so I expect everyone else to as well. This is apparently appropriate behavior since it is appropriate to expect everyone else around me to answer ever question I will ever have without ever having to do any work or research of my own.

Saying "Google it" or "RTFM" isn't showing them anything, it's brushing them off. Unless you are talking about actually linking them to a page that contains the answer.
> Ever go to a gym and ask someone how to do a basic lift only to be scoffed at? Ever been to a foreign country and have someone berate you for not understanding how to navigate through some strange process or not knowing how to speak their language well enough?

That's not asking, that's demanding that someone teach you. Its a brazen form of entitlement that completely disregards the state of the other person.

In regards to the gym, I don't go to the gym to wait around to randomly help some other person with their lifting techniques. I squeeze in going to the gym before or after work, to try to get in my exercise before I get home, so I don't die at 40. Don't be a dick and expect me to drop everything I'm doing because you don't know what you are doing. I am, literally, not here to help you.

If you really want somebody who is waiting around to help you, then your in luck: They are called personal trainers, and you can pay them to help you! If you don't have the money do that, then (god-forbid) you google it or get a book from the library and make a best effort on your own before getting pissy at me because I have other priorities than to make your life easier/less emotionally distressing.

I think the point he was trying to make was don't be a dick. You can deny someone a gym lesson if you don't have time, they shouldn't be too upset about that. Or at least point them in the right direction.

And I think it's a lot easier to be a dick online, which is why programming in particular has a lot of these situations.

> And I think it's a lot easier to be a dick online, which is why programming in particular has a lot of these situations.

I think it's a lot easier to be perceived as a dick online, too, and that probably accounts for something like an equal share of the frustration that people walk away with.

On one hand the going to the gym example is not a perfect analogy - the gym is a public place, and being accosted by some random person asking for help could be off-putting. Someone posting on stack overflow is not directed at anyone and is like a classified ad, it's not directed at you. You can easily ignore it as opposed to someone walking over to you explicitly asking for help.

However 2 things - #1 the bile you have for those asking for help is off-putting. #2 It takes more effort for someone to respond to a question and tell them off than it does to ignore it. And some of us in the programmer community would rather take the time to make a derogatory comment instead of either ignoring the comment or actually helping that person. THAT is the sign of a bully.

On one hand the going to the gym example is not a perfect analogy - the gym is a public place, and being accosted by some random person asking for help could be off-putting.

Except the culture of gyms, at least among most people to spend a lot of times at gyms and take fitness seriously, is to be helpful and charitable to others. Almost everybody I know who does any weight-lifting or anything related is always more than happy to help a n00b out if they have time.

Refusing to help someone if you're literally too busy is one thing. But a blanket attitude of "I'm not here to help you, ever, under any circumstances" is a pretty dick'ish position by the standards of many gym regulars. Of course it's your right to refuse anybody you want...

I do go to the gym, but I'm no expert. I was not aware of this. Thank you for posting this.

I guess what I was trying to say is if you were in the middle of a set and someone asked you for help I would be more understanding to the person being asked if they were annoyed about being bothered.

On the other hand you have to go out of your way to be an asshole on stack overflow, and yet it happens all the time. No one is demanding your attention or interrupting your code time to respond to a post on SO, and yet so many know it alls cannot help themselves by taking a swipe at the person posting a question. I just hate that attitude.

Maybe I should spend more time reading questions on SO and posting helpful responses.

I guess what I was trying to say is if you were in the middle of a set and someone asked you for help I would be more understanding to the person being asked if they were annoyed about being bothered.

Fair enough. There is an etiquette to things at the gym as well, and it may take a while to pick up on some of that stuff. Which is, I guess, the same as the Internet in some ways.

After years of teaching and mentoring, I love helping those "asking for help". See my stackoverflow profile if you want. However, also after years of teaching, I am very abrasive to those "demanding assistance". I find that subtly is often drained out of conversations regarding the responsibility of the teacher and the consideration of the learner.

"Can you help me understand why this doesnt work?"

...is very different from...

"It looks like you know what you are doing, fix this for me."

..even though the outcomes are often very similar.

Per padseeker's sibling comment, asking random strangers for help at a gym is not an analogy because there's no social expectation that you'll be asked for help or that you'll provide such help just by going to the gym, whereas forums are places where you're expected to ask for help.

The relevant comparison would be to the gym's front desk. So, extending the metaphor:

1) Yes, it would be offputting if you asked them about lifts there and they just scoffed.

2) Yes, I have asked for help like this before ("where's the first aid kit, I'm bleeding?") and had that treatment, and it sucked.

3) But being pointed to the appropriate resource is a very reasonable response, and it's analogous to (a precise variant of) RTFM. It would be like:

"How do I lift?" -> "Oh, ask one of the people in red shirts."

"What are the rules?" -> "Oh, it's on that sign over there."

Not much different from:

"How do I make a website?" -> "start from this link"

"How do I make my DB queries faster?" -> "search for database index"

I would like to, as warmly as possible, point out the blind spot in your response. Why is the gender/sex of the person asking important? I think your response would be better as "would this be the answer you give to a 12 year old ... Or a single parent ... or one of your own parents?" Your response appears to insinuate that females are more delicate than males and unable to handle abrasiveness. That is all.
> Ask yourself, would this be the answer you give to a 12 year old girl who's taken an early interest in programming? Or a single mother who's trying to switch careers to improve her lot in life? Or your own mother, for that matter? Is it really constructive to be so abrasive?

An important bit of context is implicit in both your comments, and I think the context is different, which is where some of the differences in your stances are.

It's very important to know the purpose of the asker when answering a question. If the little girl or a single mother are trying to accomplish a single thing, right now, and their purpose is not to learn, then yes, just answer the question or don't bother commenting. If their purpose seems to be to learn, then teaching them both skills on how to better teach themselves and on better ways to approach the problem are ultimately more useful.

Does it really help that single mother trying to switch careers more to be told how to fix her HTML parsing regex[1], or would she be better served with a suggestion on a library that provided a more sane way to accomplish that capability? Of course, as a community we could do better at being more civil, and providing both answers, but if ever there was a place where the "teach a man to fish" parable fit, this is it.

1: Not to start an inflammatory discussion on that. I regularly use regexen to parse well formed specific HTML pages. The trick is knowing where it's appropriate and where it's not.

>Ever go to a gym and ask someone how to do a basic lift only to be scoffed at? Ever been to a foreign country and have someone berate you for not understanding how to navigate through some strange process or not knowing how to speak their language well enough?

Ever asked a stranger out and been shot down harshly?

Part of the reason some people learn to respond this way is because there are so many people bothering them. One or two wouldn't be an issue. It may even be a small boost that they turn to you. But when it is person #6214, with the same problem, and the same solution, which is well documented for someone out there, it gets hard to keep responding kindly. In the same way that you aren't likely to be as nice saying no to the #6214 person interrupting you at a bar to ask you out.

The problem is, person #6214 doesn't know they're person #6214. If you're making yourself available for questions then you don't get to bitch about the questions you receive. It'd be like a person working an information booth getting angry at someone asking where the bathroom is.
Often they don't. It is one of those situations which doesn't seem to have a great answer. Being equally nice to everyone does come at a cost that you shouldn't be forced to pay, but the people annoying you often have no intention to do so.
> Ever asked a stranger out and been shot down harshly?

I don't think this is a great example. Just because it happens doesn't mean that's a great response, either. It probably took courage for someone to work up the guts to ask you out. Even if you have no desire of accepting their offer it's just common decency to decline with respect and not make them feel like absolute crap while doing it. The same thing could be said for answering questions - except it's even easier, because when it comes to a question StackOverflow you don't have to even respond to not be an asshole. If someone doesn't feel like it's worthy of their time they can just move on and not say anything at all.

>Ask yourself, would this be the answer you give to a 12 year old girl who's taken an early interest in programming? Or a single mother who's trying to switch careers to improve her lot in life? Or your own mother, for that matter? Is it really constructive to be so abrasive?

It depends on what "RTFM response" we're talking about. if it's simply,

1a) "Duh, read the docs" 1b) "RTFM"

then yes, it's abrasive and experienced programmers should cut it out. But we sometimes get the same flack for

2a) "Ah, that's called the controller and section 7 covers it."

2b) "Oh, I see. The term you're looking for is database indexing -- you should be able to get some good hits with that search term. Or 'add mysql index' for your case."

If someone is really like the diligent younger-me programmer you're referring to, they'll have already explained why the manual doesn't help.

You have to be careful not to equate the two kinds of levels of work (though obviously, politeness is always important, regardless of their level of effort).

I do remember how I started programming. I had no computer and no access to it when I got intereseted in it, so I just read every article I came across. Later, I started to buy the books I came across—that was before the www. So yes, I firmly believe, that you need to try yourself, and try hard. There was a quote, I cannot find the source any more, but it was going something like this: like in mountaineering you should not help begginers to avoid them being killed higher up.

Btw, do you realize that your remark about diversity is sexist by itself? It assumes that females are not able to cope with the same conditions males do.

> I'm starting to understand why we have such a problem with diversity in our field

That would be true if men were treated any differently. If anything they are treated worse.

Kid gloves can preserve flighty women in IT, but it's not the reason there's so few.

Not sure why you chose girls/women for all of the examples here as if to cast them as extremely delicate butterflies that can't cope with the toughness that is real life.

As a father of 3 (11 yo girl, 9 yo boy, 6 yo girl) who actively works to teach all of my children programming (yes even the six year old); if someone is that delicate whether male or female then programming is not the right field. Any real programmer is going to eventually venture into unknown territory where they are unable to find an answer and they must learn to overcome.

My 11 year old daughter and 9 year old son are both currently learning Java (so they can do Minecraft mods). Our process looks like this.

1) Dad assigns chapter or chapters to read and implement lessons.

2) Child reads chapter twice. Then child reads chapter a third time while working through the exercises.

3) If child encounters and issue they are told to search the book for an answer.

4) If at this point they still have a problem they can't solve they are allowed to ask me. At that point I NEVER tell them what is wrong. Instead I ask leading questions that helps them to find the answer on their own.

Personally I wouldn't leave a RTFM comment because it is a waste of time and effort for all parties involved. However, if people leave the field due to these types of responses I think they are not well suited to being a programmer and the world has plenty of other great jobs to fill so they should consider pursuing a different passion.

You can see that there's a difference between saying "Google it" and saying "You're saying 'foo', but you probably want to Google 'bar'"?

Or that there's a difference between saying "RTFM" versus "This is in the manual in the section 'FooBar' - what are you doing that isn't covered there?"

Because too many SO comments are simple RTFM responses.

One thing I see a lot of developers (new and experienced) do is attempt to get around having to really understand the language and libraries they are working with by constantly googling whatever problem they are working on at a given time and assuming there should be an example or blog post out there somewhere that will show them exactly what they need to do.

Of course, when the code they find is incorrect, outdated, or not easily applied to their specific situation, they lack the understanding to figure out what they need to do to fix it on their own, so they ask.

This of comes out in the form of a question which, to anyone who has taken the time to build such an understanding, smacks of laziness, hence all of the "RTFM" replies.

And in that case, RTFM is the absolutely the right answer. They need to slow down, read the problem code, figure out what they don't understand, and learn. Maybe they need to slow way down and learn about some of the constructs of the language they are working with. Maybe they need to read the docs for a particular library or framework to figure out what abstractions it relies on. Maybe they just need a high level view of the API so they will know what all is available to them.

Could this be communicated in a more friendly way? Sure. Is it the responsibility of the community to do that? I don't know.

tl;dr RTFM.

> Opinions about what they're using may have one very narrow use

My general rule of thumb is the same I use for HN, if you want to comment about something non-related, or make an observation that isn't really relevant, make sure to contribute as well, preferably first in the comment. For StackOverflow, that would be offering a solution, or help in some way before offering as additional observation that "if this were me, I'd do X". For HN this is most commonly useful when making a joke. Unless your joke is insightful and relevant,you're best including some additional content contributing to the discussion at hand.

>No, just no. There is no point to any of all this search technology and this accumulated knowledge if no one uses it.

Is there a manual? Is it searchable? Is it up to date? Is it common knowledge or has it already been pointed out? Was it written for programmers or does it require business/domain knowledge to understand?

You could theoretically plop someone with the ability to read English in front of a computer with internet connection and they could learn just about anything out there, but a little guidance is going to massively improve their productivity.

The way we should handle this at work is when someone comes asking for a fish, go on a little fishing expedition. If they don't get the fish themselves, provide them one. Keep an eye open for the ones who are learning and the ones who don't care to learn and respond accordingly.

Outside of work it has to work a bit differently for a number of factors. You don't have nearly the obligation to help others work together, there are far more people, there is less direct communication. I'm not sure if there is a better rule that doesn't end up being abrasive.

> No, just no.

This is exactly why I just learned as much as I could on me own. I'm inviting downvotes by saying this, but you're being a dick. That's the point of his blog post, don't be a dick. I definitely agree that new people should come in and.. read posting guidelines and be receptive to feedback. The problem is that if we want them to be receptive.. responding like this will not help

> One of the most important skills anyone is going to learn in a technical position is finding answers to questions you have that have already been answered. The next important skill they have to learn is doing a little bit of your own research in understanding your problem.

Exactly. And as the article was trying to explain, this is a skill which needs to be learned like any other kinds of skill.

Shouting RTFM means you demand that skill from the poster or even insult them for not having it - what you're not doing is giving the poster any help or encouragement in developing the skill.

A better solution would be to link them to the relevant previous discussion or documentation page or telling them what to google. This way you can actually bring the poster forward without causing duplicate discussions.

Except what I find tends to happen is:

1. You google the problem and find results from stack overflow and some out-of-date blog posts from 4 years ago.

2. You choose stack overflow!

3. The stack overflow question most related to the one you have is closed as a duplicate. The duplicate's answer is: "look at this manual: link" but the link is to some .edu website that doesn't exist anymore, or is for version 0.7 on a unix system and you're working on version 2.5 on windows.

In conclusion:

1. The world changes, so the same question may have different answers depending on when you ask it.

2. Having multiple different representations of a problem makes it easier to search for it correctly the first time, not harder (even if they all just link to one answer.)

Does this generalize to diversity? Friction between people of diverse background and mindset.
StackOverflow is a good place for intermediates and up. IRC is a better place for beginners, but truly if people are just starting out they need a dedicated teacher, or they need a good manual / tutorial that they read front to back. Most beginners don't read the manual / tutorial front to back; they try things immediately once they've read about them and their code understandably break. In this case they need a dedicated teacher, a person they can ask uninformed questions to. StackOverflow is the wrong tool for that.
Speaking from my experience as a self-taught programmer, IRC convos generally follow the same trajectory as OP specifies.
As a kid, it took me a long time to learn to program because I was constantly fighting the very things that this article brings up. You can chalk it up to youthful arrogance. When I dropped my attitude and realized how wrong I was (around age 17, when many kids finally do this) I finally became a good programmer. I tried for nearly five years as a kid, but my naievete got in the way.

Programming requires a nearly dogmatic adherence to methodology, logic, and best practices, to be done well. What the article describes as unfriendly towards beginners, is really just an attempt to bestow upon beginners a thought process that needs to be instilled to be successful.

I agree 100%. I run into this every day.

The people who give up their ego and follow methodology, logic, etc. get things done.

The people who have an attitude don't get things done. Even worse, they often accuse everyone else of being arrogant and unhelpful.

On the Open Source mailing list I administer, I've had to resort to banning these people. Ask a question? OK. Argue with the answer? Not OK. Tell the people who are helping you that they're assholes for saying you did something wrong? Ban.

The problem is a lot of people misinterpret what StackOverflow is supposed to be - a repository of programming-related questions/answers that are useful to more than one person.

Most questions asked these days are duplicates, syntax errors or are answered in the relevant online documentation - I really think there should be online courses on 'How to find the right thing to search for' because it would help newbies so much, and prevent them from having to interact with the mean/rude side of StackOverflow (which is proving hard to get rid of despite all the initiatives).

Already done, and it's apparently RFC 1925 §6 - turtles all the way down. Now the problem is one level down the stack (pun not intended), with "newbies won't read http://stackoverflow.com/help/how-to-ask and get offended when prompted" instead of "newbies don't know how to ask and get offended when prompted".
Some suggestions for the beginner asking questions:

1. Make it clear that you are a beginner and that you're eagerly learning. Otherwise it's easy for someone to assume that you're a more experienced developer and answer accordingly.

2. Don't ask people to do your homework assignment for you.

And some suggestions for the experienced devs answering the questions:

1. Don't assume that the OPs first language is the language of the forum.

2. Don't assume that the OP is an adult, lots of kids are learning programming these days.

(comment deleted)
SO is not for beginners, because beginners do not know enough to ask the right questions.
I joined StackOverflow when it was about 9 months old, it's completely different now and I would not recommend it for new developers. The vast majority of moderators and people who close questions are among the worst dweebs I have ever spoken to online.

They have some minuscule, irrelevant taste of power, and it immediately goes to their heads. And in their eyes they are correct.

Instead, opt to go to a forum. For example, if you develop with ember go to their forums, meteor, go to their forums, elixir? They have a slack channel. Etc. Anything but stack overflow.

It's almost laughable that there's no work to identify the most common mistakes beginners do and let compilers etc. explain them. You probably could catch most of them.

It's also ridiculous through how many hoops you have to jump to start programming. Take python, which is touted as a begginner friendly programming language. First you need to install it (most people use windows or os x, which both don't have python 3). Then you need to get an text editor. You're recommended to use the python repl, but it lacks syntax highlighting and autocompletion.

There actually has been quite a bit of work on this front. DrScheme, for example.

It's a very, very hard problem, though. And computers cannot, in general, figure out what's wrong with broken code.

Sure, it's a very hard problem to solve. It's much easier to warn against 80% of potential errors - the algorithm isn't "smart" enough to fix them, but is smart enough to give the developer a push.
Seriously? Most IDEs do precisely that, and compilers do explain them. Eeeeexcept...their explanations are called "warnings," and ignored as such.
This discussion is making me think that Stack Overflow has a solid opportunity to rethink how their architecture/approach could be redesigned to minimize questions that get closed due to redundancy or other reasons. One could indefinitely kick the can by saying the user should have known how to use SO better, but the questions keep popping up and getting closed. I for one personally have only ever found useful data downthread in closed questions. You could say that means the design is working, but it would still seem like a ridiculous, even risible design.
A worthwhile article; thanks. I do think it could be improved with a link to esr's "How to Ask Questions the Right Way".
This is just a tip of the iceberg. Junior questions on stack overflow and general attitude towards learning people how to work with the vocabulary and the basic concepts are sort of addressed by many great tutorials (codecombat.com <3), podcasts and in general helpful people that are out there. But try to even formulate an advanced question, like "how should I fit this idea into my existing 200+ classes system". Even if you describe your problem in less than one page of text, there is no place to ask how to design stuff. I suspect most people just make enough mistakes to become this senior architect person who gets to say "oh yes, we did try that in the 70s, it won't work because X".

</rant>

Perhaps that is another issue - "MYYYYY question was cloooosed, that is a MORTAL INSULT TO ME" instead of accepting that mistakes do happen, and even I make them. Did I go out to find knowledge, or did I actually want a pat on the head for being a good schoolboy who never makes a mistake?

This is a (mostly subconscious) theme in most of the SO flamewars: "they are attacking me for trying to find out the Truth" vs. "I'm trying to get to the root of his question, and he's just being stubborn" (I have seen such pointless bickering from both sides; hopefully I have learned something from that?).

I guess I'm going to be the asshole today :

If someone lets a few rough edges on SO dissuade them from learning, they probably didn't care for any of this to begin with.

I mean, every single one of these traumatized "beginner" comments were sourced from reddit - where there are at least a half dozen subs that would gladly accommodate questions unsuitable for SO.

On a related note, I also don't understand why there is a constant push to coddle beginners to increasingly absurd degrees. It has literally never been easier to learn to program. There are hundreds of resources available to the aspiring learner - more so than any other field I'm aware of. Yet somehow the anal retentiveness of SO is the problem here? Come on.

"I also don't understand why there is a constant push to coddle beginners to increasingly absurd degrees."

Apply this perspective beyond software development. Law, medicine, firemen, teaching a kid to play baseball. Why do we continually look at software development different than other acquired skills?

To answer your question directly, it is my opinion that the layers of abstraction that we have today, and that continue to grow, put those new to software and computer science at a huge disadvantage. They have a very long haul. And yet, demand increases for these skills. Yes, we should coddle to the best of our ability.

> Apply this perspective beyond software development. Law, medicine, firemen, teaching a kid to play baseball. Why do we continually look at software development different than other acquired skills?

Well, that's a good question. What do you think it takes to break into law, medicine or fire safety? I can assure you that being willing to put in significant work, and tolerating adversity, is a hard requirement for each of them.

Much of my family is in medicine, and I used to work in law - both professions are absolutely merciless in comparison to engineering. The expectation that would-be [doctors, lawyers, bankers, etc] put in the work is unwavering, and the professionals in those fields can be huge dickheads to boot. Yet, they somehow manage to attract more than their share of candidates.

While too much coddling is probably not helpful, neither is being overly abrasive because "back in my day that's how we learned it".

Holding on to old teaching methods "just because" isn't the right answer, nor will it help the programming profession in the long run.

Are you addressing me, or just speaking in generalities?

Teaching and pedagogy is a broad topic, and there are certainly things that can be done to improve most existing models. However, a willingness to tolerate some modest level of adversity will remain necessary.

> If someone lets a few rough edges on SO dissuade them from learning, they probably didn't care for any of this to begin with.

Or perhaps people have different levels of emotional sensitivity (for environmental or genetic reasons). I detest conflict and go to extremes to avoid it; thus I try to stay away from situations that entail a lot of negative interpersonal interaction. If I was just now learning to program, an abrasive comment on SO would not turn me off to programming, but it would make me dislike certain types of people more, and in the future I would steer clear of that particular website.

> If I was just now learning to program, an abrasive comment on SO would not turn me off to programming, but it would make me dislike certain types of people more, and in the future I would steer clear of that particular website.

This actually describes me fairly well. I began seriously pursuing programming as both a hobby and profession about 6 years ago. I was turned off by SO's somewhat prickly community, and to this day only use it as a search engine.

That's just it, though : SO is just SO. As valuable as it is, it's still only one resource among many. That was true then, and is even more true now. What your comment helped me internalize was that one of my principle objections with the OP is that the scope is overly broad. It's not so much about "beginners vs professionals" as it is about "Stack Overflow vs the uninitiated". It's perfectly legitimate to write about how to correctly ask questions on SO, but framing it as some sort of macro issue concerning the programming community at large feels wrong headed to me.

While it address the situation on stack overflow, this is a problem in general with communities:

  -It's my opinion that with enough time communities are 
   driven and shaped by the leaders this has at least the
   following two aspects
    -The leaders (assuming they were elected or emerged from
     the community) will strength the core values of the
     community (look at it as the identity).
    -Previous statement can also be read as: they will make
     everything they can from prevent the community to 
     become something they don't like
How do you prevent people with strong insert here characteristic or property, e.g. technical background and therefore after some time taking leadership from driving the community that way?

On the other hand (and I speak for myself here) when I started learning programming I were extremely frustrated with my first Java class for a desktop application, you copy paste something, modify it and then got into a situation where you ask for help.

Years later I did understand all the reasons why my approach was incorrect:

  -you can place logic inside the class or outside of it
     -You later learn that code should not repeat itself
      something called *one source of truth*, how that
      drives code from instances to the parents from where 
      it its inherit
        -you later learn or discover that; that's the same
         principle behind normalization on databases
          -then you learn that behavior respects the same
           rules and hence interfaces and contracts
             -then you can understand easily mef and maf for
              example
                -....
for that basic point above I would have need to be told to read and learn about a lot of things, if you get to the other side, the simple question becomes a really long explanation and tutorship about something.

Maybe this exemplifies and proves the necessity that can be addressed by a new community, Ask and learn community with rules looking forward to address this kind of learning.

I find beginners also can adopt this know it all attitude, and if something isn't in the scope of their understanding, it's either not relevant or capable of being understood.

Curiousity, interest, cooperation is the key of creating new beginners.

Code your way out of this one.

Google is awful for programming research for instance if I look for javadocs it is random if I get jdk 6, 7 or 8.

Same for the other dependencies in my code despite the fact that I use maven so the versions of everything are specified.

The how do I question has to be managed on an individual and project basis because in a certain projects we do it the same way so the system has a property we need and we don't care what the stackoverflowers think...

Personally, I find StackOverflow to be one of the most useful online resources for general/random programming questions. Its not a place that tolerates a great deal of willful ignorance, and does almost nothing to help you if you're not willing to help yourself.

Also, I'm not surprised to see a bunch of comments taken from r/learnprogramming, a subreddit dedicated to helping beginners, being somewhat critical of StackOverflow and its style.

1. Sounds like a market opportunity for a beginner oriented forum, that somehow incentivizes experts to help constructively.

2. The number one sign an expert is an impostor is the way the play the role of a teacher and student.

3. The main thing I hate about SO is the illogical ban on questions that recommend something. At least 80% of my searches that land on a SO page are like, "this is blacklisted by some troll master, because it encourages people to post links to cool and interesting things that might be outside of the box".

SO was never supposed to be a site for Eeeeeeeverything And A Kitchen Sink. "Cool and interesting things outside the box" is pretty much Reddit's tagline.
Pair programming is suppose to fix it.
The ideal of pair programming:

  The student learns at the side of the master
The reality of pair programming:

  "Why doesn't this guy ever wash his  hair! -_- "
The absolute worst experience is when the top link on Google is on a Closed/Duplicate/Invalid Stack Overflow, where the answers and comments are all on how the question is bad- especially when the question is almost verbatim to the search.

The problem with SO is that there isn't an alternative with a user base large enough to get that critical mass of answers. That means that there are no real alternatives to the very well defined limitations of Stack Overflow.

Without an alternative, it puts contributors in an adversarial position against askers- trying to close as many questions as possible to try and keep the mission statement alive.