스타트링크 라이브 사전 인터뷰: xhae님 Part 1

오늘은 스타트링크 라이브에서 ‘A Fine Way to Solve Problems’라는 주제로 발표를 해 주실 xhae님을 만나 이런 저런 이야기를 나눠보았습니다.
S: 자기소개 해주시죠.
xhae: 안 돼, 인터뷰 시작해야하잖아 그럼!
B: 이미 시작했어..
xhae: 아 싫어!
xhae: 이름은 류현종이고, 가장 유명한 핸들(아이디, 닉네임)은 xhae입니다.
S: 핸들은 무슨 의미인가요?
xhae: 아무 의미 없어요. 많은 사람들이 핸들의 뜻과 읽는 방법을 물어보시는데, 둘 다 모르고요. 그냥 알파벳의 나열이라고 생각하시면 됩니다. 뭐 예를 들어 폴란드어 써 있으면 읽으려고 하지 않잖아요.
S: 왜요 읽을 수도 있죠. 휘바! …그건 핀란드어라고 합니다
xhae: 네 그렇게 사람들이 째라고 읽더라고요.
xhae: 연세대학교 컴퓨터과학과고요. 20대, 20대입니다!
S: 아.. 아직 20대셨어요?!
B: 88년생. 빠른, 빠른 88. 연세대학교 08학번.
S: 그죠 그렇지 않으면 계산이 안 맞으니까..
xhae: 그런다고 계산이 맞을 것 같아요? 빠른 년생이면 계산이 맞을 것 같아요?
S: 아.. 어.. 음?!
xhae: 아무튼 연세대학교 컴퓨터과학과에 재학중이고요, 아직 졸업 안 했고, 발표 날에도 졸업 안 합니다. 지금도 재학증명서가 나와요.
S: 음? 몇 학기 남으셨는데요? 아직 안 끝났어요?
xhae: 아니 아직 졸업식 안 했잖아!
S: 아… 예… 그렇게 학생이고 싶으시다면…
12620892_1077588858927687_1133266313_o
아직 최종학력이 고졸이고 싶으신 현종님.
xhae: 학생이면서, Ngine Studios에서 소프트웨어 엔지니어로 일하고 있습니다.
S: 원래 임시직으로 가신 걸로 알고 있는데..
xhae: 여차저차 하다 보니 당시에 받던 업무를 지금도 계속 하고 있네요.
S: 자기 자랑을 좀 부탁드립니다.
xhae: 자랑이요?.. 제가 딱히 자랑을 할 게 없어요. 제가 (프로그래밍) 대회는 정말 많이 나갔는데.. 리저널(지역 대회)은 10번 갔고, preliminarily contest까지 하면 15번.. 그 외 해외 리저널 인터넷 예선도 가서 트롤도 하고.. 대만 예선에서는 1등도 했었죠.
S: 역시 이벤트전의 강자 답다.
xhae: 아 그렇죠 이벤트전, 전대프연 대회(전국 대학생 프로그래밍 동아리 연합에서 일 년에 한 번 여는 프로그래밍 대회) 1등도 한 번 했었죠.
S: 아 맞아요, 팀 명이 JMBook이었을 때. 역시 이벤트전엔 강하시네요. LG Code Challenger도 비공식 1등 아니신가요. 근데 PS(problem solving, 알고리즘 문제 풀이)계의 홍진호라기엔 2등도… 네…
xhae: 김구라는 어떤가요. 맨날 입은 잘 털고, 정작 대회 땐 맛탱이가 가는..
images
현종씨, HM이예요.  …뭐?
xhae: 아무튼 리저널을 이렇게 나가고도 파이널 라운드에 나가 본 대회가 손에 꼽고요. 월드 수준에서는 딱 하나 나가 봤네요.
S: 어? 무슨 대회죠?
xhae: 뭐 나갔는지 모르지? 제가 무려 티켓 받고 한 번 갔다 왔잖아요. Codeforces에서 했었던 Bayan Programming Contest에 다녀왔어요.
S: 어디에서 열렸나요?
xhae: 이란, 테헤란이요. 테헤란에 대회 하러 가 본 사람 별로 없을거예요. 주. 2002년에 서울대와 연세대가 다녀왔다고 합니다.
여긴 심지어 우리나라에서 직항도 없어요. 가장 저렴한 선택지가 모스크바 경유해서 가는 건데, 정말 오래 걸려요. 그리고 비행기가 싼 이유가 아에로플로트거든요. 그 손님과 짐이 동시에 도착하지 않는 비행기요.
S: 처음 들어요. 짐 잃어버리면 어떻게 되는거죠.
xhae: 모르죠. Kriii가 러시아 월파(월드 파이널) 갔을 때 한국은 여름이어서 반팔 반바지를 입고 갔는데, 러시아는 춥잖아요. 근데 긴팔 옷을 넣어놓은 짐이 안 온 거예요. 그리고 짐은 귀국 날에 왔대요. 그래서 러시아에 도착해서 반팔 반바지 한 벌 가지고 떨었대. 그렇게 아에로플로트가 짐 잃어버리기로 유명한데, 다른 항공사가 카타르를 경유하는 게 있다고 해서 그렇게 갔었죠. 가격이 거의 두 배 차이가 나서, 자비를 약간 들여서 카타르로 갔었고, 간 김에 일부러 환승 텀을 14시간으로 잡아서 도하 관광을 하다 갔었어요. 도착해서 한 6시간 관광하고, 나머지는 라운지에서 좀 쉬고.
S: 대회 관광의 일인자이신 것 같다.
xhae: 아 그건 뭐, 대회 관광 하면 절 따라올 사람이 없죠. 현지 가이드가 1:1로 같이 다니는 관광. 특히 베트남에서 대회 했을 때가 좋았는데, 그 분들이 굉장히 친절했어요. 보통 참가자들이 대회가 끝난 토요일에 돌아가는데, 우리 팀은 놀아야 된다며 일요일까지 남겠다고 했더니, 우리가 사양을 해도 계속 괜찮다며 일요일까지 같이 다니며 안내를 해 줬어요. 물론 그 날 경비는 저희가 댔는데, 그건 당연한거고, 학생 분들이고 일요일까지 가이드를 해 주셔야 되는 것도 아닌데 안내해주시니 고맙죠. 베트남 좋아요. 베트남 가세요. 베트남이 네이티브 스피커 가이드가 한 명 있으면 관광하기 좋아요.
하지만 다낭 베트남에 대해선 많은 이들이 엇갈리는 추억을 갖고 있다고 합니다. 다음 류원하님의 인터뷰를 기대하셔도 좋습니다.(…)
 
S: 또 뭔가 있으실 것 같은데.
xhae: 코더즈하이를 2013년부터 개최하고 있습니다. 나 진짜 안 하려고 했는데..
S: 올해는 언제 하나요?
xhae: 곧? 계획하고 있는 게 많아요. 백준님 개발 많이 하셔야 할 거예요. 생각만 하고 있고 어디까지 실현이 될지는 모르겠는데, 대회 중에 자체검열 같은 것도 생각 중이예요. 막 검열검열한 순간 검열왕김검열 한다거나… 계속 새로운 시도를 하려고 해요. 다른 대회들에 비해서 이해관계가 자유로운 편이기에 얻을 수 있는 이점을 십분 활용해보고 싶은 마음이 큽니다.
B: 큰일이네.. 고민 좀…
S: 엔진에서 하고 계신 일에 대한 간략한 소개 부탁드려요.
xhae: 엔진에서는 사실 프로그램팀 안에서도 저 혼자 독립적인 유닛을 이루고 있습니다. 외주 때 부터 하던 일을 계속 하고 있는데요. 약간 운이 좋았던 게, 외주를 들어갔을 때, 외주니까 게임 개발을 시키긴 어렵잖아요. 그래서 그냥 기획서도 주지 않고 이런 거 만들어 봐라 하고 독립된 일을 줬는데 알아서 잘 만드니까 계속 독립적인 일을 줬던 것 같아요. 팀 명도 있어요. ‘Area 51’인데 이사님이 예전부터 꼭 팀 명으로 붙여주고 싶었던 이름이라고 해요. 무슨 뜻인지 아시나요?
B: 그거, 외계인 연구..
xhae: 네 맞아요. 그런 새로운 것들을 연구하는 리서치 랩을 만들고 싶다는 뜻에서 붙인 이름입니다.
S: 굉장히 특이하네요.
xhae: 게임 회사에서 이런 똘끼(?)를 발산하는 것도 전 긍정적인 면이 있다고 봐요. 재미있었던 일례로 최근에 게임 프로덕션쪽에서 검수받을 아이템 중에 완전 쌩 녹색 염색약 아이템 설명에 R 0 G 255 B 0이라고 해서 올렸는데, 넥슨에서 설명을 깜빡하고 그냥 보낸 줄 알고 ‘적절한 아이템 디스크립션을 써 주셔야 한다’고 와서, ‘이것은 기획 의도입니다’라고 답변을 했었죠.
스크린샷 2016-01-24 오후 7.37.16.png
룩덕질을 위해 채집쯤이야! 엔진스튜디오에서 개발한 재밌는.. 아르피엘 두 번 하세요. (출처: 나무위키 아르피엘 항목)
xhae: 아무튼 Area 51에서는 소위 빅데이터를 다룬다고 보시면 될 것 같습니다. 우리의 게임에 대해 더 잘 이해를 하고 싶은데, 우리가 생각하는 방법과 사람들이 실제 프로덕트를 이용하는 데는 갭이 있을 수 밖에 없죠. 이걸 보기 위한 모든 일을 하고 있습니다. 데이터 수집 플랫폼과 수집부터, 데이터에 대한 분석까지 하고 있죠.
S: 게임 쪽이 데이터가 많이 쌓일 수 밖에 없는데, 이걸 어떻게 해 보려는 시도가 많지는 않은 것 같다. 엔진이 어떻게 보면 스타트업인데, 이런 시도를 하고 있는 게 놀랍다.
xhae: 이사님이 넥슨에서 데이터 분석을 하시던 분이라 이런 쪽으로 인사이트가 있었고, 하고 싶은 게 있었는데 마침 인력이 있어 시작하게 된 거죠. 저도 당시 외주를 엔진 뿐만 아니라 다른 곳에서도 제의를 받았는데, 당시 페이스북에서 하둡을 하다 왔고, 이런 일을 제의하기에 엔진으로 오게 되었고요.
S: 하고 싶은 거 마음대로 할 수 있어서 재미있겠어요.
xhae: 하고 싶은 걸 시켜준대서, 제 마음대로 하라고 해서 온 거죠. 동시에 부담감도 있긴 해요. 퍼포먼스가 좋지 않을 땐 힘들죠.
xhae: 데이터 분석 이외에도 내부에서 사용하는 툴을 만들거나 개발공정 개선 등 회사의 퍼포먼스를 높일 수 있는 모든 업무를 구분짓지 않고 하려고 해요. 코드 리뷰 툴을 처음으로 도입했고요. 프로덕션에 계신 분들은 컨텐츠를 만드느라 바쁘시지만 저는 외부에서 바라보는 입장이다 보니 조금 더 코드를 객관적인 입장에서 바라볼 수 있는 것 같아요. 그레서 리뷰를 하면서 간혹 구조를 바꿔 다시 코딩을 하길 제안하기도 하고 그러죠.
S: 발표하실 내용에 대해 간략히 소개 해주세요.
xhae: 발표할 내용이요? 하하. 발표를 하라고 하시더라고요. 주제는 안 주고. 처음에는 뭐, 나의 ICPC(국제 대학생 프로그래밍 대회) 답사기를 하라고… 내가 그렇게 해서 마지막에 월파를 갔으면 몰라. 아무튼 그래서 가장 자주 듣는 질문 중에 하나인 ‘이거 하면 현업에 도움이 돼요?’에 대한 이야기를 풀어보기로 했습니다. 많은 사람들이 이런 질문을 하기도, 듣기도 했고, 저 스스로도 많이 고민했던 문제인데, 지금은 생각이 좀 정돈된 것 같아 많은 사람들과 생각을 나누고 공감할 수 있는 시간이 될 수 있지 않을까 생각합니다.
좀 더 자세히는, 실제 개발, 소위 현업에서의 개발과 문제 풀이가 일반적인 생각처럼 그렇게 동떨어져 있지 않다는 이야기를 하고 싶어요. 저는 둘 다 ‘프로그래밍’이라는 좀 더 큰 카테고리에 묶여서 공통점을 많이 가지고 있다고 생각하고, 그리고 둘을 같은 작업으로 생각하면서 코드를 짜려고 하고 있어요. 그게 저한테 많이 도움이 되었죠. 어떤 부분이 비슷한지, 제가 왜 그렇게 생각하는지에 대해 이야기를 풀게 될 거예요. 예를 하나 들자면 필드에서나 PS에서나 코드를 예쁘게 짜라고 권장을 하는데, 어떤 사람들은 ‘뭐하러 예쁘게 짜나. 그냥 빠르게 돌아가기만 하면 되지’ 하고 생각할 수 있잖아요. 문제풀이에서는 오히려 불리하다고 생각하는 사람도 있고요. 하지만 전혀 그렇지 않고, 두 분야 모두 같은 이유에서 예쁜 코드를 짜는 게 좋다고 생각해요. 이런 이야기와 제가 생각하는 이유에 대해 말씀드리게 될 것 같습니다.
S: 알고리즘 문제 풀이를 하면서 도움이 되었던 일이 있다면 들려주세요.
xhae: 제가 회사에서 했던 일 중에 하나가 렉서(lexer)를 만들어야 했던 적이 있어요.
S: 렉서가 뭐죠?
xhae: 프로그램이란게 시멘틱(sementic)과 신택틱(syntactic)으로 이뤄져 있잖아요. 신택스 쪽을 쭉 읽어 주는게 렉서인데, 코드를 쭉 읽으면서 문법적으로 분리를 하는거죠. 이건 선언자, 이건 변수명, 이건 함수 이름… 이런 식으로요.
S: 아 그러니까 파스 트리(parse tree)를 만드는 그런건가요?
xhae: 네 그런 거죠. LR 파싱 그런 거 있잖아요. 회사에서 어떤 언어를 사용중인데 지원하지 않는 기능때문에 약간 개량을 해야 했어요. 그래서 직접 렉서를 짜야 했죠. 사실 렉서라는게 아까 말하셨듯 트리를 만드는 기계이고 기계가 상태 transition을 하며 왔다갔다 하는 건데, 그게 오토마타고, 오토마타는 곧 DP(dynamic programming)죠. 물론 모든 부분을 제가 직접 구현한 건 아니고 라이브러리를 가져다 썼지만, 그 안에서 금방 이해하고 바로 코드를 짤 수 있었던 이유도 제가 오토마타가 DP라는 개념을 갖고, 오토마타를 직접 만들어보고 했던 경험 덕분이었어요. 그런게 바로 기본기이고, 알고리즘 문제 풀이가 이런 기본기를 다져준다고 생각해요.
그것 외에도 보통 OS가 스케줄링을 한다고 말을 하는데, 사실 스케줄링은 OS 뿐만 아니라 일반 프로그램에서도 늘 있는 일이잖아요. 일들이 쌓여있으면 어떤 건 먼저 하고, 어떤 건 나중에 하고.. 이런 건 OS뿐만이 아니라 많은 프로그램에서도 스케줄링이 필요한 일들이 많은데, 몰라서 못 쓴다고 생각해요. 스케줄러를 O(n lg n)으로 짜느냐, O(n^2)으로 짜느냐, O(n)에 짜느냐 많은 선택이 있는 상황이라면 작은 프로그램이면 n^2으로 짜도 되는데, 규모가 더 커지면 선택이 조금 더 의미가 있게 되죠. 제가 지금 이번에 만드는 데이터 플랫폼은 글로벌 사이즈를 염두에 두고 만들었는데, 이런 것에 대한 알고리즘적 지식이 덕분에 수행시간을 많이 줄일 수 있었어요. 그렇지 않았다면 아마 머신 수를 늘리려 했겠죠. 가장 초기버전을 패럴렐하게 샤딩해서 한 20대쯤 붙이면 지금 버전의 성능이 될 것 같네요. 이렇게 샤딩으로 해결할 수 있는 일들도 있지만 이게 불가능한 일도 있어요. 그런 경우야 말로 몰라서 못하는 게 아닌가 그렇게 생각을 해요.
이렇게 지식 자체가 도움이 되는 경우도 있고, 수학적으로 깔끔하게 정리해보고 모델을 세워본 경험도 도움이 많이 됩니다. 깔끔한 모델링과 간결하고 실수의 여지가 없는 코드를 만드려는 노력과 경험이요.
S: 알고리즘 문제 풀이가 굉장히 정제된 상황에서 이루어지기 때문에 오히려 현업과 괴리가 있다는 비판이 있는데, 정반대의 의견이시군요.
xhae: 뭐 그런 의견에 대해서는.. 일단 정제된 것 부터 풀고 말씀하시라고 하고 싶은데… (웃음)
정제되었다는 말을 다시 생각하면 트레이닝 하기 좋은 셋이라는 이야기 아닐까요? 듣기로는 류원하님이 발표에서 이런 얘기를 하실 거라고 하는데, 문제 풀이만 해 본 사람은 그런 이야기대로 정제되지 않은 상황을 처음 맞닥뜨렸을 때 당황할 수는 있어요. 하지만 안 해 본 사람보다는 훨씬 낫다고 생각해요. 문제 풀이만 해 본 사람은 일이 10이면 그 중 5만 해 보고 5는 안 해 봐서 당황할 수 있겠지만, 10을 안 해 본 사람보다는 나을 가능성이 높지 않을까요?
물론 알고리즘 문제풀이를 탑 레벨로 하려는 노력이 현업 실력을 향상시키기에 시간대비 효율이 가장 좋냐고 물어본다면.. 그건 잘 모르겠어요. 과연 정답이 있는 길인가 싶기도 하고, 사실 그런거에 대해선 신경 써 본적도 없고요. 하지만 문제풀이가 마이너스인 건 절대 아니고, 도움이 된다고 말씀 드릴 수는 있습니다.
S: 프로그래밍과 알고리즘 공부는 어떻게 시작하게 되었나요?
xhae: 저요? 아빠가 시켜서. (웃음)
집에서 초등학교 때 문 열고 나가면 또래 친구들도 없고 아무도 안 사는, 주변에 논밭있는 그런 곳에서 살았어요. 김제 호남평야요. 그래서 항상 심심하게 혼자 지냈는데, 어느 날 아버지가 컴퓨터를 사 오셨어요. 재밌더라고요.
S: 그 때면 컴퓨터가 어느 정도일 때였죠?
xhae: 펜티엄 처음 나왔을 때였죠. 펜티엄 1, 지금도 사양이 기억 나는데, 100MHz 16M. 게임을 정말 많이 했어요.
S: 그 사양으로 할 수 있는 게임이 뭐가 있었죠…
xhae: 너구리.. 뭐 다 아시면서. 윈도우즈 나온 뒤엔, 파랜드 택틱스, 삼국지 등등 많았죠. 아무튼 MS-DOS 때부터 게임을 계속 하는데, 아시다시피 그 땐 게임 하려면 컴퓨터를 잘 알았어야 했죠. 뭐, 잘까진 아니어도 어느 정도는 알아야 하니까, 그 당시 하우투피시라는 잡지가 있었는데 그걸 집에서 할 일이 없으니까 한 글자도 안 빼고 다 읽었어요. 아버지가 애가 그러고 있는 모습을 보시고, 또 컴퓨터를 좀 쓸 줄 안다 싶으셨나 봐요. 아버지가 교사 출신이셔서 정보올림피아드에 대한 정보를 알고 계셔서 프로그래밍 공부를 권유를 하셨죠. 그래서 프로그래밍을 해 봤죠. 김제에 살다가, 나름 도시, 인구 30만의 익제로 이사를 갔어요. 거기 월X, 온X 같은 학원은 없었고, C언어 책을 가지고 동네 컴퓨터 학원에서 배웠죠. 그렇게 언어를 다 배우고 나니, 정보올림피아드 문제는 학원에서 못 풀어 주더라고요. 그래서 혼자 공부하고, koi4u등의 커뮤니티에 올라온 강의를 보거나 질문을 하면서 배웠어요. 문제를 풀면 재밌어서 계속 했지만, 수도권 학생들을 따라잡을 수는 없었죠. 중학교 때 어떻게든 전국대회 한 번 나가본 게 다였어요. 그래서 고등학교를 진학하고는 포기를 하려고 했었죠.
S: 고등학교를 특이한 데를 가셨죠.
xhae: 네 뭐, 고등학교를, 강원도 어디엘 갔죠.
S: 그 한복 입는..
xhae: 아무튼 그렇게 성적은 안 좋고 해서 포기를 하려고 했는데, 이도경을 알게 됐죠. 어쩌다 알게 된 친구, 그냥 재밌게 같이 놀던 친구였는데 어느 날 자기가 정올을 한다는 거예요. 그래서 뭐, 그래 정올 해봐야 뭐 나랑 비슷하겠지, 그렇게 생각했는데 (웃음) 알고보니 국대 금메달이더라고요. 국대 금메달인데, 어우, KOI(한국 정보올림피아드) 만점이래. 근데 자꾸 지가 못 푼 문제를 나한테 줘요, 풀어보라고. 걔한테 코 꿰어가지고, 고등학교 때 성적이 좀 올랐죠. 그러다가 대학교 와서는, 아시다시피 연세대잖아요. 대회도 별로 안 하고.
S: 왜요, 현종님 선배들은 굉장했잖아요.
xhae: 네 그랬는데, 그 이후로 대가 끊기다시피 한 상황이었죠. 주변에 같이 나갈 사람도 없고, 준비하겠다는 사람도 없고. 여기서 대회는 끝인가 싶었죠. 그런데 구종만님이 학교를 다니고 있더군요. (웃음) 그 뒤로 싸우기도 많이 싸웠지만.. 구종만님께 많이 배웠죠. 그 형에게 코딩 스타일도 많이 영향을 받았고. 깔끔하게 코드를 짜는 습관같은 건 모두 구종만님의 영향이예요.
S: 맞아요. 깔끔한 코드, 그리고 기본기를 많이 강조하는 스타일이시죠.
xhae: 그 분이 정말 노력을 많이 하는 분이죠. 정제된 환경, 많은 문제 풀이 횟수, 스스로 끊임없이 리뷰를 하고 정리해서 실수를 줄이고 깔끔한 코드를 짜고 퍼포먼스를 올리는 타입이요. 저도 원래 약간 그런 타입이었지만, 종만님에게 받은 영향이 정말 컸어요. 그 사람이 없었으면 같이 나갈 사람도 못 만났을 거고, 어떻게든 ICPC는 나갔겠지만 좀 해 보다가 성적 안 나오면 그만 뒀을 것 같아요. 지금처럼 대회를 챙겨 나가고, PS를 꾸준히 하진 못했을 거예요. 그 형이 막 새벽 3시에 같이 신촌에서 술 먹고 돌아와서 같이 SRM(TopCoder의 algorithm분야 sigle round match)하자고 하고 그랬어요. 같이 돌았죠. 둘 다 취해서 250(한 매치에서 보통 가장 쉬운 문제) 못 풀고.. (웃음) 그렇게 놀면서 대회를 했죠.
스크린샷 2016-01-24 오후 7.48.49
발머 이론은 이론일 뿐. (출처: xkcd) 혈중 알콜 농도를 측정해 스름 레지를 취소하는 기능이 시급합니다.
xhae:운이 좋았다고 생각해요. 학원도 한 번 다닌 적 없었고, 다닐 생각도 없었지만 어쨌든 계속 문제를 풀다 보니 주변에 한 둘쯤 도와주고 같이 할 사람을 만나서 남들보다 좀 더 쉽게 좋은 연습 소스를 접할 수 있었죠. 대회가 재밌어서 계속 하다 보니 도와줄 수 있는 좋은 사람들을 만나게 된 거죠. 역시 문제 푸는 걸 즐기는 게 가장 컸어요.
S: 뭐, 아무래도 혼자 하면 재밌기 힘들죠.
xhae: 재밌기도 힘들고, 올라가긴 더 힘들고. 올라가기 힘들어서 지치죠.
S: 알고리즘 문제 풀이 대회를 하면서 제일 재밌었던 일은 뭔가요?
xhae: 음.. 그렇게 딱 물어보면 생각나는 건 없더라고 항상.
S: 그렇죠. 근데 다들 하나씩 기억에 남는 문제는 있던데.
xhae: 아 있죠. 저 아직도 기억하는데 2009년 일본 E번 Origami Through-Hole이라고..
S: 윽, origami 듣는 순간 부터 변태같은 문제일 것 같다.
xhae: 어.. 그거를 대회를 한 팀이 풀었는데요. 문제 설명해드려요? 정사각형 색종이가 주어지고, 직선 10개가 주어져요. 그 직선을 따라 순서대로 접는 거예요. 그런 다음에 핀을 꽂는 포인트를 한 군데 알려줘요. 그럼 그 핀이 종이를 몇 번 통과하는가를 구하는 문제였어요. 이 문제를 대회 땐 못 풀었고, 동경대도 못 풀었는데 북경대가 풀었죠. 근데 북경대 1등 못했어. (웃음) 패널티로 갈렸는데.. 이 문제가 와 진짜, 진짜 트라우마였고 이걸 제가 9K에 짰는데, 거의 이걸 짜면서 제 기하 라이브러리의 2/3정도가 완성이 되었어요. 점 짜고, 세그먼트 짜고, 직선 짜고, 컨벡스 커팅 짜고..
S: 현종님의 기하 사랑이 여기서부터 시작된건가요.
xhae: 기하가요, 제가 아까 말한, 소위 잘 정제된, 구조화된 코드와 잘 맞는 게 기하예요.
S: 왜죠? 뭐 그래프라고 생각하는 사람도 있을 것 같은데요.
xhae: 그렇긴 하죠. 제가 그렇게 생각하는 이유는 이거예요. 기하에는 native 자료형으로 대표될 수 없는 추상적인 개념이 많잖아요. 점, 세그먼트, 세그먼트는 두 개의 점, 직선도 두개의 점, 방정식, 벡터… 그래서 포인트 두 개가 세그먼트를 만들고, 세그먼트들이 모여서 만드는 게 컨벡스 내지 폴리곤… 이런 식으로 이 구조, 내가 새로 만든 형태들이 네이티브 자료형처럼 서로 인터렉션을 잘 하도록 코딩을 해야 하죠. 이런 유닛 하나 하나들이 잘 돌아가면 그런 것들을 합친 기하 요소들이 잘 돌아가는지 걱정을 하지 않아도 되잖아요. 이런 추상적인 기하 요소들을 그렇게 잘 포장을 한다는 측면에서 저는 매력을 느끼는 것 같아요. 그리고 기하가 보통 예제가 나오면 딱 답이 나오잖아요. 코드를 5K를 짰는데 와, 맞았어. 그 때의 쾌감도 있죠. 그러니까 기하는 다른 문제에 비해, 열과 성을 다해서 풀면 맞잖아요. 아 뭐 요새는 꼭 그렇지도 않은데.. 그래도 마지막 남은 시간 동안 ‘뭐 풀지?’ 하는 시점이 오면 마지막 남은 한 시간 투자해서 이거 하나 맞자 하고 잡게 되는 게 기하라고 해야 하나.
S: 어떻게 보면 약간 잡았을 때 모 아니면 도 같은 거?
xhae: 할게 없으면 하는거죠. 사실 저도 실제 대회에서는 할 게 있으면 안 해요. 근데 진짜 모 아니면 도 같긴 해요. 한 시간 투자해서 이걸 맞아야 겠다 이런.. 근데 뭐 그런 게 아니라도 잡을 게 없으면 잡을 수 있죠. 그걸 훈련이 충분이 된 사람이면.. (풀 수 있는거고.)
카이지_01_치아푸푸_109
이제 무슨 문제를 잡지?!
S: 프로그래밍을 잘 한다는 건 어떤 걸까요? 그리고 잘 하려면 어떻게 해야 할까요?
xhae: 아 사전 질문 리스트를 받았을 때 굉장히 고민한 질문이예요. 제가 평소에 하던 말 중 하난데, 프로그래밍은 먼저 우리가 표현하고자 하는 바가 있고, 원하는 로직의 스텝에 맞춰 하나씩 하나씩 생각을 써 나가는 과정이라 생각해요. 예를 들어 어떤 변수 하나를 선언하는 데 있어서도 어떤 의미가 있어요. 우리의 머리 속에 무엇을 저장하고 어떻게 값을 바꿀 지 생각한 걸 코드로 옮기는 거죠. 그런 의미에서 프로그래밍 툴이 아니라 프로그래밍 언어라는 표현은 정말 적절한 단어의 조합이라고 생각해요. 우리가 생각을 한국말로 표현하듯이, 생각한 로직을 프로그래밍 언어로 표현을 하는 거죠.
언어와 비슷하다는게 이게 또, 프로그래밍 스킬의 습득도 언어와 비슷한 점이 굉장히 많아요. 말을 배우기 위해선 많이 써 보고, 많이 말 해 보고, 많이 노출이 되고, 많이 연습을 해 봐야 하죠. 예를 들어서 영어를 잘 하고 싶으면 한국인이 아무도 없는 미국에 가서 6개월동안 그냥 살다 오면 말이 트인다고 하잖아요. 글도 학원 가서 문단 형식을 배운다고 느는 게 아니라 스스로 글을 써 보고, 좋은 글을 많이 읽어 봐야 하죠. 프로그래밍 습득 과정도 언어 습득에 1:1로 매칭을 시켜보면 거진 맞다고 생각해요. 왜냐하면 프로그래밍 언어가 하는 일이 일반 언어랑 똑같기 때문이죠. 우리의 생각을 표현하는 거요. 그런 면에서 수학 공부도 도움이 된다고 생각해요. 수학이 논리를 표현하는 언어니까요. 논리적으로 깔끔한 표현을 할 수 있게 하는 여러 theorem들을 익히면서 그런 연습이 되는 거죠. 프로그래밍이 어떤 일을 하는 건지 생각해 봤을 때 제 생각은 그래요.
S: 이런 두루뭉술한 질문에 이렇게 멋지게 답해주시다니.
B: 멋지네요.
xhae: 왜냐면 평소에 이런 질문을 많이 들었고, 저도 굉장히 고민했던 질문이니까요. 처음에 이 질문을 봤을 때, 와 뭐지, 이걸 어떻게 대답하지 했는데 생각해보니 이런 말을 제가 했던 적이 있더군요. 제가 평소에 혼자 있는 걸 즐기는 편이고, 그럴 때마다 이런저런 잡생각을 많이 하는 편인데 주변 이런 저런것들을 보면서 이유가 뭘까 생각도 해 보고..  이런거 생각 많이 해요. 꼬리에 꼬리를 물고..
S: 특별히 알고리즘 문제 풀이 공부를 한 방법이 있나요?
xhae: 저는 그렇게 퍼포먼스가 좋은 축에 든 것 같진 않아요.
S: 그럼 반면교사로.
xhae: 아, 이렇게 하면 안된다? 아닌데. 전 제 방법이 틀리다고는 생각 안 해요. 그냥 노력의 차이였던 것 같아요. 난 그렇게 열심히 안 했던 것 같아.
S: 그래요? 결과론적인 건 아니고요?
xhae: 아니 그런 건 아니고, 정말 우리나라에서 세계를 찍고 다니는 탑들은 저보다 훨씬 열심히 했어요. 글쎄, 방법 자체는 남들과 딱히 다를 건 없었던 것 같네요. 셋 있으면 연습 하고, 틀리면 찾아 보고, 짜 보고 그랬죠. 요새는 그렇게까진 잘 안하는데, 한참 대회 준비할 때는 남 코드를 무조건 많이 보면서 어떻게 더 예쁘게 짤까를 계속 고민했어요. 짧으면서 좋은 코드라던가, 유명한 사람 코드는 다 봤어요. 요즘은 조금 ‘아, 맘에 안 드는데..’ 싶으면 가끔 보고 그러죠. 연습은 자체는 그렇게 하고, 빈도에 대해선.. 리저널 나가기 전에 전년도 아시아 리저널은 다 풀고 나갔던 것 같아요. 한다는 애들은 뭐 셋이 없어서 못 풀기 때문에.. 이런 부분은 별로 차이가 없을 것 같네요. 셋이 있는 대로 다 돌았죠 뭐. 그리고 탑코더 SRM 하고요.
지금 와서 했으면 좋았을 걸 후회하는 건, 풀지 않고 넘어간, 소위 버린 문제가 많았던 거요. 버린 문제 하나 안 버릴 때마다 지금보다 실력이 늘지 않았을까 생각을 하죠. 당연한 말인데 안 버리고 끝까지 하기가 엄청 힘들죠.
S: 뭐 버리는 데는 버렸던 이유가 있을 텐데.
xhae: 그래도 내가 세계대회를 나가겠다고 노리는 시점에서는 풀어내야 했던 거죠. 그리고 높은 확률로 내가 이해할 수 있었던 솔루션이라고 생각하는데, 근데 안 풀었던 문제들, 내 수준에서 좀 더 노력하면 풀 수 있을 것 같은 문제.. 사실 그런 것들을 풀었을 때 돌아보면 쌓이고 쌓여서 스텝업이 되어 있는 거라고 생각을 해요. 문제 푸는 연습이 눈에 보이는 게 아니잖아요. 다이어트 같은거죠. 정신차려보면 늘어 있는 건데.
S: 다이어트라니.. 그렇기 때문에 더 어려운 거 아닌가요!
xhae: 그러니까 탑 라이너들은 그게 즐거운 사람들인 거죠. 다 목표가 있잖아요. 내가 월드 파이널에 나가기 위해서 좀 더 풀어봐야겠다 이런 것들이요. 그런데 사실 목표가 그런 것이 된 시점에서는 대회가 재밌으니까 하는거죠. 그래서 지속할 수 있는 연습이 제일 중요한 것 같아요. 지속하려면 대부분의 경우는 그걸 즐길 때 가능한 것이고요. 결국 문제 풀이를 즐거워하는게 가장 중요한 연습의 소스가 아닌가 싶어요.
S: 근데 사실 대회를 준비하는 사람이나 준비 해보려는 사람들 중에서 필요에 의해서 하게 된, 이게 즐겁기만 하진 않은 사람도 있을텐데. 분명 하다 보면 어렵고, 재미없다 느끼는 시점도, 그렇게 느끼는 사람도 있을것 같다. 재미가 없으면 관둬야 하는건가? 재미 없어 본 적이 없나?
xhae: 저 그렇게 지칠 정도로 열심히 해 본 적이 없는데.. 그냥 오래 하고 많이 하는 거지. 그리고 어쨌든 대회를 재밌다고 하는 사람도 백 인 백 색이잖아요. 재미가 있는 이유도 다르고, 좋아하는 문제의 형태도 다르고, 좋아하는 대회도 다르고 다 달라요. 저를 비롯해서 그런 사람들이 각각 자신이 이 대회를 재밌어하는 이유에 대해서 설명해 줄 수는 있지만, 그런 얘기들에 지금 망설이는 사람들이 공감을 할 수 있을 지는 잘 모르겠네요. 이 질문에 좀 더 그런 사람들에게 도움이 될 만한 답을 하자면, 자기가 왜 대회를 하려고 하는지를 잘 봐야 할 것 같아요. ‘내가 대회를 또는 알고리즘 문제 풀이를 왜 하려고 하지?’ 이런 질문을 스스로 많이 던져 봐야죠. 그 사람이 스스로 재밌어서 대회를 하려는 사람일 수도 있지만, 그렇다기 보다는 이게 취업에 도움이 된다니까 당면한 취업 스테이지를 클리어하려고 시작하려는 사람일 수도 있겠죠. 그러면 그런 사람은 취업을 동기삼아 문제 풀이를 즐기면 되는 거예요. 목표가 있으면 사람이 하게 되잖아요. 그게, 어떤 이유였던간에, 이미 즐기는 과정이고 원동력이라고 생각해요. 예를 들어, 삼성? 코딩 인터뷰 하는 기업이 뭐가 있죠? 구글? 그런 곳 인터뷰 준비를 하겠다고 한다면 커리어컵 같은 데 가서 기출문제들을 풀어보는 거예요. 그런걸 찾아서 클리어하는 과정이 누가 시켜서 하는 게 아니고, 어찌 됐든 자발적으로 하는거잖아요. 내 목적을 잘, 내 안에서 고민 해보고, 그 목적을 굳게 가지고 있는 게 가장 큰 원동력이 되지 않을까 싶네요, 누구에게나.
여기까지 인터뷰를 하고 우리는 모두 지쳐 산낙지를 먹으러 갔다고 합니다. 다음에 이어질 xhae님의 인터뷰 2부와 류원하님의 인터뷰도 기대해주세요.

스타트링크 라이브 사전 인터뷰: xhae님 Part 1”에 대한 답글 2개

댓글 남기기

About 선0

자칭 미녀 개발자. (어째선지) 타칭 알고리즘 마녀. 코드는 산뜻하게, 글은 쫀득하게 휘갈기는 스타트링크의 감초 귀염둥이 CTO입니다.