[Edit: Old question - Oct. 08, pre-bounty - transfered from SO]
You heard it first from Jeff (podcast 19, around 28:00)
the audience of people that read Coding Horror and the audience of people that read Joel on Software are already fairly elite in the programmers.
And then again late September, in podcast 23 at 14:50:
Jeff: Stackoverflow is really for the elite developers in my opinion
So here you go. If you are here because you read one or both of those blogs, I bow before your awesomeness.
You are an elite programmer.
[Humor inside of course, both from Jeff in his podcast, and from me for this topic, do not take this seriously ;)]
You can talk the talk (and spray some quick answers with a few links, a wikipedia reference and some thoughts, for quick rep' gains)
BUT CAN YOU WALK THE WALK ?
Enter the "code-challenge".
A code-challenge is not:
- a Puzzle game, we are talking about practical problems here
- a bounty system (should it be implemented) where some user must forfeit some rep' point in the hope of an answer. The kind of questions concerned by bounties are not the same concerned by a 'code-challenge': not every 'hard' question can be solved by some source code.
A code-challenge is:
A complete source code, which can be copy-pasted and executed, and which answers precisely a practical question (and not a theoretical mind-game problem).
The goal can also be to answer it in as many languages as possible, both for the fun of it, and because all users may have the same problem on different development platforms.
Even if a question is not originally a code-challenge, the fact that a well-written script can help to obtain the exact expected output makes it eligible for a 'code-challenge' tag, and a worthy exercise for all of you 'elite coders' out there ;)
How to set up a code challenge ?"
- the user asking a question can tag his with a 'code-challenge'. He must then edit his question in order to have the clearest specification possible
- any user with enough rep (750) can re-tag a question 'code-challenge', add a community answer with some specifications clarifications, and then add one or several answers, provided those contain executable code that gives precisely the expected output
Why set up a code challenge ?
In the grand scheme of solving the "Solving the Fastest Gun in the West Problem", this may help.
I often notice simple questions like "How do I know if Windows has just recovered from a BSOD?" or "How do I find the install time and date of Windows?".
The answers are very shorts and just enough to offer a lead... and take some quick rep'!
But the user can not just "copy-paste" the proposed solution and check if it does solve his problem...
They are also some more challenging questions like "Program to analyze a lot of XMLs", which has actually a very good answer in xlst, but again frustrating as it is not a directly executable answer which would precisely solve the user's problem.
How does that help solving the "Fastest Gun in the West" Problem ?
The key to counter Fastest Gun in the West phenomena is through long term question status management:
The question can not expect any kind of attention in the long run *if its status somehow does not change (with the right incentive in term of rep' points and badges, of course)*
- a bounty system is a first example where the status change: the asker indicates that from now on (status change), he will forfeit x rep' points in term of a validation he would validate.
- Joel mentioned another possible status change, in the podcast 24: a "still here" status, to indicate that the asker (him again) is still around to potentially validate and accept an answer!
But here lies the true problem of StackOverflow, the one preventing its "Wikipedia dimension" to really flourish: once the asker does not monitoring anymore a question with:
- no answer
- no satisfactory answer
- an accepted answer but which is false or now obsolete
there is really no incentive left to change/complete/modify the answers to that question...
"code-challenge" is an example of "status change" where users can take charge of the question (even if the asker is long gone) and challenge other users, and have some points/badges in exchange. Plus, it is a win-win process for all users involved, as opposed to a bounty where the asker must still be around and accept to loose points.
This is certainly not the unique solution, since the number of questions concerned by such a process is quite small, but still, the status of a question over a long period of time need to be addressed if the information stored in StackOverflow has the ambition to remain some kind of reference.
... Why not, but what's in it for me, elite programer ?
For now... nothing more than the usual rep' points system. And the satisfaction to completely answer a user's problem.
- 5 rep' points for the one setting up a code-challenge (provided any answer has at least 3 upvotes, and has been published AFTER the 'code-challenge' tag)
- 10 rep' points for someone posting an answer in a 'code-challenge' thread and having at least 3 upvotes
Some badges for the challenger:
- a bronze badge 'Challenger' for anyone setting up a 'code-challenge' (and having at least one answer with three up-vote: you can not jsut tag some question and expect a badge)
- a silver badge 'Defier' for anyone setting up 25 'code-challenge'
Some badges for the challengees:
- a bronze badge 'Courageous' for anyone answering at least a code-challenge and getting three upvotes for his answer
- a silver badge 'Tenacious' for anyone answering at least 10 code-challenge and getting three upvotes for his answer
- a gold badge 'Elite' for anyone answering at least 50 code-challenge and getting three upvotes for his answer
All those new badges are not here just to add to your collection of shiny dots.
As Jeff said in podcast 18 around 25:30:
Jeff: You really have a hundred million active users? I don't think so. Well, if you go to the badge-page... you can see how many people have done certain thinks. That is actual activity, that is measurable activity in the system, right?
[...] The badges, in addition to being fun, actually tell you stuff about the system and also the user, right. Like how well do they know the system. If they have 10 bronze badges then they know it pretty well. So all this stuff is there for a reason. None of this stuff is there because I thought it would be, like fun to have a game.
So those badges are here for monitoring the activity centered around the coding questions, as opposed to the more general questions about programming.
Why monitor "coding" questions in the first place ?
Hopefully, that may help to re-visit some old questions and take them as 'exercise' in order to bring a complete solution for those questions where an algorithm is useful.
Coding is a sub-category of programming questions that SO is aiming at.
Some comments have raised the danger of "home-working questions" (students asking for an algo to solve their problems). Even though I am not convinced of that trend (they can ask right now anyway), the following criteria may help to keep any of that down:
- only one week old question with no accepted answer would be eligible to a code-challenge
- the reputation of the user asking the problem should be at a certain level (100? 200?) before tagging his/her question 'code-challenge', meaning: a minimum contribution to the site should have been made before.
Plus, as a non-automatic criteria, there should be a clear context of the question showing it is about getting a nudge, not about having the all assignment done for you.
Real homework questions like this one are detected and marked as homework anyway.
The goal is first and foremost to improve the quality of old coding questions with no precise answers.
That tag is just here to retrieve them more easily and to know that, amongst the ~2000 unanswered questions, they are 'special' in the sense they could be solved by a program.
I have set up a few code-challenges for you to play with (Just follow the 'code-challenge' tags).