What If We Ran an Iron Coder?
I've been a fan of Iron Chef America for a while. Fast paced and some very interesting dishes, it's entertaining and even a bit educational (for the epicurean viewer).
Being a geek at heart, it leaves me wondering what it would take to create an Iron Coder competition. With the right "ingredients" it just might work.
First, we'd need a play-by-play announcer and a color commentator. On Iron Chef America, this single role is played by Alton Brown. We might be able to get away with a single person, but I often like the banter of two announcers. It is, of course, their job to explain what is going on and provide insight and entertainment during the battle.
There is, of course, the Secret Requirement. This brings us to the question of what type of code are the two Iron Coders creating? I come from a web application background, so this is my first assumption. You can't pit an X-Box programmer against a Perl script kiddie. For now, let's stick with building simple web applications. I don't think we restrict to a particular technology. In fact, part of the fun would be to watch a Rails expert go head to head against a .NET expert.
As for the Secret Requirement, this can go one of two ways. Option A would be to mandate a large scope for the application. For instance, "Build a Time Card application!!!" The particulars are left up the Iron Coders. Perhaps there are a very small set of requirements handed down, like "user clocks in" and "user clocks out" and "manager pulls report of this week's time"
Option B for Secret Requirement would mandate a very small requirement, such as "must use the visitor pattern and two factory pattern implementations!!!" This would let the Iron Coders build whatever they like, as long as they use the Secret Requirement. This more closely matches the original Iron Chef in intent, but how easy is it to create these small requirements? Do they provide enough constraint for the Iron Chefs?
I'm going to lean towards Option A, specifying a broad, yet simple, application domain. Leave the particulars up to the Iron Chefs.
Next up we have Judging. This is where it gets interesting, as need to decide how to choose a winner. In Iron Chef America, they judge the dishes with a point scale across three categories: Originality, Taste, Presentation. For Iron Coder, I'd propose the categories to be Originality, Accuracy, and Construction. Let me explain:
Originality would be the judge's take on how original the Iron Coder implemented the Secret Requirement. The more interesting, unique, surprising the Coder's web application, the more points here.
Accuracy is measuring the correctness of the application. This one is tough because there may not be that many formal specs, but given that Accuracy is a judging category, we might need them. In any case, Accuracy measures if the application functions properly. If any bugs or inconsistencies are encountered, points are lost here.
And finally Construction, which is measuring the quality and beauty of the code itself. This is a lot like porn: you know it when you see it. Is the code DRY? Does it use patterns appropriately? Does it follow good OO design? Is it a hack, or is it beautiful? If anything, this category is too broad. In any case, it's very important and must be judged.
Logistics is something I worry about. Watching people write code isn't exactly exciting, but I think this even should be live. I'd like to emulate a live studio audience, where viewers can chat along with the action. However, I don't think the Iron Chef's should be able to watch the chat (not sure how you'd accomplish that one) This is my biggest unknown. What's a good screen sharing program? How do we deal with small font sizes? Are there any editors that provide a real-time link (SubEthaEdit comes to mind for collaborative editing)?
Finally, it has to be campy. This should be fun for Iron Coders and viewers alike. I think if we can figure out the logistics issues of actually broadcasting text editors, it could be a fun event.
Being a geek at heart, it leaves me wondering what it would take to create an Iron Coder competition. With the right "ingredients" it just might work.
First, we'd need a play-by-play announcer and a color commentator. On Iron Chef America, this single role is played by Alton Brown. We might be able to get away with a single person, but I often like the banter of two announcers. It is, of course, their job to explain what is going on and provide insight and entertainment during the battle.
There is, of course, the Secret Requirement. This brings us to the question of what type of code are the two Iron Coders creating? I come from a web application background, so this is my first assumption. You can't pit an X-Box programmer against a Perl script kiddie. For now, let's stick with building simple web applications. I don't think we restrict to a particular technology. In fact, part of the fun would be to watch a Rails expert go head to head against a .NET expert.
As for the Secret Requirement, this can go one of two ways. Option A would be to mandate a large scope for the application. For instance, "Build a Time Card application!!!" The particulars are left up the Iron Coders. Perhaps there are a very small set of requirements handed down, like "user clocks in" and "user clocks out" and "manager pulls report of this week's time"
Option B for Secret Requirement would mandate a very small requirement, such as "must use the visitor pattern and two factory pattern implementations!!!" This would let the Iron Coders build whatever they like, as long as they use the Secret Requirement. This more closely matches the original Iron Chef in intent, but how easy is it to create these small requirements? Do they provide enough constraint for the Iron Chefs?
I'm going to lean towards Option A, specifying a broad, yet simple, application domain. Leave the particulars up to the Iron Chefs.
Next up we have Judging. This is where it gets interesting, as need to decide how to choose a winner. In Iron Chef America, they judge the dishes with a point scale across three categories: Originality, Taste, Presentation. For Iron Coder, I'd propose the categories to be Originality, Accuracy, and Construction. Let me explain:
Originality would be the judge's take on how original the Iron Coder implemented the Secret Requirement. The more interesting, unique, surprising the Coder's web application, the more points here.
Accuracy is measuring the correctness of the application. This one is tough because there may not be that many formal specs, but given that Accuracy is a judging category, we might need them. In any case, Accuracy measures if the application functions properly. If any bugs or inconsistencies are encountered, points are lost here.
And finally Construction, which is measuring the quality and beauty of the code itself. This is a lot like porn: you know it when you see it. Is the code DRY? Does it use patterns appropriately? Does it follow good OO design? Is it a hack, or is it beautiful? If anything, this category is too broad. In any case, it's very important and must be judged.
Logistics is something I worry about. Watching people write code isn't exactly exciting, but I think this even should be live. I'd like to emulate a live studio audience, where viewers can chat along with the action. However, I don't think the Iron Chef's should be able to watch the chat (not sure how you'd accomplish that one) This is my biggest unknown. What's a good screen sharing program? How do we deal with small font sizes? Are there any editors that provide a real-time link (SubEthaEdit comes to mind for collaborative editing)?
Finally, it has to be campy. This should be fun for Iron Coders and viewers alike. I think if we can figure out the logistics issues of actually broadcasting text editors, it could be a fun event.