전세계에 걸쳐 열리는 여러가지 프로그래밍 경진대회가 있습니다. 개발자 사이에서 가장 유명하고 또 인정받는 대회 중 하나가 바로 ICFP 컨테스트입니다.

이  컨테스트는 함수형 언어 국제 컨퍼런스(International Conference On Functional Programming)의 부속행사로 며칠에 걸쳐 진행되며 문제는 하나만 주어지지만 대회 진행 중 요구사항이 추가 변경되기도 하는 등 상당한 난이도로 이름이 높습니다.

사실 이 대회는 함수형 언어 주창자들이 자기네 언어의 우수성을 자랑하기 위해 만든 경진대회입니다. 자기들 입으로 "함수형 언어가 최고요!"하고 외쳤다가는 별 신빙성이 없을까봐 대회를 만들었습니다. 각종 언어들 중 함수형 언어가 두각을 나타낼 것이다 하고 기대하는 것이죠. 때문에, 이름에 함수형이라고 붙기는 하지만 참가시 사용언어에 제약이 없습니다. 물론 학생들만 참가할 수 있는 것도 아니며 자격제한이 없습니다 -- 예를 들어 컴퓨터계의 노벨상이라는 튜링상을 수상한 영웅도 이 대회에 참가하기도 했습니다.

총 4개의 상이 주어지는데, 1, 2, 3등과 심사위원상이 그것입니다. 시상식 때에 주최측은 각 수상팀에 대해 어떤 공표를 하도록 되어 있습니다.


1,2,3 등은 밑줄 위치에 그 팀이 사용한 프로그래밍 언어가 들어가고, 심사위원상은 그 팀의 이름이 들어갑니다.

주최측의 기대는 앞서 말했다시피, 당연코 함수형 언어가 1,2,3 등을 장악해서, 자랑스럽게 (예컨대) "Haskell이 뛰어난 해커를 위한 최고의 프로그래밍 도구이다"라고 말하는 것이죠 -- Haskell은 함수형 언어의 일종입니다. 예상대로, 1998년부터 매년 이 대회 시상식에서는 함수형 언어의 이름이 불려진 경우가 많았습니다. 하지만 2003년은 심사위원들이 자존심을 구기고 C++(함수형 언어라고 하기는 어렵습니다)이 최고라는 발표를 하기도 했죠.

어쨋거나 함수형 언어가 수상을 많이 했다는 사실에는 변함이 없습니다. 이런 사실 때문에 타 언어 사용자들이 작정하고 도전하는 경우도 많습니다. 우리 XXX언어가 뛰어나다는 사실을 널리 알리고 싶다, 이거죠. 해당 언어 창안자가 직접 참가하는 경우도 있는데(예를 들어 Erlang의 창안자가 참가한 적도 있음) 사실 이게 쉬운 결정이 아닙니다. 참가했다가 아무 상도 못타면 국제적으로 언어 망신 시키는 일이니까요(혹은 지리한 변명을 해야겠죠).

쉽게 지나칠 수 없는 것은 왜 이제껏 역대 대회에서 함수형 언어 사용팀이 고득점을 했는가 하는 것입니다(역대 수상 언어, 분석). 심사위원이 편애했다? 점수는 컴퓨터가 매기기 때문에 불가능합니다. 문제가 함수형 언어에 적합한 문제다? 그럴 수는 있겠습니다. 문제가 일반적인 비즈니스 애플리케이션은 아니며, 알고리즘 중심적이고 복잡합니다. 그렇다면 역으로, 함수형 언어는 복잡하고 어려운 문제를 푸는 데에 도움이 된다는 말을 할 수도 있을까요? 왜 함수형 언어가 이 대회에서 수상을 많이 했는지는 중요하고 탐구해볼만한 질문입니다.

개발자들은 올해는 무슨 언어가 수상을 했을까 하고 결과 발표를 무척 기다립니다 -- 혹시나 내가 쓰고 있는 언어가 수상하진 않을까 기대하기도 하고요. 발표가 되고 나면 또 한바탕 이야기가 오고갑니다. 역시 이 언어가 최고야 어쩌구 저쩌구. 언어 논쟁만큼 개발자들이 하기 좋아하는 논쟁이 없는데, 그 논쟁에서 우위를 차지할 말을 할 수 있기 때문입니다. "너희 언어는 ICFP 프로그래밍 대회에서 상 타봤어?"

올해 ICFP 2006 결과가 나왔습니다. 시상식도 했지만 아직 웹페이지에 공식발표되진 않았습니다. 다음은 시상식 동영상입니다.




시상 결과는 다음과 같습니다(문제 설명과 분석, 대회 결과에 대한 상세한 pdf 문서도 참고).
몇가지 흥미로운 점들이 있습니다.

우선 1등과 3등 모두 구글 소속 팀입니다. 멤버들이 TopCoder 유명인입니다. 똑똑한 사람들은 다 구글에 있는 것만 같습니다.

3등은 어셈블리어를 사용했습니다. 함수형 언어와 가장 거리가 먼 언어입니다. 3등상을 수상할 때 심사위원 심기가 불편했을 겁니다. 참고로, 프로그래머 생산성과 프로그래밍 언어에 대한 여러 연구로 알려진 것은, 일반적으로 보아 프로그래머 능력의 차이가 프로그래밍 언어의 차이보다 더 크다는 것입니다. 하지만 한 언어를 사용하는 사람들 내의 생산성의 분산 정도를 생각할 수 있는데, 예를 들어 C언어에서는 잘 하는 사람과 못하는 사람의 차이가 매우 크지만, Python 같은 언어에서는 그리 크지 않다는 것입니다. 이에 대해서는 Lutz Prechelt의 논문을 참고하세요. 아마 언어간 프로그래머 생산성 차이에 대한 최근 논문 중에서 가장 유명한 논문일 겁니다.

2등은 D라는 비교적 잘 알려지지 않은 언어를 사용했습니다. 일본팀이구요. D언어는 최근들어 뛰어난 개발자 사이에 많은 관심을 받고 있는 언어입니다. C++의 리엔지니어링판이라고 할까요. 무척 실용적이면서 깨끗합니다.

1등은 몇가지 언어를 복합적으로 사용했습니다. 구체적 내용은 그들의 코드와 보고서가 나와야 알겠지만 상당히 흥미로운 전략입니다. 구글의 개발 정책(C++, Java, Python을 공식 언어로 사용)이 생각납니다.

방학을 맞은 학생 등 시간적 여유가 있는 분들에게 제가 위키(맨 하단)에 썼듯이 수상팀이 사용한 언어와 함께 그들이 작성한 코드를 연구해 볼 것을 권하고 싶습니다. 천재들의 머리속을 들여다보는 경험이 될 것입니다.

--김창준