There's been a bit of back-and-forth on Twitter (nothing of any merit, sadly) regarding my posting from the other day regarding some "shortcomings" in the attitude of some of the users on Stack Overflow, and also - given how said users behave - some potential areas for improvement in the Stack Overflow process.
I don't contest that the first part of the article was quite vitriol-laden, and that was by design. However later in the article I did try to discuss - in an objective, balanced way (? well, mostly) - where I think things could be improved. However I think I did not succeed in the objectivity, or some people didn't get past the headline, or if they got that far, didn't read past the vitriol. I am guilty of doing this (to myself) in my writing sometimes.
Anyway, the article was put on the twitter radar of one of the blokes who started Stack Overflow (thanks Stephen Moretti for thinking to do that), and there was a brief exchange between myself and Jeff Atwood (the S/O bloke) and some others. I think Jeff was a bit defensive, but in his defence, I can see how he'd find my article incendiary. And equally my responses to him could have been more diplomatic. Well the ones I made just now, anyhow. I'll leave it to you - the reader - to dig it up in my Twitter history if you so choose. It's not very exciting.
So, here I am again. What I'm going to try to do in this article is to articulate my point differently:
- no vitriol, snippiness, back-handedness or passive aggressiveness (this will be a stretch for me, as you can imagine ;-)
- maintaining objectivity (OK, that's a variation on the above);
- trying to convey my thoughts more clearly than I have previously.
The very first thing I'd like to say is I really like Stack Overflow! Jeff, if you only glance at this article before dismissing it, hopfully you'll see that bold red bit there.
I only really noticed its existence about 18 months / two years ago, when answers to some ColdFusion questions I had started showing up in Google results. So I was kinda aware of it. But about 16 months ago (that's courtesy of my profile page... I don't remember that sort of thing), I dived in and started participating. I think I had a CF question I could not find an answer for anywhere else, and I'd already realised the calibre of the participation there was higher than my usual haunt - the Adobe ColdFusion forums. On the latter I'm generally answering questions, not asking them, and almost all the questions I have had to ask go unanswered. There are a few exceptions (and it's improved recently), but the level of ColdFusion knowledge of the participants there is pitched more at the newbie / intermediate level, and whilst I still have questions at that level to ask every now and then, they've all been answered before elsewhere, so I can google them. Or in the process of versing my question, I work out the answer. Anyway, I knew a bunch of the names on the list of ColdFusion participants on Stack Overflow, and know they know their stuff and have quite a lot of respect for most of them, so decided it was a great place to ask questions as well as answer them. As you will (?) know, I like helping people on forums, so I have made a point to add Stack Overflow to the resources I keep an eye on in case there's a question I can answer. It's been mostly good, I've enjoyed it, and I've learned a bunch of new stuff whilst participating on it. And I think I have helped some people too, which is good ;-)
Note that I also actively (kinda) request other people to participate in Stack Overflow in my "links" list on the right (links I bet you didn't even notice were there!).
I think it's safe to say I'm definitely pro (rather than anti ~) Stack Overflow. And I think I have always stressed that I have no significant issue with the site itself, nor any of the hard work that's gone into it.
So what's the problem?
It is a very rule-intensive place. I understand why these rules are in place, and on the whole I think it works OK. I have no problem with rules. Rules need to exist. However I do have a personal "challenge" (shall we say) when a rule gets in the way of what I perceive the objective of the entity with the rules should be. Huh? In the context of Stack Overflow the rules are ultimately there to make the place a valuable Q&A website. Fine. However I think there's a slight tendency for people to remember the rules, but not remember the end game of the rules: the reason for the rules. I also think that to a degree Stack Overflow itself is failing slightly in that whilst it's admirable to have a cruft-free Q&A site, they seem also to have focused too much on the process, too much on their definition of what constitutes a good Q&A site, and have got fouled up in the rules and notional concepts, rather than the reality. By its very nature a Q&A website is about the people asking the questions. The people. The ones asking the questions.
I will interrupt myself here to declare again that I don't think the problem is significant, and it really doesn't detract too much from the Stack Overflow experience.
I said this in the previous article, but I'll say it again. If a person finds themselves in a situation in which they need to ask strangers for help, they are already a bit on the back foot, they are already in territory they are unfamiliar with (that which they are asking for help about), and they might find themselves as a newbie on this shiny Q&A website they've heard people talk about. So I think the first thing in helping a person in this situation is to be nice to them. And make them feel comfortable. And encourage them.
Another thing Stack Overflow's processes and policies seem to not quite get is that most questions are going to come from newbies, so their ability to ask questions is going to be at a newbie level. There's nothing wrong with this: we were all newbies once. We shouldn't be making it a problem that they're newbies. Again, newbies need to be looked-after in an effort to move them on from being newbies.
To flip this around, I've been a programmer for over a decade, and had the best part of the previous decade in the IT industry as well. So I ought to know what I'm doing by now. And therefore if I ask a question in a dumb / incomplete / lazy way, give me both barrels: I deserve it. Actually give me both barrels, reload, and give me them again. I think what I am suggesting here is that there ought to be leniency when evaluating what course of action to take on a "bad question" (I am a firm believer that the addage "there's no such thing as a bad question" is a load of ballocks. Of course there are bad questions).
Another consideration with the ColdFusion community in particular (and this is the broader community, and the people who post on Stack Overflow)... it's such an easy language to pick up that there are a lot of people in the community who are a) not that bright; b) not that good; c) not dedicated logically-minded programming geeks. I don't think that's unfair? The thing is here is that ColdFusion might be unlike a lot of its peer technologies here, so perhaps the patience threshold for a "junior" ColdFusion developer might need to be greater than for Ruby on Rails or Python or something. This is a factor that the powers-that-be @ Stack Overflow might not have considered.
Still: at the end of the day it's all about answering people's questions, right? So a question asked should be allowed to be answered. Or at least reacted to, before it's arbitrarily dismissed.
We've had a rash recently (a small rash...) of people from outside the ColdFusion community closing reasonably valid (if not perfect) ColdFusion questions for some reason. I've checked their profiles, and these people have never answered a ColdFusion question, so I really question what's wrong with them in that they have decided it's an appropriate thing to do to poke their noses in where they clearly don't belong. Still: there are a few of the ColdFusion community members there that are very quick on the "close" button too... whilst I think they're not being helpful either, I have some small amount of respect for their opinions, if not their actions.
Either way, this has brought me to think about what constitutes a "good question". The closing criteria on Stack Overflow cite things like this:
- It's difficult to tell what's being asked here. Well this is entirely subjective. On most of the questions I have seen closed, I could pretty much work out what was being asked, and if I could coerce some further details out of the questioner, the question would be fine.
- This question is ambiguous. Yeah, well sometimes questions will be, by their very nature. The person asking for help on the question intrinsically doesn't have a complete grasp of what they're talking about. If it's so vague that further clarification is needed before answering, further clarification can be sought. If it's provided... cool.
- Vague. Well this is both subjective and quite easy to resolve by asking for clarification.
- Incomplete. Same. Easy to remedy.
- Overly broad. This can be dealt with too, but I actually agree that this sort of thing can be a problem, but it's easy enough to feed-back asking the person not to ask "how do I write a shopping cart", but to clarify which specific bit they're having trouble with. Or, indeed, point them at pre-existing work, encouraging them to not reinvent the wheel (esp if they have to ask how to do it!)
- Rhetorical. Yeah, fair cop. This is a case of a question not being a question. I've yet to see one of these though.
- Cannot be reasonably answered in its current form. OK, so ask the person to refine it so it's in the form that can be answered in. This is not an insurmountable problem.
So I think in almost all of those situations, the remedial action is not to click the close button, but to ask the person to tidy up the question, explaining how to do so. My thoughts on this are in a separate article on that topic.
But this leaves the situations like we had the other day when people with absolutely no expertise in the area under discussion are hovering over the "close" button. They won't know how to ask the questioner to clarify - what sort of info a person who can actually help might need - yet they still click the close button. They can't be helpful, but what they can do is be obstructive to others who might try to help. This is not on.
I've wondered about what to do about this. I have some ideas (these will be mostly from the earlier article):
- Don't allow someone who doesn't have rep in the tags the question is tagged as to be able to vote for closure. They cannot make an informed decision on the topic. Sure some questions might be "do my homework for me", but questions are very seldom so obviously like that, so how about leaving those decisions to the people who have the expertise in that area to decide? The people with the expertise will know a blatant "do my homework for me" as much as the person who has no expertise in the area at all.
- At least temporarily penalise someone voting to close a question. Closing a question on a Q&A website is counter to the raison d'ĂȘtre of the site, so it's fair enough for someone to put their reputation on the line for this. This is if they have reputation in that area to start with. I think casting a close vote should cost the person some reputation (and a non-trivial amount), just like down-voting an answer does.
- Currently it takes five votes to close a question, and then another five to open it. What I see happening is that one person clicks "close", and there must be a pool of vultures (or harpies, more like) circling waiting to have their little moment of collective bossiness too: very quickly the other four votes have come in. What's that about? And in the most recent article none of them had expertise in the area being questioned, and two of the five had no expertise in any of the tags the question was flagged as, so it's not like they would have come across the question in their normal day-to-day usage. Anyhow, it seems like there's no coven of "good vultures" out there who look for questions that have been pre-emptively closed, and have had some "re-open" action applied, so the expedience with which a question can be summarily closed is not matched by the expedience of getting it opened again. I think this "negative loading" is counter to Stack Overflow's basic intent.
- I think the "closed" status of a question should be based on its net vote. If a question has five close votes and one unclose vote, that's a net of four, and not enough to close it. Who cares if the status of a question changes as votes tip it either side of that line?
- Closing a question prevents it from being answered. Why? What if I know the answer? Isn't it more important to get the question answered than to blackball the questioner?
- I would go further and say that if someone can answer a question, then that counters most of the grounds a question can be closed for, so kind of invalidates the notion that it should have been closed in the first place. One answer (maybe it needs some upvotes or to be accepted) should cancel out any close votes (well: ones based on the question not being able to be answered, anyhow).
- I think anyone casting a close vote should be required to type in an explanation as to why the question should be closed, and why they are trying to close it rather than solicit the questioner to improve the question so it can better be answered. Surely an improved question is better than a closed one?
- I also think this explanation should be down-votable, as well as being commentable. To make the person simply trying to close a question be answerable for their actions. Again, this is predicated on my position that simply closing questions is counter to the purpose of the site.
- I think a close vote should be flagged to the questioner and give them time to respond before it's accepted as a close vote. If after - say - three days the questioner hasn't responded, then the vote should be counted. If the questioner does respond (and the situation is remediated) then the close vote should be removed (perhaps at the discretion of the person casting it).
- One should be able to flag a close-voter as a site-abuser (if, say, they fall into the remit of these guys who are close-voting questions outside their area of expertise). This behaviour should be stamped out.
Stack Overflow is not like a university, it's more like an off-campus bar where the Comp Sci bods hang out. It's a great looking bar, it's well-stocked, and the staff are friendly & professional. And the most of the crowd there is also really friendly, and it's easy to strike up a conversation with them. However one night I was there, I saw a person who'd never been in there before walk up to the bar and ask for a cocktail... one they couldn't remember the name off, and only a couple of the ingredients. From nowhere, one of the patrons walks up to the person and goes "YOU SHOULD HAVE READ THE COCKTAIL LIST! GET OUT!!". And this person has half a dozen cronies behind him going "yeah! get out!". Before the person had a chance to ask "cocktail list? Where is it?", these patrons (patrons! not security staff) grab the person by their collar and turf them out onto the street, slamming the door behind them. Most of the other patrons just look horrified, but the bar's security do nothing, and the barman just goes back to polishing the glassware.
When leaving at the end of the evening, I'm asked to fill out a survey about my experiences. "great service, great drinks... um... there was that thing with the guy being kicked out though..?"
Is that the kinda review Stack Overflow wants? I'm seeing more and more of them.
Wouldn't it be great if the reaction in the analogy (the one I've now tortured to death, I know) was "hey fella: new around here? To make it easier, there's a cocktail list at the end of the bar, and on the blackboard there... have a look at that and see if they've got what you want. Hey, then join us if you like... we're discussing ColdFusion". I did say I had tortured it to death. Really really.
That said, I'm game... I'll keep helping out. And keep bitching when I see something to bitch about. As one would expect of me.
Only 1.5hrs to kill before my flight home, now. Sigh.
--
Adam