Google Code Jam Korea 2012 참가후기

2000년도, 첫 직장에 다니던 때에는 ‘10년 경력’이라는 표현은 나와는 상관 없는 일이었습니다. 그저 ‘10년 경력이면 대단한 실력의 프로그래머가 되겠구나’라고 막연히 생각했었죠. 그야말로 어느덧 시간이 흘러 경력 햇수는 쌓였는데, 꼭 그만한 실력이 함께 쌓이는 것은 아닌가 봅니다. 10년 내내 열심히 실력을 연마하지 않은거겠죠.

이 글은, 그런 10년 경력의 프로그래머가 구글 코드 잼 코리아 2012(Google Code Jam Korea 2012)에 참가한 뒤 쓰는 후기입니다.

Google Code Jam

Google Code Jam는 2003년 부터 매년 구글에서 개최하는 프로그래밍 경진 대회로, 참가자가 본인이 선호하는 프로그래밍 언어로 제한된 시간 안에 주어진 복잡한 알고리즘 문제를 해결하는 대회입니다. 매년 수 많은 세계 각국의 참가자가 다양한 프로그래밍 언어로 참가하고 있습니다. 컴퓨터공학을 공부하는 학생이나, 현업 개발자, 아니면 취미로 프로그래밍을 하는 사람들까지 개인 능력을 뽐내거나, 구글에의 취업을 목표로 하는등 다양한 동기로 참가하고 있는 대회입니다.

2012년에는 특이하게도, 한국 지역의 별도 대회가 개최되었습니다. 이름하여 구글 코드 잼 코리아 2012입니다. ‘한국 거주자이면서 한국어를 사용하는 사람을 대상으로 한다’고 명시되어 있었습니다. 매년 수 많은 한국인 참가자의 호응에 힘업어 개최하게 되었다고 적혀있습니다. 아마도, 구글 코리아에서 대규모 채용을 앞두고 열리는 대회가 아닐까 추측해봅니다.

어떻게 참가하게 되었나?

이런 대회가 있다는 것을 제작년에 알았습니다. 제작년에 처음 대회 공지를 보고, 호기심이 일었습니다. ‘참가하면 어떤 성적을 거둘 수 있을까?’ 학창시절 이런 대회에 참가해보지 않은 것에 대한 아쉬움도 있었고, 참가하면 우수한 성적을 거둘 것 같다는 근거 없는 자신감도 있었습니다. 한편으로는 내 실력이 어느 수준인가를 객관적으로 평가 받아보고 싶었습니다.

지금까지 참가 결과

제작년에 처음 참가했을 때는, 아무런 감이 없었습니다. 예선-본선3라운드-아일랜드 더블린에서의 오프라인 결승으로 단계별 진행이었는데, 혼자 착각에는 ‘혹시 결승에 진출해서 아일랜드에 가게되면 휴가 일정을 맞출 수 있을 것인가’를 걱정하기까지 했었죠. 그것 참 걱정도 팔자였습니다.

그 해에는 간신히 예선을 통과하고, 본선 1라운드 참가합니다. 본선 1라운드는 세번의 기회 중 한번이라도 1,000위 이내의 성적을 거두면 본선 2라운드로 진출하게 되는데, 모두 1,800여위의 저조한 성적을 거두며 2라운드 진출에 실패했지요. 사실 이 때 적잖은 충격을 받았습니다. 더블린에 가려면 어떻게 일정을 맞출까 고민하던 자만의 나라에서 거닐다가, 본선 2라운드 진출 실패라는 나락으로 떨어진 충격이 얼얼했습니다.

작년의 두번째 참가 때에는 작전을 바꾸기로 합니다. 코드잼의 출제 문제가, 각종 복잡한 알고리즘과 수학적 문제 해결 능력이 중요한데, 제가 그런 면에서의 경쟁력이 약하다는 판단이 선거죠. 때마침, Seven Languages in Seven Weeks라는 책을 보고 있던 때이기도 했고, 몇몇 새로운 프로그래밍 언어에 관심이 많았던 터라, ‘다양한 언어로 도전하기’라는 번외 과제에 도전합니다. 복잡한 알고리즘 및 수학적 문제 해결의 정면승부에는 자신이 없었으므로, 다른 도전 과제로 자신감 회복을 노려보기로 한 꼼수입니다. 비록 번외였고, 결국 본선1라운드 문제를 단 문제도 풀지 못했지만, 약간의 자신감을 회복하는 결과를 남겼습니다.

올해의 2012년 한국지역 대회의 결과는, 벌써 후기를 올린다는 사실에서 아시는 분들은 이미 예측하셨을지 모르겠습니다. 아직 본선1라운드도 시작되지 않았는데 벌써 후기를 올린다는 것은, 예선 탈락이라는 뜻이지요. 이번 충격은 첫 해의 충격 못지 않았습니다. 예선 탈락은 처음인데다, 한국 지역 한정 대회이니까, 예선 문제가 더 쉽지 않을까 기대했었는데도 한 문제밖에 못 푼 것이죠. 매년 순위가 떨어지고 있는데 문제가 더 어려워졌기 때문인건지, 아니면 제 풀이 능력이 더 떨어진건지, 어쨋건, 예선 탈락은 거의 좌절감으로 이어집니다.

score

가치평가

첫 해의 좌절 이후 줄곧, 그런 생각을 하기도 합니다. “이런 복잡한 알고리즘이나 수학적 문제풀이 능력이 실제 개발 업무에서의 업무수행능력과는 큰 연관이 없다”라고 말이죠. 사실, 대학 3학년 때 알고리즘 수업 이후로, Dynamic Programming이나, Backtracking등을 적용해 볼 기회는 많지 않았던 것 같습니다. 기억에는 “다음 캘린더”서비스를 개발할 때, 일정그래프를 겹치지 않게 그려내는 로직을 구현한 때가 유일하지 않았나 생각됩니다. 그래 실제로 이런 복잡한 알고리즘 외에도 중요한 업무 능력들이 많다며, 이게 다가 아니라고 위안을 삼습니다. 한발 더 나아가서 ‘영어 시험 점수가 영어 실력과 직결되는 것은 아니다’라고 까지 뻗어볼 수 있겠습니다만, 거기까지 가보니 좀 지나친 자기합리화가 아닌가 싶더군요.

분명, 단순히 알고리즘을 구현하고 코드로 문제를 푸는 것 외에도, 개발자 업무에 있어서 다양한 능력이 필요합니다. 네트워크도 알아야죠, 기본적인 서버 운영도 알아야죠, 데이터베이스도 쓸 줄 알아야하는 것은 물론이요, 무엇보다 동료들과의 원할한 협업을 위한 커뮤니케이션 스킬이 가장 중요하다고 볼 수도 있죠.

그럼에도 불구하고, 구글코드잼 같은 경진대회 스타일의 문제풀이가 갖는 가치가 있습니다. 주어진 문제를 제대로 파악하고 이해하는 능력과, 그 문제를 끈기있게 접근해서 풀어내는 능력이 드러난다는 점에 주목해봅니다. 단지 알고리즘 풀이나 수학적 문제 해결 능력에 한정된 업무가 많지는 않을 수도 있습니다만, 기본적으로 어떤 문제를 제대로 인식하고 해결하는 능력은 엔지니어로서 가장 중요한 자질이 아닌가 싶습니다. 구글 코드잼 같은 경진대회가 문제풀이라는 영역으로 그런 자질을 시험해 볼 수 있는 기능이 있는게 아닐까요?

게다가, 주어진 시간동안 집중해서 끈기있게 푸는 근성도 평가됩니다. 길게는 24시간, 짧게는 3시간동안의 집중력을 검증해보는 기회입니다.

또하나 덧붙여서, 영어 읽기 능력에 대한 평가도 겸해집니다. 이번 한국대회야 한국어로 출제됐기 때문에 그렇지 않지만, 세계대회는 당연히 영어로 문제가 출제되기 때문에, 기본적인 영어 해석능력도 평가해볼 수 있습니다. 아무래도 영어 해석능력은 개발업무에 있어 꽤 큰 비중이 있다고 생각합니다.

느낀점

스스로의 프로그래밍 문제 해결 능력을 객관적으로 평가받았습니다. 다른 참가자들의 뛰어난 능력에 감탄하기도 했습니다. 학생때나 그 이후나, 알고리즘 공부를 열심히 하지 않았던 것 같다는 반성도 해보구요. 다시 알고리즘 책을 파고들어서 열심히 준비하면, 조금 더 풀 수는 있을 것 같다는 생각은 들지만, 높은 순위의 사람들처럼 천재적으로 풀어낼 자신은 없습니다.

오랫동안 개발 일을 해왔다는 사실만으로, 내가 프로그래밍을 잘하는 것이라고 착각하고 자만했던 일을 싹 걷어낼 수 있는 계기가 된 것 같습니다. 겸손한 마음으로 더 열심히 노력해야겠다는 생각이 꿈틀꿈틀합니다. 남들에게 잘보이기 위한 겸손이 아니라, 더 열심히 배우기 위한 겸손이 필요합니다.

너무 스스로 기죽는 것을 막기 위해, 좋게 평가하는 부분도 언급해보겠습니다. 한편으로는, 어려운 문제 풀이를 두고, 끝까지 포기하지 않고 도전하는 근성이 만족스러웠습니다. ‘내 현재 능력으로 더 이상 노력한다고 풀릴 문제가 아닌거같아’라고 생각이 들면서도, 매번 마감시간까지 포기하지 않고 도전했던 점은 기특합니다. 아직 내게도 근성이 남아있구나 생각하며 스스로를 토닥여보았습니다.

앞으로의 방향

이 상태로는 더 도전한다고 나은 성적을 거둘것 같지는 않습니다. 차근히 알고리즘 책부터 다시 보며 연습해야 다른 결과를 낼 수 있습니다. 당장 그런 공부를 하지는 않을 것이기에, 올해 세계대회는 아마도 참가하지 않을 것 같군요. 이 분야가 아니더라도 다른 재미있고 제가 더 잘할 수 있는 공부거리가 많이 있습니다. 당장 현업에 필요한 공부거리도 많구요.

코드잼이 아니라, 제가 잘하는 분야에 더 집중해서 장점을 키워나가는게 목표입니다. 하지만, 언젠가 이 굴욕(?)을 씻기 위해 틈틈히 공부하고 연습하고 있을지도 모르겠습니다.