오늘 대구소프트웨어마이스터고등학교에서 넥슨 옥찬호(Chris Ohk) 개발자님의 특강을 들었다.
저번 게시글(프로젝트가 실패하는 이유) 다음 "게임 회사 취업 가이드" 특강이 이어졌다.
아래는 게임 회사 취업 가이드 특강을 들으며 기록한 내용을 정리한 글이다.
게임 프로그래머가 하는 일들
- 게임 컨텐츠 개발
- 게임 버그 재현 및 수정
- 라이브 서비스 유지보수
- 게임 엔진 R&D (최적화, 새로운 기술 제공 등의 게임 엔진 개조)
게임 프로그래머 채용 과정
- 입사지원서 제출 (자기소개서, 포트폴리오)(2 : 8 정도로 포트폴리오가 더 중요)
- 코딩 테스트 (알고리즘 문제 풀기, 코딩 스타일)
- 기술 면접 (컴퓨터공학 관련 지식, 고난도 문제 해결 과정)
- 팀/임원 면접 (팀 또는 회사에 어울리는 사람인지)
- 최종 합격 (연봉 협상, 입사일 협의)
포트폴리오 준비
학교에 다니는 동안 만들었던 것들을 중심으로 정리
- 가장 최근에 만들었던 프로그램부터 역순으로 나열하면 좋음
- 어떤 기술을 사용했는가? 팀 프로젝트라면 어떤 작업을 담당했는가?
- 힘들었던 점은 무엇인가? 어떤 방법으로 해결했는가?
- 구현한 코드는 GitHub나 GitLab에 정리해두면 좋다.
중요한 것은 기본기
학교때 배우는 주요 과목의 핵심 내용을 노트로 정리하기
- 1순위 : 자료구조, 알고리즘, 운영체제, 컴퓨터구조, 객체지향 설계,
컴퓨터그래픽스, 계산기하학, 선형대수, 확률과 통계
- 2순위 : 이산수학, 오토마타, 컴파일러, 컴퓨터 네트워킹, 인공지능
(어느 회사든 자료구조나 알고리즘은 중요하게 본다)
주로 사용하는 언어도 다시 한 번 정리
- C++ : OOP(객체 지향)를 중심으로 원리와 사용법을 다시 공부, 모던 C++ 문법도 살펴보기
- C# : 유니티 엔진을 사용하면서 봤던 코드들을 다시 한 번 살펴보기
- 시간이 남을 때는 알고리즘 문제를 조금씩 풀어보기
코딩 테스트 준비
- 백준(골드나 플래티넘까지), Leetcode, 프로그래머스 등을 활용해 준비
- 코드 스타일이나 변수 이름, 성능 등을 고려하여 구현하는 연습을 할 것
- 의도한 대로 실행하는 것도 물론 중요하지만, 코드를 잘 작성했는지도 중요
면접에서 물어보는 내용
학교에서 배웠던 내용을 잘 이해해두기.
남에게 설명할 수 있어야 이해한 것임.
학교에서 배웠던 내용에 대한 질문
- 클래스 상속의 장단점을 설명
- 뮤텍스(Mutex)와 세마포어(Semaphore)를 설명
- 추상 클래스와 인터페이스의 공통점과 차이점을 설명
- 오브젝트 풀(Object Pool)이란
- 그래픽스 파이프라인을 설명
- 라운드 로빈(round-robin) 알고리즘을 설명하고 사용하는 이유
- 지역성(Locality)이 무엇인지 설명하고 중요한 이유
- 힙(Heap)이 무엇인지 설명하고 삽입/삭제 동작을 설명
언어나 엔진 기반 질문
- Rvalue reference와 Move semantics를 설명
- Dictionary의 장단점 설명
- Scriptable Object가 무엇인지 설명
- std::vector, std::list, std::map은 각각 언제 사용하는 게 좋을까
- std::sort는 무슨 정렬을 사용하는지
기반 지식 활용 질문
- 1억m*1억m의 맵에 n개의 NPC가 있다고 가정하자. 플레이어가 움직일 때 가장 가까운 거리에 있는 NPC를 어떻게 찾을 수 있을까?
포트폴리오 관련 질문
- 가장 최근에 했거나 자신있는 포트폴리오
- 코드에 쓴 함수의 기능은 무엇인지
- 변수 이름을 이렇게 지은 이유
- 포트폴리오를 하면서 버전 관리는 어떻게 했는지
- GitHub를 사용해 협업을 한 적이 있는지
- 포트폴리오를 만들면서 어떤 기술을 사용했는지
- 포트폴리오를 만들면서 힘들었던 점
- 힘들었던 점을 어떻게 해결했는지
게임 회사 입사 후 알아두면 좋은 몇 가지 팁
- 입사했으니 끝? 새로운 시작일 뿐이다
- 회사에 계신 분들도 개인 시간을 활용해 공부하고 발전한다
- 모르는 것이 있을 땐 물어보기! (먼저 생각해야 할 때도 있다)
- 버전 관리 및 코드 병합 도구를 미리 알고 가자
- 회사에서는 절대 혼자 작업하지 않기에 원활한 커뮤니케이션이 중요
- 프로그래머도 문서를 써야 한다. 문서를 잘 쓰는 것도 스킬!
- 능동적으로 행동하는 사람이 되자
- 본인이 맡은 업무의 일정을 잘 관리하는 것이 가장 중요 (잘 관리하냐 안하냐에 따라 삶의 질이 달라짐)
평소 그냥 지나쳤던 게임 개발에 대해서도 관심을 가지게 되었고, 어떤 IT 분야든 자료구조와 알고리즘이 많이 중요하다는 것을 새삼 깨달았다. 긴 시간 특강을 진행해주신 옥찬호 개발자님께 감사의 마음을 표한다.