개발&Development/프로그래밍 일반

코더로서 적응해 간다는 것

겐도 2007. 6. 20. 01:39

최근 윗선의 지시로 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 같은) 정도죠. 그 이상은 제가 몰라서 측정 불가인지라 질문을 하지 않습니다. -ㅅ-
기초 지식은 중요합니다. 이것도 없으면 안됩니다. 그리고 더불어 중요한 것은 "활기참"(단어가 적당한지는 모르겠지만 뭐 비슷한)이겠죠.