ICFP 2005 Programming Contest Results
Fahrenheit 450 writes "The results of the The Eighth Annual ICFP Programming Contest are in, and it looks like this was the year for Haskell and Dylan, with Haskell programs taking first & third prizes, and Dylan claiming second prize and the coveted Judges' prize. This year's contest was a simulated game of cops and robbers, with a twist to the rules thrown in after the participants had submitted their initial entries. Step through the transcripts of the contests or just download the PDF version of the presentation slides and tell us all how you could have wiped the floor with the winners using your carefully crafted COBOL or awk submission."
It's amazing how many programming languages there are. I would never have thought that Haskell and Dylan would have even placed.
I've been in a Java bubble for far too long. Time to burst that bubble and look into things like Ruby, Python, etc. I know they're not new languages, but it seems like once you get buried in Java, Perl, C, or PHP it's hard to escape.
On the other hand, my mind is like a FIFO -- in order to learn another language, I have to forget one.
My ZooLoo
That's why many newer languages piggyback on the Java api set (Jython and their ilk), since the real bother isn't learning the core language features, it's learning the gigantic libraries that accompany them:
- UNIX-derived C libraries
- C++ template libraries
- unending Perl libraries
Java offers a quick-and-dirty crossplatform API for these languages that handles most of what they need, if they can wrangle their language semantics and don't mind the larger memory footprint and bytecode.
Also, if they can compile to bytecode, that helps automagically close some of the interpreted vs. compiled performance gap due to the hotspot compilers and java interpreters.
Go go java hate mail!
Hey, I'm just your average shit and piss factory.
I have only one question for developers programming in Dylan: How does it feeeeeeeeel?
Pretty awesome, I wish I could program. Problem is, everytime I attempt to learn a language, I can learn the basics (Variables, print, etc.) then I get lost when it comes to actually writing anyhting at all. I need to find a decent language to try that is easy. (Besides ruby and python, tried em)
There was no requirement to program in a functional programming language. One guy wrote his cop & robber as shell scripts, although it failed in both rounds.
You can use imperative languages too. That's the neat thing about the tournament -- given a choice, most of the folks choose languages that offer more expressivity than the typical imperative language.
There have been "C" programs that won previously, I believe.
http://www.thebricktestament.com/the_law/when_to_
I find it's more about motivation than picking a language or how hard it is. If you've got some mental image of "I want to write Quake!" (or hopefully something a hair less ambitious), then it gives you both a reason and a direction for what you're trying to learn. Then you can obsessively search the web for tutorials on the different bits and pieces you think you'll need until you have a fairly decent subset of the skills needed to reach your dream. Learning the language is a free side effect.
Acius the unfamous
The ICFP contest accepts submissions written in any language. In this year's contest, there were 34 C++ entries (the most of any language), 20 Python, 19 Java, 10 C, and 9 Perl entries -- of the "functional" languages, there were 21 OCaml entries, 16 Haskell, and a mishmash of "others" like Dylan, Erlang, scheme, etc.
-30-
"it seems like you're developing AI for an RPG."
Awe, you sound like Clippy when you talk like that!
Gosh Wally, Haskell gives me the creeps.
As others have said, the problem is not languages. However, rather than offering vague suggestions about "motivation" or "picking a goal", I have some concrete advice: try taking a look at How to Design Programs. It's textbook by some of the best minds in CS education, and its goal is to teach you how to break down and structure problems, and create programs which solve those problems - not just to teach you a language. It'll teach you to think like a programmer. Which, quite frankly, sounds like what you need. Better yet, it's freely available online (so you can easily give it a testdrive), although I'd recommend picking up the print version if you decide you like what they have to say (for the sake of readability if nothing else).
Shameless plug: Those of you who like Erlang might also wish to give Q a try. http://q-lang.sf.net/ Pattern matching is at the heart of the interpreter, as the language is based on general term rewriting instead of the lambda calculus. Fairly pragmatic language as well (interpreted, dynamically typed). Comes with a system interface, XML/XSLT support, Apache module, OpenGL interface, modules for doing computer music and multimedia stuff etc. Q still has still to prove itself on something like the ICFP programming contest, but it's quite usable already (IMHO).
What you are failing to do is not learn how to program, or learn a language. What you are failing to do is understand how to think logically and then turn your thoughts into code. Every language is the same - pick one and learn how to write algorithms instead of just lines of code.
Here is a graphical simulation of a game that was played. The red guy is the robber, and the blue guys are the cops. There's a key available if you want a better idea of what's going on.
Ask me about repetitive DNA
Look at it in another way. Apparently from the name of the contest they focus mainly on functional programming languages. It is therefore natural that they would be inclined to pick AI-ish problems that are more suitable for functional programming. I believe it wasn't a (conscious) intention that they allowed other languages in the contest for the purpose of tilting the playing ground to their (functional programming) favor. If you think about it, ICFP problems might be fun even for those who prefer an imperative language, and excluding them would be a lose-lose situation: the contest gets fewer contestants, and those who want to participate, couldn't.
;-p), and try to achieve whatever you aim to be. If you really want a "contest" feel, you might want to take upon the motto of "He who dies with the most toys, wins" ;-p
And for your last question, probably not. It seems that many slashdotters would prefer "real" problems in contests than "hypothetical" ones. But there are reasons why there aren't many of these "real" problems.
First, "real" problems usually contain sub-problems that are tedious and a PITA to solve. (Think writing an OS like Linux - I've heard that making things work on a dozen different architectures and working around crappy hardware is a nightmare.) Besides, most people have enough of "real" problems to solve in their normal lives, may it be work or study. "hypothetical" problems tend to be fun, for the same reason people spend time playing MMORPG.
Second, "real" problems tend to have quite a bit of economic value, and once you get to the situation where you can get people to attempt solving your "real" problems, you wouldn't want a dozen of developers working on the same thing (to illustrate, think about GNOME and KDE - there has been criticisms that effort is diverged and distracted with merely two projects, and to think of holding a competition where all contestants write the same fscking thing and duplicating the effort many many times?). And when you come to realize this point, there's a very fine line between a "real problem contest" and a bounty like those of Google, GNOME and other OSS projects.
And really, if you want a contest of "real programming problems", just go out and find a good job, (or even start an OSS project and see whether somebody awards you with something
Don't quote me on this.
2004:
Judges prize: OCaml
Lightning division winner: Java, C++, Perl, and m4
Main division: (1st) Haskell, (2nd) Haskell and C++
2003:
Judges prize: C++ and Dylan
Lightning division winner: OCaml
Main division: (1st) C++, (2nd) C++, (3rd) OCaml
2002:
Judges prize: Python
Main division: (1st) OCaml, (2nd) C
2001:
Judges prize: Erlang
Main division: (1st) Haskell, (2nd) Dylan, (3rd) OCaml/C (a tie between two teams)
2000:
Judges prize: SML
Main division: (1st) OCaml, (2nd) OCaml, (3rd) Haskell, (4th) Mercury
1999:
Judges prize: Haskell
Main division: (1st) OCaml, (2nd) Haskell
1998:
Judges prize: J
Main division: (1st) Cilk, (2nd) OCaml
-30-