Posted by uhm
최근에 저희 회사에서는 신입 프로그래머를 뽑았습니다. 자그마하지만, 게임개발팀의 팀장을 맡고 있다보니 신입 프로그래머를 뽑을 때 무엇을 봐야 하나를 고민하게 되죠. 면접을 보면 신입은 누구나 "아직 부족하지만 열심히 하겠습니다"라고 합니다만, 열심히 하고 싶은 것과 열심히 할 수 있는 것을, 회사 입장에서는 구분할 수 있어야 합니다.

그 사람의 의욕과 능력을 구분하기 위해서, 저희는 면접때 오랄 테스트를 보기로 했습니다. 문항을 대략적으로 7~8개의 카테고리로 나누고, 면접자가 자신있는 분야를 선택하라고 했죠. 떨어뜨리기 위한 시험이 아니라 그 사람이 뭘 할 수 있는가를 알아보기 위한 것이므로, 본인이 가장 잘할 수 있는 분야에 대해 물어보는 방향으로 정했습니다.

그 8개의 카테고리는 다음과 같습니다.
  • 시스템
  • 언어
  • 자료구조
  • 디자인패턴
  • 렌더링
  • 수학/물리
  • 게임로직
  • 네트웍

이는 게임을 만들기 위해서 필요한 대략적인 기초지식을 커버하며, 이 모든 것을 잘하는 사람을 요구하는 것이 아닙니다. 한가지라도 잘 알면 회사에서는 그에 해당하는 일을 맡기고 진행하면 되는 것이니까요. 단, 질문은 그 자리에서 당장 대답하거나 실제로 보여줄 수 있도록 명확해야 합니다. 그래야 평가가 가능하죠.

문항의 예를 들어보죠

  • 시스템 : 유니코드 문자열의 인코딩 종류를 알고 있는가?
  • 시스템 : 윈도우 동기화 객체의 종류를 알고 있는가?
  • 시스템 : 기본 메모리 할당 라이브러리의 문제점을 알고 있는가?
  • 언어 : 가상함수 테이블 메커니즘을 알고 있는가?
  • 언어 : 템플릿의 명시적 특수화와 부분 특수화를 알고 있는가?
  • 언어 : STL 펑터와 프리디케잇을 만들 수 있는가?
  • 자료구조 : 링크드 리스트를 슈도코드로 아웃라인을 짤 수 있는가?
  • 자료구조 : 주어진 코드의 시간복잡도를 Big-Oh 표기법으로 계산할 수 있는가?
  • 디자인패턴 : 널리 알려진 패턴(컴포짓,싱글톤 등)을 클래스 다이어그램으로 그릴 수 있는가?
  • 렌더링 : 그림자 렌더링 기법의 종류를 알고 있는가?
  • 렌더링 : 텍스쳐좌표 (0,0)인 스프라잇의 샘플링 오차를 설명할 수 있는가?
  • 수학/물리 : 가속도운동하는 물체의 위치를 시뮬레이션하는 적분 코드를 작성할 수 있는가?
  • 수학/물리 : 간단한 기하도형간의 충돌검출을 슈도코드로 짤 수 있는가?
  • 게임로직 : 간단한 게임의 게임스테이트 전이를 스테이트 다이어그램으로 그릴 수 있는가?
  • 게임로직 : 전형적 캐릭터의 스테이트 전이를 스테이트 다이어그램으로 그릴 수 있는가?
  • 네트웍 : 전형적 상황에서 오가는 간단한 패킷을 설계할 수 있는가?


대충 이정도입니다. 실제 준비한 문항은 위 목록의 약 2배가량입니다. 각 문항은 아무렇게나 뽑은 것처럼 보일지는 몰라도, 각 문항에서 알아보고자 의도하는 바가 있습니다. 그중에서도 "~~할 수 있는가?"로 되어 있는 문항은 화이트보드에 직접 해보라고 시킵니다. 하드해 보일 수도 있지만, 이 문항의 목적은 정답을 맞추는 것이 아닙니다. (물론 올바른 답을 내놓으면 더할나위 없지요) 그 사람이 이 분야에 어느정도 노력해 왔는지를 측정하여 앞으로 얼마나 노력할 수 있는지를 외삽하는 용도로 물어보는 것입니다.
제 입장에서는, 게임프로그래머란 이정도에는 관심을 가지고 있어야 일을 맡길 수 있다고 생각하는 쪽입니다.

'칼럼' 카테고리의 다른 글

이명박정부와 게임업계  (0) 2008.04.17
신입프로그래머에게 물어보는 것  (5) 2008.03.21
World Of Goo  (2) 2008.03.21
스톰윈드의 놀라운 비밀  (0) 2008.03.20

댓글을 달아 주세요

  1. 기린 2008.03.30 16:45 신고 댓글주소 수정/삭제 댓글쓰기

    적분식이라... 룬게쿠타4K 식을 외우고 있어야 되는건가요 '-';

  2. 신입프로그래머 2011.06.28 18:23 신고 댓글주소 수정/삭제 댓글쓰기

    신입 프로그래머의 답변.


    기본 메모리 할당 라이브러리의 문제점을 알고 있는가?

    - 기본 메모리 할당 라이브러리의 문제점이라면 CRT Alloc/new 같은 걸 말씀하시는 건지 아니면 스마트 포인터같은 메모리 관리 객체를 가리키는 건지 모르겠네요. 애초에 질문 자체가 무슨 의미인지 모르겠습니다.


    가상함수 테이블 메커니즘을 알고 있는가?

    - 가상 함수 테이블은 컴파일러의 영역이라 구현 환경 마다 다 다른데 각 컴파일러마다 어떻게 구현되어 있는지 설명해야 하나요? 무엇보다 C++ 표준도 아니고 객체 지향 동적 바인딩을 이해하는데에 있어 하등 상관 없어 보이는 것을 제가 알고 있어야 하나요?


    주어진 코드의 시간복잡도를 Big-Oh 표기법으로 계산할 수 있는가?

    - STL의 각 알고리즘이 어떤 시간복잡도를 가지고 있고 결과적으로 어떻게 사용되어야 하는가는 잘 알고 있습니다. 그런데 그걸 계산까지 할 수 있어야 하나요? Big-"Oh!" 표기법으로? 죄송합니다 모르겠네요.


    가속도운동하는 물체의 위치를 시뮬레이션하는 적분 코드를 작성할 수 있는가?

    - 정말 진심이십니까? 농담하는 거 아니세요?
    죄송합니다. 다른 회사 갈게요.

    • uhm 2013.10.22 12:47 신고 댓글주소 수정/삭제

      1) 질문 자체를 이해 못하셨다면, 기본 할당 라이브러리의 문제점을 알지 못하고 있는 겁니다.

      2) 객체지향 동적 바인딩을 이해하는 데에 가상함수 테이블이 관련 없다는 생각이 이해가 안되는데요.

      3) 자기가 짠 코드가 성능에 어떤 영향을 미치는 지 계산할 줄 알아야 하는 것은 당연한것 아닐까요.

      4) 농담이 아니라, 가속운동은 캐릭터의 이동을 자연스럽게 만드는 데 필수적입니다.

      다른 회사에서 건투를 빕니다.

  3. zz 2013.09.12 00:37 신고 댓글주소 수정/삭제 댓글쓰기

    당신은 할줄 알아요?
    못하는걸 물어보지말고 할줄 아는한도 내에서 물어보세요;
    면접관들 답변 얼버부리는거 보면 한대 쥐어박고 싶던데;; 적당히 하셔야죠...;

    • uhm 2013.10.22 12:40 신고 댓글주소 수정/삭제

      네, 할줄 알고 면접볼 때 얼버무린 적 없습니다.
      저정도가 적당한 선이라고 생각합니다.
      저정도도 모르고 입사하면 대부분 낙오하더군요.