최근 윗선의 지시로 TnC개발자 선발이 약간 까다로워졌습니다. 뭐 G사만큼은 아니지만 뭐 저도 이런 기술 면접을 받는다면 당혹 스럽지 않을까 합니다. 뭐 면접관의 입장이란게 다행인 것 같습니다. 아무튼 선발기준이 달라져도 가장 첫 질문은 바로 이것입니다.

"소팅 알고리즘 몇개 불러보세요."

사실 변경된 조건때문에 개발자를 못구할 수도 있다는 두려움에 윗선의 허락없이 무단으로 정보 누출중입니다. 아무튼 저 질문에 대해 만점은 6개입니다. 앞으로의 괴롭힘 면접에 앞서 몸풀기 문제이자 대학교 처음 들어가서 배우는 것 중의 하나를 질문하여 이후의 질문 방향이 결정됩니다. 참고로, 입에서 "거품"(Bubble)밖에 나오지 않는 사람은 적당히 농담 따먹기 하다가 돌려보냅니다. 반대로 충분한 퀄리티의 답변을 한 사람의 경우 갑자기 면접은 재껴두고 평소 고민하던 걸로 같이 토론모드로 들어갑니다. 일반적으로 토론모드에 들어간 사람들은 그 또한 충분한 대답을 하기 때문에 뭐 거의 합격이죠. 연봉만 합의되면요.

허나! 이 질문의 통과율이 그리 높지 못함을 생각해 보아야 할 것입니다. G사의 "312211" 풀고 계신 분들도 100% 통과는 아닐거라 보입니다. (다음은 13112221 이죠)

회사에서 코더의 위치란 뛰어난 기획자들이 멋진 기획 문서 던져 주면 몇일 밤새면서 타이핑 하는 사람으로 보일지 모르겠습니다. 간혹 "아키텍처"라 불리는 극소수의 사람이 있습니다만 대부분은 키보드만 두드리며 맨날 투정만 하는 족속들이겠지요. 벤처이거나, 규모가 커도 팀단위 혹은 Task Force에서의 코더는 전혀 다른 것을 요구합니다. 갑자기 기획을 요구하죠. 물론 만만한게 기획이라고(-ㅅ-) 코더는 시키는 대로 다 합니다만 그것은 짤리지 않기위하여 아르바이트를 한다고 볼 수 있고 원래 작업인 코딩과 관련해서는 현관을 지키시는 경비원 아저씨보다도 더욱 단순한 작업을 하고 있는지 모르겠습니다. 경비원의 Activity를 보면 코더보다 더 많이 나올거 같군요.

대학의 정규과정중 처음의 필수들로 자료구조(Data Structure)나 알고리즘 정도를 들 수 있을 것 같습니다. 컴퓨터를 한다라고 하면 컴퓨터가 어떤 것을 생각할 수 있고 어떤 것을 할 수 있는지를 일단 알아야 하는 것이겠죠. 어릴때 부터 컴퓨터를 하던 사람들의 흔한 목표인 OS 만들기나 게임 만들기도 이런 베이스가 없다면 불가능 할 것입니다. 웹 프로그래밍이나 최근의 RAD(Rapid Application Development) 계열들은 필요 없을 지도 모르겠습니다. 3개월 PHP 공부하면 게시판은 mysql 붙여서 하나 만들 수 있으니까요. 그러나 적어도 그 다음에는 걸립니다. "좀 빠르게"라는 단어부터 막힐껄요?

잠시 "312211"로 돌아가서, 이것에 대한 해법을 누군가가 "112213"이라고 한 다음 거꾸로 적으면 된다라고 하였는데 이후 (펌질의 영향인지는 몰라도) 다 그렇게 풀고 있습니다. 고등학교까지 <수학의 정석> 몇번째 공식으로 외우고 있나 봅니다. 그래서 이런 글도 있겠죠. 참고로 제가 ACM ICPC 나갔을때 어떤 문제들은 400메가짜리 배열 잡아서 다이나믹으로 해결했습니다. 당시에 윈도우 환경에서 프로그램을 작성하기에 메모리 부족하면 윈도우가 알아서 스왑 잡겠지 하면서 주어진 조건에선 400메가로 되어서 저런 만행(!)을 저질렀습니다. 수능 시험지엔 정답이 있을지 모릅니다. 하지만 세상에 정답은 없습니다.

기획자가 반짝이는 아이디어로 근사한 서비스안을 들고 왔습니다. 그대로 따라하면 근사한 서비스가 탄생할까요? 저는 구현자(Implementer)라는 용어를 사용하는데 설계도가 나왔으면 그 설계도를 현실화 시키는 사람들이 필요하게 됩니다. 사용자가 인식할 수 있게 비쥬얼을 책임지는 사람(코더는 아니지만 잠시 도용)도 필요하고 쉽고 명확하게 브라우저에 뿌려주는 사람 역시 밤새도록 고민해야 하는 것이며 그 서비스의 안정성을 책임지는 사람은 비명 지르고 다녀야 합니다. 기획의 범위안에서 그들은 움직여야 하지만 기획이 전부가 아니고 자신이 맡은 부분에 대해 또다른 고민을 합니다. 그리고 그 고민을 항상 준비하기 위하여 공부하고 자료찾고 남들과 의견을 나누기도 합니다.

회사에 따라 원하는 코더의 스타일이 다르긴 하지만, 그들의 작업도 창조적이라고 인정해 주는 것은 드뭅니다. 흔히 등장하는 이사나 상무, 연구소장이 그들이 할 수 있는 가치있는 작업은 없다라고 생각하죠. 이것에 대한 비난은 전에도 했고 나중에도 하겠지만 이 글에서 지적하고 싶은 것은, 그래서 코더들은 "코더"가 된다라는 것입니다.

최신 언어나 툴에 열광하거나 돈벌겠다고 옷집같은 사업체 차릴 생각, 혹은 반짝이는 전혀 새로운 서비스 아이템을 찾겠노라고 밤마다 별을 처다보는 사람들은 많지만 자신이 하고 있는 작업에 대해 다시 고민하는 사람은 드문 것 같습니다. 처음에 그러던 사람도 "코더"에 적응해 가면서 이미 완료된 작업은 다시 보지 않습니다.


어떤 면접 대상자의 경우(사실 대부분 그렇습니다.) 화이트 보드에 코딩 문제를 풀었는데 대충 완성하더니 저에게 완료되었다고 하였습니다. 돌지도 않는 코드를 말이죠. 그래서 디버깅을 시켰습니다. 드디어 작동은 합니다. 그리고 저에게 자신있게 완료했다고 대답했습니다. 그래서 전 다시 물었습니다. "끝난건가요?". 제시된 코드는 동작은 하지만 몇군데 심각한 오버헤드가 있었습니다. 그런 코드만 가득찬 서비스는 거기서 끝날 것입니다.

그 사람을 비난하거나 타이르고 싶은 생각은 없었습니다. 단지 그의 이력서를 보고 열의에 가득찬 사람이 그렇게 변하지 않았을까 생각이 들었고 결국 그렇기에 한숨만 나올 뿐이죠.

PS.
TnC의 기술면접에 대한 힌트. 면접자에 따라 다르긴 하지만 담당자들이 다 자리에 없으면 제가 보는데 제가 보는 경우 요구하는 지식은 "전산학개론"내지 대학 1~2학년때 배우는 것 정도만 요구합니다. 그리고 전문분야지식(웹이나 PHP, HTML 같은) 정도죠. 그 이상은 제가 몰라서 측정 불가인지라 질문을 하지 않습니다. -ㅅ-
기초 지식은 중요합니다. 이것도 없으면 안됩니다. 그리고 더불어 중요한 것은 "활기참"(단어가 적당한지는 모르겠지만 뭐 비슷한)이겠죠.

  1. Commented by graphittie at 2007.06.20 07:11

    아, 찔려요... 어느 부분에서 찔리는지는 비밀...

  2. Commented by daybreaker at 2007.06.20 15:59

    갑자기 캐관광당한 알고리즘 기말고사가 생각나는....

    시험 범위가 아니었던-_- Quicksort 응용 문제가 하나 나왔는데, 답을 아는 것임에도 불구하고 문제를 너무 어렵게 해석해서 못풀었던 안습한 기억이 나네요...ㅠㅠ 시험 끝나고 애들하고 얘기하다가 "아, 그게 그런 의도였어?! ㅁㄴㅇㄹ" 모드가 되었습니다; orz
    (정작 열심히 공부한 radix sort, shell sort는 안 나오고...)

    올해도 ACM ICPC 나가보기로 했는데, 이쪽으로는 아직 코딩 경험이 너무 없는지라 잘 될지는 모르겠군요. (말로는 어떻게 하면 될지 설명하겠는데 실제 코드로 짜질 못하겠는...) 방학 동안 생각날 때마다 문제 좀 풀어봐야 할 듯.

  3. Commented by 고감자 at 2007.06.20 20:04

    요즘 회사들이 저런 채용방식을 쓰는건 환영할만한 일입니다.

    구직하는 입장에서도 그런 생각할만한 문제를 내는 회사에 가고싶어지는게 사실이더라구요.

    개발자들은 알고리즘에 대해서 항상 고민해야 된다고 생각합니다.

  4. Commented by 이런나쁜미유 at 2007.06.20 22:08

    글읽다가 입이 떡!! 몇일동안 마치고 서점좀 들려야되겠다 생각만하고 다른일이 생겨서 가질 못했었네요-.-..
    저는 어릴때부터 막연히 프로그래머가 되고싶었어요. 근데 우찌우찌하다보니까 웹쪽으로 했다가 어플쪽으로 갔따가 다시 돌아왔는데, 여러가지 많이 공부해야겠더라고요~! 코딩하는게 재미있으니 즐기면서 할테니 많이 가르쳐주세요! ㅋㅋㅋ 이젠 푹 파보겠습니다~!

  5. Commented by rainystar at 2007.06.21 22:03

    그저 존경스러울 뿐...ㅎㅎ
    우리회사가 이런 고민을 가진 개발자들이 많다는 것이 흡족하네요.

  6. Commented by at 2007.06.22 11:25

    비밀댓글입니다

  7. Commented by ghost at 2007.06.22 21:14

    ㄷㄷㄷ 짜장면 먹을 때가 생각 나네요. 알고리듬...

  8. Commented by ghost at 2007.06.22 21:15

    ps...
    ...
    "소팅 알고리즘 몇개 불러보세요."
    ...

    순간적으로

    "소개팅 알고리즘 몇개 불러보세요."

    보인것은 요즘 환경 탓인지....

    • Commented by laziel at 2007.06.29 15:03

      유명한 소개팅 알고리즘으로는.. M/A 알고리즘 (Meal or Alchol Algorithm, 밥 한끼 or 술 한잔)이 많이 쓰이고, 학생들의 경우 Pressure Algorithm (압박, 압력 알고리즘)이나 MGD(먹.고.떨어져) 알고리즘 같은 것도 종종 눈에 띕니다.

  9. Commented by laziel at 2007.06.29 15:05

    그나저나 퀵소트 버블소트 이진소트 밖에 안 떠오르는 걸 보니..
    공부 좀 더 해야 할까봐요 orz;

  10. Commented by skk97 at 2007.06.30 11:40

    난 정말 다행인듯...
    겐도가 면접봤으면 아마 tnc에 입사하지도 못했을텐데...
    소팅 알고리즘이 뭐야? 갈켜줘...

  11. Commented by 지나가는객 at 2007.09.05 16:00

    글쎄.. 프로그래밍은 못하고 기획,사무만 하는 사람이 프로그래머를 비하 하는 뜻같은데.. 솔직이 프로그래머는(저같은경우?) 분석설게 할수있지만 귀찮아.. 창의적으로 만들고 싶지만 귀찮아 왜? 내가 고생하는데?

  12. Commented by h at 2008.11.17 00:31

    면접보고 마니 깨달았습니다;;
    무지함을.. ;;
    그리고 지금 그걸 교훈삼아; 노력중입니다..
    코더가 되고 싶을 따름입니다..;;
    그럼 수고하세요^^

  13. Commented by melt-snow at 2008.12.07 15:14

    안녕하세요. 어제 태터캠프에서 잠깐이지만 직접 뵈어 반가웠습니다(2번째 줄의 제일 왼쪽에 있었습니다). 웹에서 사진을 어디선가 본 기억이 있는데 분석적이고 샤프한 이미지가 그대로 느껴지는 분이시더군요.

    소팅 알고리즘하니 대학생 시절에 고민했던 때가 떠오릅니다. 그런데 지금 당장 본문의 저 질문에 떠오르는 건 버블, 쉘, 퀵 소트 알고리즘 3개밖에 없군요. ^^

    예전에 perl로 만들어진 seit counter라는 통계 프로그램을 만들어 배포했었는데, 내부에서 2중 for문으로 집합 데이터를 계속 다루다보니 소팅할 필요성이 느껴지더군요. 어디서 관련 정보를 찾아야 할지 몰라 OS와 데이터베이스 강의하시던 교수님을 만나 C로 구현된 알고리즘 책을 빌려왔습니다.

    하루의 반나절 정도를 책을 보며 여러 소팅 알고리즘의 소개를 읽고 그중 가장 낫다는 퀵 소팅의 구현을 참조해서 perl로 구현을 시도했었죠. 결과는.. 알고리즘을 제대로 이해 못한 탓인지 퀵 소팅을 구현하는데 실패했습니다. 나중엔 결국 perl 내장 함수로 해결해버렸죠.

    그땐 소팅 방식에 대해 나름대로 깊이 고민도 하고 그랬으나 7년이 지난 지금은 내용도 잘 기억이 안 납니다. 아마 저도 혹시 면접을 볼 계기가 있었다면 바로 저 질문에서 3개 답하고 버벅거리다가 농담 따먹기에 휩쓸렸을지도 모르겠군요. ^^