오늘 엔씨소프트 채용상담카페 행사에 다녀왔다. 방문자들을 직군에 따라 Queue에 쌓아두고 한 명씩

#include <iostream>
#include <queue>

void QnA(int visitor_id)
{
    // QnA something...
    std::cout << "QnAing... " << visitor_id << std::endl;
}

int size_of_visitor;
int visitor_id;

int main(int argc, const char *argv[])
{
    std::cin >> size_of_visitor;

    std::queue<int> q;

    int i;
    for (i = 0; i < size_of_visitor; i++)
    {
        std::cin >> visitor_id;
        q.push(visitor_id);
    }

    std::cout << "Before QnA: " << q.size() << std::endl;

    for (i = 0; i < size_of_visitor; i++)
    {
        auto v = q.front();
        q.pop();
        QnA(v);
    }

    std::cout << "After QnA: " << q.size() << std::endl;
}

하고 있었다. 내 번호는 44번이었다 (행운의 숫자). Q&A는 기본적으로 멘토 대 멘티 2:1 비율로 진행되었다. 앞으로의 전형들에 최선을 다하기 위해 내가 얻은 정보를 여기 기록해둔다.

채용 절차

서류 전형> NC Test > 1차 면접 > 2차 면접 > 채용 확정

NC TEST

NC TEST라는 것이 있다. 프로그래밍 직군에 한에서는 인적성검사에 코딩 테스트를 합쳐놓은 시험으로 보인다. 인적성 시험의 경우는 교재를 하나 사서 공부하려고 인·적성 문제집을 하나 주문했다. NEXON이나 Kakao의 온라인 코딩 테스트와 완전 다르게 알고리즘 대회 기반이 아니라 객관식으로 출제되는 모양이다. 온라인에 기출 문제들이 좀 있는 것 같은데 이를 한번씩 풀어보는 것도 좋을 것 같다. 몇 차례 질문을 던지며 키워드(keyword)를 수집한 결과, 일단 기본적인 자료구조와 알고리즘 학습에 집중하는 편이 좋을 것 같다. 추가로, 운영체제 학습 역시 필요해보인다. 스케쥴링(Scheduling) 관련 단원을 학습하고 관련 문제들을 풀어보는 것이 필요하겠다. 기본적인 코드를 읽고 결과를 예측하는 문제들도 예상된다. 관련해서 실수하지 않도록 기본적인 대입(assignment) 연산이나 값 타입, 참조 타입 등에 대한 이해를 다지는 것도 좋겠다.

수집한 키워드들

  • C 계열 언어 포인터 연산
  • 트리 순회 순서
  • Dynamic Programming
  • 스케줄링 (운영체제)

1차 면접

1차 면접은 기술 면접에 가깝다. 면접관 대 지원자는 4:3 비율에서 왔다갔다 하는 것 같다. 이는 엔씨 내부의 여러 팀들이 특정 지원자들에 관심이 있으면 여러 차례 볼 수도 있는 면접에 해당한다. 그러나 1차 면접을 여러 번 본다고 해서 합격률이 높은 것 같지는 않다고 한다 (멘토의 말 인용).

1차 면접의 밑바탕이 되는 것은 우선 NCSOFT 결과이다. 이 결과에 대해 심사위원들이 숙지하고 있는 상태에서 지원자에 대해 종합적인 평가가 이루어진다고 보면 될 것 같다. 또한 중요한 것은 면접 직전에 작성하게 되는 Pseudo Codes이다. 각 지원자는 다수의 지원자들과 함께 Pseudo Codes를 작성하게 되며 자신이 작성한 Pseudo Codes에 대해 설명하고 이에 대한 질문과 답을 하게 된다. 전형적인 Coding Interview 절차에 대응하는 것으로 보인다.

내가 가장 궁금했던 것은 엔씨소프트가 지원자들에게 어느 정도의 기술적 수준을 요구하냐는 것. 어느 정도는 예상했지만, 신입 기준에서 Modern C++이나 고급 C++ STL 활용 능력, 고급 자료구조나 알고리즘 활용 능력까지는 기대하지 않는 것으로 보인다. 이건 NC TEST와도 관련이 있는 문제인데, NC TEST는 관련 전공자나 오랫동안 입사를 준비한 (멘토의 경우는 입사 준비만 2년 했다고 한다) 경우에는 시간이 모자라지 않게 풀 수 있는 수준으로 보인다.

한편, 엔씨소프트는 경력이 많은 것 자체를 높이 평가하지 않는 것으로 보인다. 예컨대, 멘토는 경력이 전혀 없는 상태에서 경력이 많은 다른 2명과 1차 면접을 봤는데 OOP에 대한 질문에 대해 경력자가 잘못 대답하자 이에 지원자에 대한 부정적인 평가가 들어갔다고 말했다. 그러니까 기술 면접에서는 경력 믿고 까불다가는 뼈도 못 추리니 직무에 관련된 기본적인 개념 숙지에 충실해야 하는 것으로 보인다.

또한, 이 균형이 중요하긴 한데, 엔씨소프트에서도 Junior가 더 실험적으로 구조를 도입할 수 있는 정도의 자유를 부여한다고 한다. 그래서 수동적인 태도보다는 자기 주장이 좀 있는 편이 유리할 것 같다. 단, 잘못을 인정하지 않는 태도나 허세는 매우 위험해보인다. 멘토도 허세를 부리기 보다는 “제가 아는 선에서는 (이렇게) 될 것 같습니다.”는 식으로 자기 소신을 밝히는 것이 좋을 것 같다고 했다.

수집한 키워드들

  • OOP(Object Oriented Programming)이란 무엇인가요?
  • static_casting과 dynamic_casting의 차이점은 무엇인가요?

2차 면접

2차 면접은 임원들에 의한 인성 면접에 가깝다. 특히, 2차 면접은 압박 면접이기 때문에 극히 주의가 필요하다. 면접관들의 경우 임원진급이지만 대개 기술적인 이해도가 있으므로, 기술적인 2차 면접에서는 지원자가 모르는 부분이나 준비가 안 되었을만한 부분을 공략하기 때문에 잘 모르는 부분은 “잘 모른다”고 시인하는 편이 좋아 보인다. 괜히 잘 모르면서도 이를 숨기려 들거나, 단점이나 실수를 인정하려들지 않거나 하는 태도는 크게 부정적으로 평가될 것으로 보인다.

채용 확정

의외로, 멘토의 경우에는 엔씨소프트 입사 이전에 개발 경험이 전혀 없었으며, 실제 구직 과정에서도 엔씨 외에 다수의 회사에 지원했으나 대부분 서류에서 탈락하고 면접을 거쳐 최종 합격까지 간 회사가 엔씨소프트 외에는 별로 없었다는 뉘앙스로 말했다. 또한, 학력 자체도 다른 회사들에 비해 덜 보는 것으로 보인다. 이를 종합적으로 판단해 볼 때, 엔씨소프트가 중요도를 두고 평가하는 것은 경력이 얼마고 학력이 얼마고가 아니라 직무 관련 기본 지식에 대한 충실한 이해도와 함께 각 지원자의 성장 가능성을 더 높게 평가하는 것으로 보인다.

결론

결국, 내가 한 달도 채 남지 않은 과정에서 집중해야 하는 것은 기본이다. 프로그래밍의 기본이며 전산학의 기본이다. 또한, 조금 거칠게 말해서 내가 쌓은 경력 따위 아무 짝에도 쓸모가 없다고 보면 된다. 나 역시, 프로젝트 자체를 위해 필요한 기여였지만 실무 경험 자체가 나의 프로그래머로서의 실력 향상과는 크게 관련이 없다는 것을 뼈져러게 느꼈다. 메타적인 스킬 좀 쌓은 거고, 이런 스킬은 아무 것도 모르는 신입도 금세 익힐 수 있는 종류의 것이다. 그러니까 결국 남는 것은 기본이고 최소한 기본만은 확실히 보여줄 수 있는 지원자가 되는 것이 합격 가능성을 높이는 최단 경로이다.

또한, 엔씨소프트는 자기소개서에 포함된 3년 뒤의 내 모습에 대한 관심이 많다. 다시 말해, 지원자가 어떤 목표를 가지고 있는지 또한 어떤 장래를 기대할 수 있을지에 대한 관심이 많다. 그렇기 때문에 내가 남은 시간 동안 고민해야 하는 것 중 하나는 내가 3년 뒤에 어떤 사람이 될 것이냐는 것이다. 당연히, 내게도 중요한 문제다. 나는 어떤 프로그래머가 되고 싶은가. 나는 어떤 소프트웨어 엔지니어가 되고 싶은가. 나는 어떤 게임 개발자가 되고 싶은가.

<끝>