> I am a complete idiot at coding. And one of the biggest barriers to getting good at it is I don't even know how to ask good questions.

This is a skill that can be learned. Admittedly it's harder to ask good questions when you're very new to something (there's a higher ratio of unknown unknowns to known unknowns), but the point still stands.

As a programmer, you have the good fortune of belonging to a very helpful community. Programmers, some of them highly paid, help each other out online, for free, all the time. If you're going to ask someone with highly valued skills to help you out free of charge, you have a duty to make an effort with the question you ask.

Equally, if you fail to express your question well, you're not likely to get a good answer. Someone answering questions for free, in their own time, gets to pick which questions to answer, and your poorly-expressed question isn't going to make the cut.

> Ask a dumb question on StackOverflow and you get downvoted and griped at.

You're expected to follow the rules and make an effort. Lazy, vague questions, or questions that break the rules, or 'questions' that aren't questions at all, are meant to get downvoted. That's what the downvote feature is for. This shouldn't be a surprise, StackOverflow has rules and guidelines.

That's not to say StackOverflow is perfect. There's some amount of silly pedantry and hostility.

> I know I am an idiot!

Probably not, and anyone saying you are should end up getting downvoted for flagged for being abusive.

> I know I don't understand what I am asking for! This is a cry for help!

But that's not the same thing as asking good questions. There are good and bad ways to ask basic programming questions, just as there are good and bad ways to ask advanced programming questions.

> When I ask a vague, dumb plea, I am intentionally trying to weed out the pedantic people who would rather write a blog post about how dumb I am than stop to help me.

This is counterproductive and, frankly, comes across as rather entitled. You aren't hiring a salaried employee, you're asking strangers to help you out free of charge. You're in no position to 'weed out' anybody. You'll get more and better answers if you ask your question well.

> If everyone has to stop and think of a logical and formalized way to ask a question, no one will bother asking for help.

This is absolutely the wrong mindset for StackOverflow. People submitting StackOverflow questions are expected to make an effort, just like the people who submit answers. The StackOverflow format isn't intended to be conversational and fast-paced. Care and consideration should go into both questions and answers.

Asking questions skillfully works out better for the questioner, who is more likely to get a high quality answer. It's better for the answerers, who can see at a glance if your question is something they can help you with. Lastly, it benefits future users of StackOverflow who are searching for answers to similar problems.

With sloppy questions, you won't get good answers, and you won't help build the site as a searchable repository of knowledge.

> Think of every time you have reached outside of your domain - you would be so much worse off if you spent the entire time researching the right way to ask something than just asking for help.

Outside StackOverflow, sometimes that may be true, such as if you're starting out at a new job and are assigned to another employee to teach you the ropes. On StackOverflow though, it isn't the right mindset at all. On a site like StackOverflow, it's vital to have high quality questions. You aren't having a conversation, you're contributing to a question-and-answer site, so do your part and put the effort in. Answerers enjoy answering good technical questions, but they don't enjoy the process of improving an unclear question.

> In fact, I will turn it around. If you are not actually stopping to thoughtfully answer dumb questions, you are not actually teaching anyone anything.

This confuses questions about basic programming, and poorly expressed questions that frustrate potential answerers. They aren't the same thing at all.

With all that said, good news: asking good questions is a skill, so you just have to learn how, and then make the effort when asking questions. (People who say Just ask good questions! are doing a disservice, there's more to it than just telling people to ask good questions.) There are various articles on asking good questions, the best I know of is the classic by Eric S. Raymond, How To Ask Questions The Smart Way. I'm not the first in this thread to mention it. http://www.catb.org/~esr/faqs/smart-questions.html