2015년 08월 02일 (일)
ⓒ 블로터닷넷, 이지현 기자 jihyun@bloter.net
프로그래머만 칠 수 있는 조금 특별한 골프가 있다. ‘코드골프’라는 게임이다. 골프는 타수가 적을 수록 이기는 게임이다. 이 원리를 프로그래밍에 적용한게 바로 코드골프이다. ‘가장 짧은 코드 만들기’라고도 불리는 이 게임은 소스코드 분량을 적게 만드는 것에 도전하는 놀이다. 일본쪽에서는 ‘숏코딩(Short Coding)’이라고 부르기도 한다.
코드골프를 취미로 삼고 있는 강성훈 개발자는 “마치 익스트림 스포츠가 누군가에게 취미인 것 처럼 코드골프도 취미 종류 중 하나다”라며 “개인적으로는 시간 제한이 있는 코드골프 문제도 있기 때문에 코드골프를 위해 그리 많은 시간을 투자하진 않는다”라고 설명했다. 그는 “가장 코드골프를 열심히 했던 시절에도 주말 중 하루 정도 코드골프 문제를 푸는데 시간을 보냈다”라고 덧붙였다.
![Code_Golf_00](http://www.bloter.net/wp-content/uploads/2015/07/Code_Golf_00.jpg)
▲사진: Matt Kuchar via photopin (license)
위키백과에 따르면 코드골프는 1990년대 후반 ‘펄 골프’에서 파생됐다고 한다. 펄은 프로그래밍 언어로, 문법 자체가 다른 언어보다 짧은 게 특징이다. 다른 언어보다 짧은 코드를 만들기 유용해 자연스레 코드골프에 즐겨 쓰였다. 최근에는 펄 언어에 국한되지 않고 루비, 자바스크립트 등 다양한 언어를 통해 코드골프를 시도하고 있다. 웹브라우저에서 직접 코드를 작성하고 결과물을 볼 수 있는 도구들이 많아지며 코드골프를 좀 더 쉽게 할 수 있는 환경이 됐다.
코드골프를 위해 만들어진 웹사이트는 코드 답안을 바로 입력할 수 있을 뿐 아니라 정해진 규칙에 따른 경우에만 결과값을 출력하고, 코드 바이트수를 직접 계산해주기도 한다. 강선훈 개발자는 “코드골프의 그 결과물은 프로그램으로 나오기 때문에 정확한 채점을 할 수 있어 좋다”이라며 “채점 환경에 따라 특정 프로그램을 제대로 동작하지 않는데, 이런 코드를 엄격하게 금지하는곳도 있고 자율에 맡겨 허용하는 곳도 있다”라고 설명했다.
코드 길이가 짧다고 해서 프로그램 결과물이 좋거나 나쁘다고 단정지을 수 없다. 오히려 가독성이 안 좋아질 수 있고, 생산성도 낮아질 수 있다. 실제로 업무상황에서는 코드의 양은 크게 고려되지 않는다. 그렇다면 반대로 코드의 양을 고민하면 어떤 일이 길 수 있을까? 더 나은 알고리즘과 프로그래밍 언어 기초에 대해 더 고민할 수 있다. 발상을 전환하면서 새로운 시각을 기를 수도 있다. ‘더 나은 프로그래밍을 위한 코드골프‘라는 책을 쓴 야나이 마사키즈는 코드골프에 대해 이렇게 서술한다.
“코드골프를 잘 하려면 먼저 프로그래밍 언어의 명세를 숙지하지 않으면 안 됩니다. 또한 문제에 따라서는 알고리즘을 바꾸거나 문제에서 제시된 데이터를 있는 그대로 쓸 것이 아니라, 그 데이터를 생성하는 알고리즘을 고안하는 등의 방법으로 문자수를 줄여나갈 필요가 있습니다. 코드골프는 언어 명세의 지식과 알고리즘에 대한 이해 그리고 유연한 발상을 요구하는 프로그래머를 위한 퍼즐 게임입니다. 그렇다고 하더라도 평소에 이런 식으로 난해한 코드를 작헝하면 대부분 혼날 것입니다. 어디까지나 여유를 가지고 즐기는 놀이입니다.”
- ‘더 나은 프로그래밍을 위한 코드골프’ 중, 야나이 마사키즈 저, 한빛미디어
강성훈 개발자는 “코드골프뿐만 아니라 자기가 해보지 않았던 방법으로 프로그래밍을 하는 것은 유연한 사고를 하는데 도움이 된다고 생각한다”라며 “이런 일을 한다고 당장 협업에서 필요한 개발 역량이 바로 길러지지 않지만 사고의 폭은 넓어질 것”이라고 설명했다.
실력 있는 개발자들이 많이 모여 있다는 구글에서도 코드골프에 대한 관심이 높다. 구글에 근무했던 젠 왕 개발자는 “코드골프가 최근 구글 개발자들 사이에서 폭발적인 인기를 끌고 있다”라며 “코드골프는 서로 배우는 동시에 창의성을 드러낼 수 있고, 실력 있는 엔지니어들의 경쟁심을 자극한다”라고 밝혔다고 <IT월드>는 7월22일 보도했다. 젠 왕 개발자는 “다른 곳에서는 찾아보기 어려운 한 차원 높은 창의성과 솜씨를 볼 수 있다”라며 코드골프의 결과물에 대해서도 만족감을 드러냈다.
코드골프는 천재적인 개발자들이 참여하는 대회일까? 꼭 그렇진 않다. 기존 코드를 좀 더 짧게 만들려는 노력 자체가 코드골프를 하고 있는 것이라고 볼 수 있다. 다시말해 프로그래밍 언어에 관심이 있는 사람이라면 충분히 도전할 수 있는 게임이다. 이제 막 코드골프에 도전하려는 프로그래머라면 사용하려는 언어의 정확한 문법을 공부하고 함수 종류, 실행방법 등을 알아야 한다. 검색 사이트에서 ‘코드골프’라는 키워드를 검색하면 좀 더 다양한 코드골프 문제와 해답을 비교할 수 있다. ‘프로그래밍 퍼즐 & 코드골프(Programming Puzzles & Code Golf)‘는 다음과 같은 코드 골프문제를 공유하고 있다. 문제의 원칙은 출제자에 따라 변한다. 또한 각 언어 별로 최적화된 문제 종류도 다르다.
![Code_Golf_01](http://www.bloter.net/wp-content/uploads/2015/07/Code_Golf_01.jpg)
▲사진 :http://codegolf.stackexchange.com/questions/307/obfuscated-hello-world
‘printf’를 이용해 ‘hello world’라는 문자를 출력하는 건 쉽다. 위 문제를 풀려면 다음과 같은 조건을 지키면서 ‘hello world’를 출력해야 한다.
‘- 입력값을 받으면 안되고, 아래 3가지 규칙중 2개 이상 원칙을 반드시 지켜야 한다.
– “h”, “l”, “w” “d”가 소스코드에 있으면 되지 않는다.
– “e”, “o”, “r”, “0” “1” 가 소스코드에 들어가 있으면 안된다.
– “2” 혹은 “7”이 소스코드에 들어가 있으면 안된다.
![Code_Golf_02](http://www.bloter.net/wp-content/uploads/2015/07/Code_Golf_02.jpg)
▲사진 : http://codegolf.stackexchange.com/questions/28786/write-a-program-that-makes-2-2-5
2와 2를 더해 연산값을 출력하는 건 언어를 공부한 프로그래머라면 충분히 풀 수 있는 문제다. 그러면 2와 2를 더하고 5라는 결과값이 나오도록 프로그래밍을 할 수 있을까? 위 문제는 ‘입력값은 받거나 혹은 받지 않아도 된다’, ‘결과값을 출력할 때 에러메시지가 있으면 안 된다’ 등의 원칙에 따라 문제를 풀라고 제시하고 있다. (☞제출된 답안 보기 (링크))
여럿이 함께 하는 코드골프에서는 좀 더 치열하게 코드 줄 수를 줄이는 도전을 할 수 있다. 이 경우 소스코드가 아주 난해지기도 한다. 실제로 강성훈 개발자는 “2004년 코드 난독화(obfuscation), 난해한 프로그래밍 언어(esoteric programming language)에 관심을 갖다고 코드골프에 자연스레 입문했다”라며 “코드골프 대회는 아니지만 200바이트를 넘는 작은 코드를 만들어 ‘2012년 국제 난독화 C 코드 대회(IOCCC)‘에서 ‘베스트 스몰 프로그램(Best small program)’ 상을 탄 적 있다”라고 설명했다.
현재 국제적으로 열리는 코드골프 대회는 많이 사라졌다. 그나마 찾을 수 있는 대회는 ‘JS1K‘다. JS1K는 개인들이 모여 만든 자바스크립트 코드골프 대회다. 이 대회는 작성된 코드 크기가 1024B(약 1KB)를 넘지 않는 것을 원칙으로 내세운다. 전세계 누구나 참여할 수 있고, 우승 상품도 있다. 정해진 원칙을 지키면서 참여자 중 가장 짧은 코드를 쓴 사람이 그 해의 우승자가 된다.
코드골프 문제만 따로 모아둔 웹사이트도 찾긴 쉽지 않다. 그 대신 스택오버플로우에서 ‘code golf’라는 태그가 삽입된 글을 찾거나 ‘프로그래밍 퍼즐 & 코드골프’를 방문해 최근 제시된 코드골프 문제를 볼 수 있다. ‘아나키 골프‘라는 웹사이트에도 다양한 코드 골프문제를 볼 수 있다.
강성훈 개발자는 “비슷한 성질의 언어를 공부할 때 코드골프를 시도할 수 있다”라고 설명했다. 예를 들어, 파이썬은 알고 있고 루비는 아직 배우지 않는 개발자가 있다고 치자. 이 개발자는 루비로 코드골프를 하면서 언어의 성질을 새롭게 이해할 수 있다. 강성훈 개발자는 “프로그래밍을 이제 막 배운 초급자라면 ‘아나키 골프‘같이 자동으로 문제를 채점해주는 사이트에 들어가 쉬운 문제부터 풀면 좋을 것”이라고 설명했다.
※ 코드골프를 공부할 때 참고할 만한 사이트
- 아나키 골프 공식 홈페이지
- 아나키 골프 문제들
- 프로그래밍 퍼즐 & 코드골프(Programming Puzzles & Code Golf)
- 스택오버플로우에 올라온 코드골프 문제
- 코드골프를 하기 위해 알아야 할 것들 by KLDP 커뮤니티
- Spelt Number to Decimal: 제작 일기 by 강성훈 개발자
- JS1K
- PHP골프
- 골프스크립트
- 펄 골프
※ 참고문헌
- 더 나은 프로그래밍을 위한 코드골프, 야나이 마사키즈 지음, 손정도 김정현 옮김, 한빛미디어
- 알고리즘 트레이닝으로 배우는 코드 단축 기법 Short Coding , 오카다 유우이치 지음, 서수환 역, 한빛미디어
- Code Golf, Wikipedia
- Fore! How code golf became a thing at Google, IT World, 2015.07.22
※ 본 내용은 (주)블로터 앤 미디어(http://www.bloter.net)의 저작권 동의에 의해 공유되고 있습니다.
Copyright ⓒ 블로터 앤 미디어. 무단전재 및 재배포 금지
번호 | 제목 | 조회수 | 작성 |
---|---|---|---|
공지 | [Open UP 활용가이드] 공개SW 활용 및 개발, 창업, 교육 "Open UP을 활용하세요" | 300805 | 2020-10-27 |
공지 | [Open UP 소개] 공개SW 개발·공유·활용 원스톱 지원 Open UP이 함께합니다 | 291293 | 2020-10-27 |
4402 | "국내서도 '오픈플로' 국제인증 가능" | 3196 | 2015-08-05 |
4401 | 시민들이 직접 만드는 ‘오픈백신’ 나온다 | 3156 | 2015-08-04 |
4400 | “‘코드골프’ 한번 쳐보실래요?” | 3264 | 2015-08-04 |
4399 | 데브옵스로 개방형 네트워크 주도, 어떻게? | 3302 | 2015-08-04 |
4398 | 구글, ‘안드로이드 스튜디오’ 1.3 공개 | 3376 | 2015-08-04 |
4397 | 오픈 콘테이너 프로젝트(OCP)의 의의와 가치 | 3294 | 2015-08-04 |
4396 | "스타트업 데이터분석, '아마존 타조'가 제격" | 3293 | 2015-08-04 |
4395 | 대전교육정보원, 하계 체험형 아두이노 프로그래밍 교육 | 3433 | 2015-08-04 |
4394 | 추억의(?) 솔라리스, 클라우드타고 부활? | 3148 | 2015-08-03 |
4393 | 자바 만든 60세 청년 제임스 고슬링..."미래는 선택하는 겁니다" | 3168 | 2015-08-03 |
0개 댓글