첫번째 아마존 인터뷰에서 좌절을 맛보고, 좀 더 적극적으로 인터뷰를 준비해야겠다는 생각이 들었다. 특히 알고리즘에 약한 나는 문제를 풀면서 설명까지 해야 하는 코딩 인터뷰가 너무 어려웠다. 아는 문제를 그냥 영어로 설명한다고 해도 어려울 판에 순간적으로 풀어내는 것까지 고민하려니 쉽지 않았다.
흔히 코딩 인터뷰라고 하면 알고리즘만 잘 하면 되는 것 아니냐고 생각하겠지만, 사실은 그렇지 않다. 개발자 인터뷰를 다루고 있는 책들에서 공통적으로 코딩 인터뷰에 대해 언급하는 내용이 바로 ‘thinking out loud’. 혼자 문제를 푸는 상황이 아닌 인터뷰어에게 문제 푸는 과정을 설명해야 하는 코딩 인터뷰에서는 내가 생각하고 있는 것을 – 그게 완벽한 풀이 방법이 아니라고 하더라도 – 소리내어 말하는 과정이 매우 중요하다. 일례로, 이 문제에 대해서 내가 뭘 아는지 모르는지를 알 수 있게 말을 해야 인터뷰어가 힌트를 주던지 그냥 혼자 풀게 하던지 행동할 것이 아닌가.
“문제 푸는 방법만 알면 설명하는 게 뭐 어려운가?” 라고 생각할 수도 있다.
나도 처음에는 그랬다. 하지만 너무나 당연하게도, 내가 아는 것과 다른 사람에게 설명하는 것은 매우 다르다.
그리고 적어도 코딩 인터뷰에 있어서는, 다른 사람에게 설명하는 능력이 보다 더 중요하다.
코딩 인터뷰라는 것 자체가 “내가 이 사람과 일할 수 있을까?”를 보는 과정이기 때문에, 아무리 코딩을 잘 하는 천재라도 말로 상대에게 의견을 피력할 수 있는 능력을 갖춘 사람이라는 인상을 주지 못하면 통과하기 힘들다. 그래서 혼자 문제를 풀어보는 것도 중요하지만, 다른 사람들에게 설명하는 훈련이 필요하다고 생각했다.
처음에는 혼자 문제를 풀면서 소리내어 설명하는 연습을 하려고 시도했다. 하지만 아무래도 듣는 사람이 없다 보니 어느새 문제 풀이에만 집중하는 스스로를 발견하게 되었다. 이건 안되겠다 싶어 스터디 그룹을 만들게 되었다. 처음에는 회사 동료들과 함께하는 5명 정도 규모의 스터디 그룹을 만들었는데 생각처럼 잘 되지 않았다.
일단 사람이 너무 많아서 다들 설명하는 걸 조금 쑥쓰러워했고 이런 쉬운 문제를 왜 굳이 설명을 해가면서 풀어야 하냐? 의 함정에서 벗어나기가 힘들었다.
다른 방법을 고민하다 호기롭게 페이스북의 개발자 해외취업 그룹에 스터디 모집 글을 올렸더니 한 분이 연락을 주셔서 그 분과 1:1로 스터디를 시작했는데, 생각보다 이 방식이 잘 맞아서 1년 넘게 꾸준히 스터디를 하게 되었다. 나의 취업에 큰 공헌을 해주신 분이다.
스터디는 이런 식으로 진행 되었다.
매주 수요일 저녁에 행아웃에 접속해서 1시간씩 스터디를 한다.
각자 한 문제씩을 준비해서 각 30분씩 인터뷰어/인터뷰이 역할을 수행한다.
문제는 구글 독스를 이용해서 에디터 도움 없이 해결한다. 언어는 맘에 드는 걸로.
시간이 5분정도 남았는데 풀지 못하면 해답을 알려주고 다음 문제로 넘어간다.
진행은 한글로 했다. 슬프게도 영어로 진행하니 서로 의사소통이 안되는 문제가 있었다.
누군가 다른 곳에 인터뷰를 보고 온 날이면 그 인터뷰를 recap하면서 시간을 보내기도 했고, 연차가 늘어날수록 코딩 인터뷰만큼이나 시스템 디자인 인터뷰도 중요하기 때문에 시스템 디자인 인터뷰도 종종 진행했다. 코딩 인터뷰 문제를 다루는 사이트(Leetcode, HackerRank, GeekForGeeks…) 는 엄청 많기 때문에 문제가 떨어질 걱정은 하지 않아도 된다. 이렇게 연습을 몇 달 해보니 일단 회사에서 동료들과 일을 할 때도 설명하는 능력이 많이 늘어난 것을 느껴 뿌듯했다. 확실히 코딩 인터뷰는 연습만이 답인 것 같다. 스터디는 구글 독스로 진행했지만 가끔씩 코딩 인터뷰 연습을 위해 회사 회의실에 있는 화이트 보드에서 연습을 하기도 했다.
코딩 인터뷰 준비에 도움이 되었던 자료들을 조금 정리해둔다.
Coursera의 Mastering the software engineer interview
– 온라인 강의 플랫폼인 코세라에서 성공적인 소프트웨어 엔지니어 인터뷰에 대한 강의 자료를 만들어 두었는데, 엄청난 도움이 되었다. 해외취업을 준비하시는 분들이라면 꼭 한 번쯤 수강하시길 권해드리고 싶다. 개발자 인터뷰에 대한 기초적이지만 빼 놓을 수 없는 내용들이 많이 나와있다. 영어 리스닝이라는 측면에서도 이 정도는 자막 없이 볼 수 있어야 인터뷰 진행에 무리가 없을 것 같다.
– 코딩 인터뷰의 대명사같은 책이다. 원서로 볼 수 있다면 좋겠지만 정 안된다면 번역본도 나와있다. 여기 나온 문제를 다 풀어본다면 좋겠지만 한번 쭉 읽어보는 것만 해도 많은 도움이 된다.
Grokking the system design interview
– 시스템 디자인 케이스 스터디 같은 느낌인데, 주로 많이 사용되는 디자인 패턴과 문제들에 대해서 잘 정리해놓았다.