However, I have been discouraged from using the site in recent years due to too many disagreements over closing and downvoting questions when actually just getting a little bit more clarification from the person asking the question would have helped a lot more.
I've answered over 1,000 questions, ranging from very simple beginner level to some things that took a good deal of research or debugging to answer. I've seen my fair share of poor questions. If a question is completely off topic, then sure, I click the "close" button immediately.
However, if it's on topic, and about some identifiable issue, but not specific enough, too poorly worded, or doesn't include a code sample, or the like, then I post a comment requesting clarification, and listing how they can improve their question. In some cases, they actually work with me, improve the question, and then I or someone else can answer it. In some cases, they just ignore my comments or continue with requests to just give them the code or the like, in which at that point I find it worth a downvote or close vote.
But a lot of the times, I've seen perfectly good questions that were just a little confusingly worded, however I was able to tease out what they were getting at, I've done some research to find the answer, and come back, only to find the questions closed. Now I have an answer for the question, but can't actually post it. If I vote to reopen, sometimes even after editing it to clarify or getting the OP to edit it, it will generally languish with one or two reopen votes. Sometimes I'll then post on meta to complain about this behavior; people being way to quick to close. This will frequently lead to enough people clicking through to reopen it, but also a torrent of complaints about how the question really is bad and how we shouldn't let this kind of stuff on the site because it's destroying the community.
The thing is, bad questions don't destroy the community. If they're bad questions, they'll generally fall off the front page and get forgotten about. They don't really cause much in the way of problems; they're just a few extra bits. But this hostile behavior does destroy the community. It pushes beginners away, who may ask better questions later once they get a bit more of a handle on what they're doing. And it pushed people like me away; people who are there to help, and willing to do so even for beginners.
I think that Stack Overflow is a very different thing than MathOverflow. Professional programmers sometimes run into thing that they need to do that they are complete beginners at; you may have years of experience writing Java, but then you wind up needing to integrate with and write a plugin for something written in Ruby, and you really have very little experience with it and so don't know where to look. Due to the huge numbers of different languages, APIs, platforms, and so on, rapid pace of change, and shortage of qualified people with the exact relevant experience, almost everyone is a beginner at something they are doing at some point in their career.
Furthermore, some people just don't know how to ask good questions online. It's a skill that takes some time to learn. If you're asking a question to someone in person, they may already have more context about what you're doing, or will be able to more easily ask you questions to clarify and sit down with you to work through it, while asking good questions online can involve a certain amount of preparation in advance to narrow the issue down to a self contained, reproducible test case, to phrase the question appropriately, and so on.
So while I agree that complete junk should be closed and delete, and people who just post "plz gimmeh teh codez" should be discouraged, I am really frustrated by the way people extend that to things that are just beginner questions, poorly worded questions from people who aren't good at asking questions online or aren't good at English, or the like.