개발자, 어쩌다 해외 취업
이직 연습 #2 에 이어서 작성합니다.
면접 관련 책을 보니 코딩 테스트의 절차가 거의 명확하게 머릿속에 잡혔다.
1. 문제 이해 및 질문하여 이해한 것이 맞는지 확인
2. 문제에서 부족한 정보 질문하여 확인
2. 내가 무슨 생각을 하는지 말하며 생각 하기
3. 코드 작성하며 무슨 생각을 코드로 작성하고 있는지 말하기
4. 코드 작성 완료
5. 일반적인 입력을 테스트 하기
6. 이상한 입력 (edge case)로 테스트 하기
7. 시간 복잡도 계산
8. 피드백받기
9. 최적화
이렇게 분리해서 보면 많지만 문제 듣고, 풀고 확인하고 다시 좀 더 잘 풀고.. 하는 일반적인 과정이다. 나는 모든 면접에서 이 과정을 그대로 따랐는데 6번에서 끝나는 경우도 많았고 9번까지 가는 경우도 많았다. 그리고 각 과정마다 계속 이야기를 했다. "니가 낸 문제가 이 말이지? 이거 자료구조 tree 니? 만약 tree 면 이 기능 여기 있다 치고 코딩하면 되니? 나 이제 코드 적을 거야. 여기서는 조건이 이거니깐 나는 부등호를 이용해서 if 문을 쓸 거야. 이 개수만큼 for 루프 작성할 거야. 나 이제 디버깅 시작할 거야. 나 이번에는 엣지 케이스로 디버깅할 거야. 니가 최적화를 하라는데 지금 어딘지 잘 모르겠는데 뭐 루프를 좀 더 줄여야겠지? 루프를 없애 볼게" 그리고 이런 말도 한다 "야 나 망했다. 못 풀겠어. 첨에 뭔가 잘못한 거 같아. 니 생각은 어때?" 등등
책이나 다른 조언들을 보면 면접 중 계속 내가 알고 있는 정보가 맞는지, 부족한 정보에 대해서는 다른 추가 정보는 없는지, 내가 지금 무슨 생각과 행동을 하는지, 심지어 모르겠는데 힌트 좀 줄 수 있는지. 모든 걸 말하면서 면접 시간을 보내라는 충고가 나온다. 생각해보면 나는 정말 열심히 말했던 것 같다.
"이거 맞니? 아니야, 이렇게니? 거기서 좀 더, 거기 루프 있잖니, 아 그럼 이렇게니? 한번 더. 저기 다른 메소드도 있잖아. 아 그럼 이거구나" 앞에서 언급했던 시간 복잡도는 이런 식으로 계속 물어보고 답변하는 가운데 겨우 겨우 탄생했다. 하지만 면접관은 "야 , 근데 이거 최적화 좀 더 할 수 있지 않겠니?"라고 했고 나는 "음. 나는 이제 못하겠어"라고 했다. 면접관은 그제서야 "상관없어. 잘했어" 라고 하며 면접을 마치기도 했다
개인적으로 채용은 정말 상황이나 운과 많이 직결된다고 생각한다. 엄청 필요한 기술을 가진 사람을 찾는 과정일 수도 있지만 우리가 원하는 수준의 경험이나 나이대, 성격을 가진 사람을 찾는 경우도 많다. 적당한 사람을 많이 뽑을 수도 있고 최고의 인재만 몇 명 뽑을 수도 있다. 다만 내가 생각했던 면접의 중요한 요소 중 하나는 면접이 끝났을 때 면접관의 마음에서 그 사람을 평가만 했다고 생각하기보다는 그 사람과 비슷한 주제로 대화하고 나왔다는 생각이 들게끔 면접을 볼 수 있으면 좋겠다는 거였다.
나의 면접 경험이 다른 사람들에게 좋은 정보가 되기보다는 그냥 내 인생에서 한 가지 즐겁고 중요한 순간을 기록하는 의미로 글을 작성했다. 면접은 후달리지 않았는데 이제 막상 입사를 앞에 두고 있어 정말 후달린다. 진짜 가서 잘됐으면 좋겠다.