Tuesday, December 2, 2014

개발자 면접 코딩 테스트 과연 옳은 일인가?

개발자를 채용하는 과정에 있어서 능력을 측정하는 방법은 여러가지가 있는 것 같다.
구글의 화이트보드 pseudo code 테스트라던가 일부 회사들의 코딩 테스트에 대한 이야기는 뭐 검색만 조금 해봐도 유명한 방법 중에 하나일 것이다.

그런데 난 여기서 조금 문제가 있다고 본다. 그 이유는

경력의 경우 대체로 경력이 많을 수록 더 많은 언어와 더 많은 프레임워크 더 많은 개발 도구를 경험했을 터인데 그런 사람들에게 고작 테스트 한다는게 소트 알고리즘 아나 모르나 칠판에 써가면서 혹은 종이에 펜으로 써가면서 그걸 지켜보고 있는게 과연 옳은가? 이다.

물론 언어가 중요하지 않고 문제 해결 능력만을 본다고 했을 때 좋은 테스트 방법이라고 생각하는 사람이 있을 수는 있다.
하지만 요즘 같은 시대에 소트 알고리즘을 만들어서 쓰는 사람이 과연 얼마나 되는지 묻고 싶다. 알고리즘이야 검색만 하면 다 나오고, 심지어 알고리즘 코드를 만들지 않고 인터페이스 구현 (IComapre 같은) 후 알고리즘 함수 호출 한번으로 해주는 방법도 있는데 굳이 그런걸 평가하는건 옳은 건 아닌 것 같다. (오히려 C++의 STL이라던지, C#의 Sort 하기 위한 인터페이스 구현 방법 등을 물어 보는게 나은 거 같다)

여기에 수긍이 가는 좋은 글이 있어 링크를 걸어 본다.
Putting Developers to the Test

요지는 개발자들이 개발을 하는데 화이트보드에 써서 개발하지 않고 최적화된 개발툴과 거기에 맞는 OS, Framework, 개발 언어를 적절하게 선택해서 빠른 시간에 개발할 수 있는 능력을 테스트 하는게 맞다고 하는 글이다. 마치 화이트보드 코드 테스트는 잘못된 거라고 비웃듯(?) 써 놓은 글이다.

나도 면접 때 종이에 버블 소트 알고리즘에 대해 구현해 보라고 했던 적이 있었는데, 적잖이 당황했었다. 버블 소트 알고리즘을 알고 구현하는 과정이 옳은가? 에 대한 걸 평가하는 거라면 뭐라 할 말은 없지만, 버블 소트 알고리즘을 코드로 구현 가능한가?에 대한 평가라면 잘못된 평가라고 본다.

그때는 내가 당황에서 역공격을 하지 못했는데, 만약 지금 다시 그런 식으로 면접보는 곳이 있다고 했을때는 난 확실히 역공격을 하고 싶다.
"면접관님은 혹시 알고리즘 짜실 때 화이트보드에 직접 짜시는지요? 그러면 퀵 소트 알고리즘 부터 화이트보드에 보여주시면, 제가 버블 소트 알고리즘 테스트에 응해보도록 하겠습니다. 아! 만약 못하시겠으면 PC를 주세요. 어차피 저희들 다 PC에 앉아서 개발하잖아요?" 라고 말이다.

정말 면접자에게 필요한 코딩 테스트는 알고리즘 코딩 따위가 아니라

  • 면접자가 실제 진행했던 프로젝트의 개발 환경 (OS, Development tools, Framework, Language)에 대해 물어보고 왜 그런 환경으로 개발을 하는지에 대한 이해도 측정 질문
  • 이슈 관리 시스템(redmine, trac 등등), 버전 관리 시스템(svn, git 등등), 빌드 관리 시스템(jenkins, maven 등등) 등 개발에 필요한 시스템 구축에 대한 이해가 되어 있는지(이런 시스템의 필요성 정도만, 허접한 회사가 아닌 이상 사용은 해봤을테니), 그리고 이런 시스템을 사용하면서 느꼈던 에피소드 등을 유도하는 질문 (항상 빌드를 깨뜨리는 친구가 있었는데 벌금을 물게 했다던지 하는 그 사람만의 이야기)
  • 사용했던 라이브러리가 있었다면 그걸 설치해 보라고 하고 어떤 기능을 만들기 위해 썼는지에 대해 보여주는 정도 그리고 여러웠던 점이 무엇이었는지 - 실제로 면접자가 이 라이브러리에 대한 이해도가 어느정도 인지를 측정하는 것으로 본인이 필요에 의해서 쓴 라이브러리라면 코딩이 절로 나올 수 있다.
이런 것들이 되야 하지 않을까 싶다.

그래서 PC를 주고 코딩을 시키는게 아니라 저런걸 찾고 설명해 줄 수 있는 능력?
어차피 시키는 일만 열심히 했던 개발자였고 본인 능력 안키웠으면 저런거 설치해 본 적도 없을 테고, 왜 필요한지도 모를 것이기 때문에 설명을 할 수 없을 것이다.
설마 설명을 했다 한들 본인의 에피소드 얘기를 들어보면 시키는 대로 했는지 본인이 해결하려 했는지 정도는 파악되지 않을까?

회사에서 바로 써먹어야 하는 경력자는 알고리즘을 코딩할 수 있냐 없냐로 측정하는 개발자가 아닌, 개발 환경에 대한 이해를 정확히 하고 본인이 경험했던 이야기를 끄집어 내서 이런 시스템이 왜 필요한지, 문제가 뭐였는지, 어떻게 해결했는지에 대한 진솔한 얘기를 할 수 있는 개발자여야 할 것 같다.

만약 위의 것들을 할 수 있는 개발자라면 당장 내일 출근하라고 해서 개발 환경 세팅하라고 하면 별 다른 문제 없을 할 수 있을 것이다. 게다가 어차피 회사에서 시킬 일은 그 사람이 알고 있던 개발 지식과는 무관할 수 있다. 지원하려는 회사에서 만들어야 하는 시스템의 도메인 지식은 (정말 똑같은 사업을 하는 회사가 아니라면) 새로 배워야 할 가능성이 매우 높기 때문에 어차피 그럴 꺼면 툴 깔고 개발 환경이 뭔지 아는 개발자 데려오는게 시간 낭비를 덜 하는 방법일 것이다.

12 comments:

  1. 좋은 의견 감사합니다. 영국에서는 알고리즘 코딩을 보는곳이 있는 반면 종필님께서 말씀하신 내용을 위주로 보는 곳들이 있는 것 같습니다.
    알고리즘을 주로 보는 곳은 MS 페이스북, 구글, 아마존 같은 경우인데 실제로 이런 빅 IT 기업에서는 코딩한줄에 대한 퀄리티와 성능에 대해서 굉장히 민감하게 생각하다 보니 그런가 봅니다.

    아키텍팅 요소는 거의 20년정도 구른 아키텍트가 주로 설계를 하고 시니어나 주니어급 엔지니어들은 거기에 맞추어 주로 살을 붙이는 코딩을 하고 하다보니 플랫폼에 기반한 지식보다는 데이터구조와 알고리즘이 중요한가봐요.

    물론, 실제로 이런 회사가 아님에도 알고리즘에 맞추어 구인을 한다면 조금 문제가 있겠죠.

    ReplyDelete
  2. 우선, 제 블로그에 첫 댓글을 달아주신 분이라는 점에서 감사 드립니다. 감동의 눈물이 ㅜㅜ

    저 역시 알고리즘 코딩 테스트가 나쁘다는 건 아닙니다. 다만 학부생이나 주니어급 개발자라면 모를까 시니어 급에 알고리즘 pseudo 코드 테스트 (정확히는 알고리즘 기억력 테스트)가 맞느냐의 문제이지요. 문제 해결 능력 측정 테스트 면에서는 나쁘지 않다고 봅니다.

    사실 한국 IT 회사의 면접은 그렇지 않은 분야의 면접과 크게 다르지 않다고 판단됩니다. (적어도 제가 경험한 수십번의 면접에서는 그랬습니다.)
    그렇다면 학부졸업생, 주니어급 개발자에게는 알고리즘 코딩 부터 개발 언어 base의 개념적인 코딩 테스트를 하고, 시니어급 개발자에게는 시스템 설계 능력을 측정해야 하기 때문에 개발 환경에 대한 이해, 라이브러리 사용 이유 등을 측정하는게 옳다고 생각했거든요.

    어쨌든 다시 한번 댓글 달아주신 것에 감사드립니다.

    ReplyDelete
    Replies
    1. 여러번 시도했었는데 모바일에서는 댓글이 안달리는군요 (-_-ㅋ)
      여튼 첫 댓글의 주인공이여서 영광입니다 ^^

      아무래도 한국에서는 유행에 민감하다보니 정황없이 이런저런 문화를 도입하나 봅니다. -_-ㅋ)

      Delete
  3. 말씀하신것과 같이 특정 알고리즘을 구현하라.. 라는 문제는 좋지 못한 것 같습니다만, 대부분의 면접시 보는 코딩테스트는 특정한 상황을 주고 이 문제를 해결하는 의사코드를 작성하라 라던가, 특정 코드를 최적화 시켜보라는 식의.. 회사에 필요한 부분을 테스트 하는 경우가 많습니다. 이런 테스트는 개발자라면 대화로 주고받는 것 보다 훨씬 직관적으로 면접자를 볼 수 있는 방법이라 생각합니다. 실제로 이런 문제를 내보면 정말 황당할 정도의 답안을 제출하는 사람도 있고, 기발한 답안을 제출하는 사람도 있습니다.

    개발자를 뽑는데 자신을 얼마나 멋드러지게 포장하는 능력을 지녔느냐 보다는 이런 테스트가 회사측에서는 훨씬 유리하니까 안하는 것 보다는 낫다는 의견을 드리고 싶네요.

    ReplyDelete
    Replies
    1. 댓글이 달렸습니다ㅜㅜ 일단 감사 드립니다.

      제가 꼬집었던 건 어떤 정답이 정해져 있는 알고리즘을 외워서 적어봐라 식의 테스트였습니다.
      본문 중에도 "버블 소트 알고리즘을 코드로 구현 가능한가?에 대한 평가라면 잘못된 평가라고 본다." 라고 되어 있습니다.

      코딩 테스트는 안하는 것 보다 하는게 낫습니다. 단! 외워서 알고리즘 적어내기 같은 테스트 말고요.
      저도 면접자와 질문과 설명을 해 가면서 문제를 풀어내 가는 과정의 코딩 테스트는 적극 환영입니다.
      그리고 언급하신 대로 회사에 필요한 부분에 대해 테스트 하는 것이 좋다에 한표를 주고 싶습니다.
      저도 대뜸 문제 던져놓고 풀어보라는 식으로는 안하고, 회사에서 필요한 스킬이 이런데, 경험을 어느정도 했는지 물어보고 수준에 맞다 싶으면 그때 코딩 테스트 진행합니다. 수준도 안맞는데 코딩 테스트 시켜서 서로 시간낭비 할 필요는 없으니까요.

      Delete
  4. 개발환경이나 라이브러리에 대한 이해가 중요하다는 부분이 정말 많은 공감이 갑니다...
    면접생들한테 남들이 하니까 나도 해야겠다는 식으로 시덥잖은 코딩테스트 좀 그만 시키고,
    기존에 잘 만들어진 프레임워크나 라이브러리를 얼마나 잘 이해하고 가져다 쓸 수 있는지를 물어봐 줬으면 좋겠습니다.

    요즘 저런 코딩테스트를 한다는 소리를 들으면 참... 머가 중요한지를 모르는 구나 하는 생각 밖에 안듭니다...

    ReplyDelete
    Replies
    1. 글 올린지 2년 정도가 됐는데도 댓글이 달리는거 보니 확실이 이슈 제기는 했나 봅니다.

      정확한건 코딩 테스트는 잘못됐다, 하지 말아야 한다가 아닙니다.

      어떤 문제를 해결해 보기 위한 능동적 코딩 테스트는 괜찮습니다만,
      계속 제가 지적하고 싶은 건 특정 알고리즘 문제나 특정 문제 해결법에 대해 외워서 코딩 하기 수준의 테스트는 아니지 않냐의 문제입니다.

      예) 버블소트 알고리즘 구현하시오, 1~100까지 소수를 구해보시오 등

      그런데 이걸 신입한테 시키면 정말 좋은 테스트가 될 수도 있는데,
      10년차 넘는 시니어급 개발자한테 시키고 있는 모양새가 썩 좋지 않다... 그런 얘기죠.

      경력자라면 경력에 맞는 테스트가 필요하다 봅니다.
      저의 작은 바램은 꼭 그런 문화로 변화가 있었으면 좋겠습니다.

      Delete
  5. 훌륭합니다. 저도 외워서 보는 코딩테스트 반대하는 사람중에 한명입니다.
    저는 20년차 소프트웨어 엔지니어입니다.
    한이음에서 활동하시는군요. 존경합니다.

    ReplyDelete
    Replies
    1. 반갑습니다. 2020년이 되서도 댓글이 달려서 저도 기쁩니다.
      지금의 코딩 테스트는 뭐랄까 입사 지원의 통과 의례 정도가 되어 버린 것 같고 그걸로 사업을 하는 서비스업이 생겨날 정도가 되었습니다. (프로그래머스, 온코더 같은 사이트)
      잘해야 하는건 맞는데 마치 토익 900점 점수를 받아야 하는 것 마냥 코딩테스트가 이상하게 변질이 되어 있는게 좀 아쉽습니다.
      20년을 하셨다니 저보다 5년 정도 먼저 하신 분이군요. 어드 필드에서 일하시는지는 모르겠지만 저도 선생님처럼 오래 일하고 싶습니다.

      마지막으로 한이음 멘토링 한지는 3년차가 되어 가는데, 어린 학생들이 짧은 시간에 기술을 익힐 수 있게 알려주기 보다는 소프트웨어를 만들어 나간다는게 어떤 의미인지 알려주는 재미가 더 큰거 같습니다. 제가 대학에 입학할 때 쯤에 태어난 친구들과 얘기하고 있으면 신선하기도 하고 활기찬 모습이 보기 좋더군요.

      다시 한번 댓글 달아주셔서 감사합니다.

      Delete
    2. 안녕하세요. 데이터스 주식회사 우광명이라고 합니다. 어쩌다 보니 데이터 Tech 전문기업을 창업한 새내기 Founder입니다.
      IMF과 99년 IT버블로 인하여 취업에 어려움을 뚫고 살려고 시작했습니다. 고생도 많이 했구요. 20년 정도 하다보니 새내기 신입사원들이 과거의 선배들처럼 삽질의 연속을 안해도 될것 같아 이런저런 시도를 했으나 결국 개발자를 인정해주고 다닐만한 회사가 좀처럼 없는것 같아서 창업을 결정했습니다. 창업초기라 많은 어려움이 있지만 그럭저럭 운영은 되고 있어요.


      한이음멘토링에서 배우고 취업에 어려움이 있는 친구는 연락주시면 적극 채용할게요.

      메일 주소는 kmwoo@dataus.co.kr 입니다.

      Delete
    3. This comment has been removed by the author.

      Delete
    4. 안녕하세요.

      회사의 대표님께서도 댓글 달아주셔서 감사합니다.
      코딩 테스트 관련된 내용은 없고, 마지막에 채용 내용만 있어서 아쉽긴 하지만
      좋은 회사라면 좋은 친구들이 지원을 할 테고 대표님께서도 단순히 잘 하는 친구가 아닌 배워서 일할 수 있는 분을 채용한다면 함께 좋은 회사를 만들어갈 수 있을거라 생각합니다.

      Delete