지난 14일, 서류 전형 합격 메일을 받고 필기 테스트를 봤다. 다른 분들이 후기에 올리신 것처럼 나도 비밀 유지 서약서를 작성했기 때문에 전형을 진행하면서 알게 된 내용은 적지 못한다.
하지만 필기테스트를 준비하고, 회사에 방문해서 시험을 보면서 느낀 점들은 글로 쓸만큼 충분히 의미 있는 과정이었다고 생각해서 정리해보려 한다.
1. 필기 테스트 전
우선 나는 서류 전형이 매우 빠르게 처리 됐다. 평균적으로 서류 전형이 2주에서 최대 1달 걸린다는 말에 맞춰서 천천히 준비하려고 했는데... 평소 실력대로 봐야 했다. 뭐, 애초에 수시 채용이기도 하고 서류 전형 결과가 언제 나온다는 말이 없었으니 지원할 때부터 준비가 되어있어야 하긴 했다.
시험까지 나에게 주어진 시간은 3일이었다. 아마 인터넷에 검색을 해도 펄어비스 필기시험이 어떻게 나오는지 별다른 정보가 없을 것이다. 내가 검색해봤을 때도 그랬고, 그래서 나는 일반적인 CS 지식을 공부했다. 운영체제, 네트워크, 데이터베이스 등의 과목을 공부했는데, 약간의 사심을 넣어서 공부했다.
어차피 3일 남았으니 범위조차 정해지지 않은 필기테스트를 완벽하게 준비한다는 건 불가능하다고 생각했고, 그럼에도 최선을 다해서 준비해야 한다는 생각에 기존에 내가 알고 있는 CS 관련 지식을 게임 회사의 스타일에 맞춰서 정리했다.
예를 들어서 레벨을 어떤 타입의 변수에 저장해야 하는지, 카르마 수치같은 건 어떤 타입의 변수에 저장해야 하는지 이런 식으로 공부했다. 어렸을 때 쥬니어네이버의 동물농장을 즐겨했는데, 이때 한창 유행했던 게 포인트 치트 프로그램이다. 사용하지는 않았지만, 치트 프로그램을 썼을 때 생성할 수 있는 포인트의 최대 값이 21억 4748만 3647포인트라는 건 알고 있었다. 그리고 이 최대 값은 32 비트에서 처리할 수 있는 정수의 최대 값이다. signed long 자료형이 4byte인데, 그 범위가 -2,147,483,648 ~ 2,147,483,647이다. 그래서 21억 4748만 3647 포인트인 건데, 왜 unsigned long을 사용하지 않았을까 라는 의문을 가질 수 있다. unsigned long 자료형의 범위는 0 ~ 4,294,967,295이다. '동물 농장에서 빚을 지지는 않으니까 unsigned long을 사용할 수도 있지 않을까?'라고 생각할 수도 있지만, 애초에 치트를 사용하지 않으면 21억 포인트를 모은다는 건 거의 불가능하다. 그렇게까지 모을 필요도 없다. 그러니 signed long 자료형을 사용하고, -2,147,483,648 ~ -1까지의 값이 나오면 프로그램에 문제가 생겼다던지 각종 문제 상황이 나타났을 때 트러블 슈팅을 하는 데 사용한 게 아닐까 생각한다.
이런 식으로 공부하다 보니 너무 재밌었다. 사실 나는 대학교 2학년 이후로는 c++이나 java 같은 언어를 사용하지 않았다. Python만 사용했다. 그러다 보니 자료형에 민감하지 않았다. Python이 상대적으로 많이 느리다 보니 python 내부에서의 최적화를 위한 노력은 나름 했지만, 더 깊숙이 들어가서 메모리 영역이 어떻게 할당되는지와 같은 그런 근본적인 고민은 거의 하지 않았다.
Python만 사용한 건 대학교 2학년을 마치고 인턴을 한 기업에서 python을 사용했고, 그때 프로그래밍에 재미를 느껴서다. 대학교 1학년 때 C와 Java를 처음으로 배웠다. 아무래도 C와 Java는 처음 배우는 거기도 하고 이론적인 내용을 했으니 실제로 프로젝트를 통해 개발을 하면서 배워나가는 것보다 어렵고 재미없을 수밖에 없는데, 무의식적으로 나는 C나 Java 같은 언어보다는 Python 같은 언어를 잘한다고 생각해온 것 같다. 중간에 그런 생각을 부수는 일이 생겼다면 좋았겠지만, 아쉽게도 python만으로 나머지 학년을 충분히 잘 마쳤다. 회사에서도 창의적인 접근을 많이 하고, 잘한다고 칭찬받았다.
과거를 되돌아보니 내가 python을 잘했던 건 맞다. 그런데 python을 잘한다는 게 C나 Java를 못한다는 말은 아닌데, 못한다고 생각했다. 하지만 이번에 필기 테스트를 준비하면서 헷갈리기만 했던 포인터 개념, 자료형의 종류가 다양한 이유, 동적 할당이 필요한 이유, 객체지향 프로그래밍의 필요성을 깨달았다. 헷갈리는 개념을 좀 더 잘 이해하기 위해 메모리 영역을 까 보면서, 왜 가끔씩 꿻뭵과 같은 이상한 글자가 출력되는지도 알게 됐다. 그리고 C와 Java 같은 언어들을 더 깊게 공부하고 싶어 졌다.
물론 python이 싫어진 건 아니다. 이번에 포인터를 공부하면서 헷갈리던 linked list나 tree, tri 같은 자료구조를 어떻게 이해하고 구현해야 할지 알게 됐다.
2. 필기 테스트 후
시간 관리를 못했다. 체감 난이도는 높지 않았지만 천천히 풀다가, 시간이 다 됐다고 해서 절반만 푼 상태에서 내게 됐다. 아무래도 이건 필기 테스트 경험 부족에서 생긴 문제 같다. 대강 훑어봤을 때 뒤에 있던 문제들도 어려운 문제는 아니었는데 조금 아쉽기는 하다. 이제부터 문제를 빠르게 푸는 연습을 해야겠다고 생각했다.
필기 테스트가 끝나고 집에 도착하자마자 결심했다.
나는 어렸을 때부터 게임을 좋아했다. 게임 중독 경력만 10년이 넘는다.
= 이번에 게임 스타일로 공부를 해보니 엄청 재밌었다.
= 앞으로도 CS를 게임과 연관 지어 공부하면 재밌을 것이다.
CS를 게임처럼 공부하겠다고!
생각해보니 내가 처음 파이썬에 재미를 느낀 것도 파이썬으로 블랙잭과 RPG를 섞은 게임을 만드는 프로젝트를 했을 때부터 였다. 내 인생은 게임이랑 떼레야 뗄 수 없나 보다.
꾸준히 공부를 하기 위해 스터디에도 두 개 들어갔다.
게임 프로그래밍 스터디에서는 C++이랑 운영체제, 네트워크 같은 CS를 깊게 파고드는 내용을 게임처럼 공부할 거고
코딩 테스트 스터디에서는 1일 1 커밋을 목표로 Python 문제 풀이를 할 거다.
어제도 정말 졸리고 피곤했지만 리트코드에 들어가서 문제도 풀고 오랜만에 커밋도 했다. 재밌을 거 같다.
'회고 > 느낀점' 카테고리의 다른 글
팀으로 일하는 방법, 플래닝 포커! ( 애자일하게 일하기 ) (0) | 2023.07.05 |
---|---|
펄어비스 코딩테스트 후기 (1) | 2021.06.18 |
2021 상반기 네이버 코딩 테스트 후기 (0) | 2021.04.25 |
3월 알고리즘 공부 총결산 (1) | 2021.04.05 |