Posted
by
timothy
on Wednesday April 28, 2004 @10:49AM
from the pencils-sharpened dept.

nate writes "Convinced your favorite programming language provides unbeatable
productivity? Convinced you and your friends are world-class
programmers? If so, we're providing you the opportunity to prove it! We are
pleased to announce the 7th ICFP
Programming Contest to be held in conjunction with ICFP
2004. All programmers are invited to enter the contest, either
individually or in teams; we especially encourage students to enter.
You may use any programming language (or combination of languages) to
show your skill." Read on below for the details.

"On Friday, 4 June at 12:00 Noon (EDT), we will publish a
challenge task on the Web site and by e-mail to the contest mailing
list. Teams will have 72 hours until Monday, 7 June 12:00 Noon
(EDT) to implement a program to perform this task and submit it to the
contest judges. We have designed the contest for direct, head-to-head
comparison of language technology and programming skill. We have a
range of prizes including cash awards and, of course, unlimited
bragging rights for the winners.

No matter what you throw at me, Brainfuck is worse http://www.muppetlabs.com/~breadbox/bf/ [muppetlabs.com]
Some of the intercal stuff is pretty nasty, but the gnarliness of this [sange.fi] program to calculate Pi trumps all
Fun times!

This looks really cool, a good way to show off your skills. Unfortunately I'm moving that weekend:( Are there any other popular programming contests out there? I remember the 99 bottles of beer contest that got posted here a while back and then never happened. I busted my ass to write my submission in Forth. It was only about 70 bytes and most of that was unavoidable strings like "beer on the wall".

Whenever some relative gets all complimentary because I fixed their pc - or someone tells me I must be smart because I work with computers- I just check out past challenges. Oh yeah-- I can almost hear the ego hissing away as my head returns to normal size.

I am sure this is a fine contest, and the programmer(s) that win will be better than most of the other programmers that entered. However, I do not see contests like this as a true measure of "a good programmer".

The measure of a good programmer is in the robustness of the solution, in how maintainable it is, and how well its architecture will support future changes.

A better competition would be a multi-phase one, where the programmers are given several tasks that each build upon the previous solution. Alternately, they could change the problem half way through the competition. Thus, the program (and programmers) would have to be flexible enough to change to meet changing requirements.

That is what programming is about in the real world, not figuring out an algorithm to find the shortest path between two nodes.

I would love to see a contest where you judge the best "maintainer" of code. Because maintenance programming (taking someone else's code and improving/modifying it) is a totally different beast than orginal programming.

I think an interesting programming challenge would be a multi-phase contest, where each team works on a different team's program in each phase. For instance:* Phase 1, everyone creates a program to accomplish Goal 1.* Phase 2, everyone gets someone else's program and must modify it to accomplish goal 2.* Phase 3, each team takes yet another Phase 1 program and modifies to accomplish goal 3.* Phase 4, etc...

At the end of the contest, you could determine lots of things:* Who's the best designer (based on how a phase 1 design did in the later phases)* Who is the best maintainer (based on how well the team did on goals 2-4)* If you allow different languages, you might even be able to measure whether one language is more maintainable than other languages...

If a contest like this would exist, to win, you would have to produce unmaintainable code on phase 1. I don't like that. I prefer the idea of the top parent: Create code to accomplish a goal, and then ask to morph that code to accomplish another goal, which is related, yet very different. Yet, another option would be to make exactly the same thing as you mentioned (Phase 1,2,3,4) but use different teams for each phase. Thus, you would have to chose which phase you want when you suscribe, and then, the prize

Well, although in theory someone could do this, I don't think it really gives them an advantage.

1) The malicious team would lose all chance at "best design." My personal experience suggests that THAT prize will be most valuable.2) The overall prize ("best programmer") should be a composite score, including the design score of the team's phase 1 entry plus their combined maintenance scores of the other phases. Thus, the malicious team almost certainly gives up all chance of winning the overall score.4)

The ICFP contest is primarily meant to be about having fun, and secondarily about giving exposure to functional programming languages.
You seem to want a contest that reliably measures how "good" a programmer is. I'm not sure how to do that, but I am pretty sure that it wouldn't be very much fun.

I do not see contests like this as a true measure of "a good programmer"

well, you'd be right. It's a test of languages and speed. I don't think that the best programmers will win. This a speed test, pure and simple. And the ability to code quickly is a good skill when combined with the ability to write maintainable code and with initial comprehension of the problem.

I could probably code a problem given to me in C++, Java, VB, C#, LISP or *shivers* some basic scripting languages, but really there are two

The results and strong entries for this competition are always an interesting read, so best of luck to everyone entering.

Just one niggle, though: last year, the first and second places were actually taken by entries using C++. I hope this year's proclamations [chalmers.se] won't suffer another unfortunate delay if the winner happens to be a non-functional language.