brunch

You can make anything
by writing

C.S.Lewis

by 개발자 꿀 Jan 05. 2019

해외취업: 알고리즘 준비 1편

개발자가 스웨덴으로 이직한 썰 12

1st January 2019


새해 첫 글이니만큼, 나뿐만 아니라 이 글을 읽게 될 사람들에게 자극이 될 내용이 좋을 것 같아 이직 준비에 대한 주제로 돌아가 '알고리즘 인터뷰 준비'를 쓴다. 1편은 알고리즘 인터뷰 자체에 대해 이러쿵 저러쿵 했던 생각들로, 2편은 실용적인 내용으로 나누었다.



알고리즘 인터뷰는 나의 지독한 아킬레스건이었다. 걱정 중에 걱정이었고 자신감을 좀먹는 벌레였다. 나는 이런 쪽으로 머리가 발달한 사람이 아닌데 20대 후반에 갑자기 공부한다고 갑자기 좋아질 리 없었다. 느린 속도로 발전이 있긴 했지만 한창 반복해서 풀던 때에도 한 번에 쉽게 푸는 문제가 별로 없었다.


하지만 어떤 회사에 지원하더라도 피할 수 없는 과정이라는 것이 문제다. 더군다나 보통 온사이트 인터뷰를 진행할지 말지 여부를 결정하는데 쓰이기 때문에, 아무리 시스템 설계에 자신있다한들 알고리즘을 망치면 보여줄 기회조차 없을지도 모른다.

알고리즘 때문에 망할 것 같다고 생각한 순간이 한 두 번이 아니다. 인터뷰에서 아는 문제도 제대로 말아먹었을 때는 저녁내내 울었다. 그래도 하다보니 오기인지 운빨인지 되는 날이 오긴 왔다... 신기하게도.



알고리즘 문제의 정의

여기서 알고리즘 문제는 흔히 생각하는 인터뷰의 전형적인 알고리즘 문제들로 한정하자. 나는 종종 개발자 인터뷰계의 수학 문제라고 설명한다. 어느 정도의 지식과 타고난 논리가 필요하고 반복적으로 학습하는.


사실 인터뷰에서 만나는 코딩 문제는 생각보다 다양하다. 평범한 알고리즘 문제뿐만 아니라 캐시를 동시성을 고려해서 구현하거나 서비스에 들어갈법한 로직을 만들어보라는 질문을 받은 적이 있다. 코딩은 안 했지만 Thread Pool을 어떻게 만들지 설명해보라는 인터뷰도 있었다. 이런 질문도 결국 어느 정도의 알고리즘 지식이 필요하고 분명 인터뷰어도 그 부분을 지켜보고 있을 것이다.

하지만 변형 문제를 처음부터 뒤지는 것보다 전형적인 알고리즘 문제를 먼저 공략하는 것이 여러모로 효율적인 선택이다. 우선 전화 인터뷰에서 (우리의 정의대로) 알고리즘 문제로 한 번 필터링하고 그다음 단계에서 변형을 묻는 경우가 대부분이기 때문이고, 어떤 회사를 지원하더라도 공통적으로 필요한 지식이기 때문이다. 모든 회사에서 다 물어보기 때문에 나의 고통이 시작된 것이기도 하고.



문제: bug 또는 solution

문제
- 해답을 요구하는 물음.
- 해결하기 어렵거나 난처한 대상. 또는 그런 일.

문제를 풀다가 답답한 마음이 들면 지금 쓰는 시간이 인터뷰에 떨어지더라도 나한테 어떻게든 도움이 될 것이라는 생각을 하려고 노력했는데, 하다 보니 좋은 점이 정말 생기긴 했다. 회사에서 일할 때 사소한 변화들이 있었다. 비교문 실수가 줄어들고, 습관적으로 쓰던 중첩된 if문을 줄이기 시작했다.


친구들과 알고리즘 스터디를 했을 때 다 같이 공감했던 장점은 바로 일과 다른 방향으로 생각하는 시간을 준다는 점이었다. 알고리즘 문제를 잘 푸는 능력은 개발자들의 공통된 특징도 아니고, 직업적인 개발자가 바로 꺼내어 쓸 수 있는 도구도 아니다. 머리에서 손으로 자연스럽게 일어나지 않기 때문에 안 쓰던 생각 회로를 사용해야 한다.

회사에서 반복적인 코딩을 하다가 알고리즘 문제를 풀면 똑같은 코딩이라도 다른 기분을 느끼는 경험이 누구에게나 한 번쯤 있을 것이다. 똑같이 자바로 작성한 몇 줄 안되는 짧은 함수가 얼마나 압축된 이야기를 하는지. 너무 감상적인 것 같지만 어떤 형태나 목적을 위한 것이든 언어는 정말 신기한 것 같다.


회사에서도, 인터뷰에서도, 우리는 '문제'를 만나고 해결하지만 둘은 다르다.

알고리즘 공부의 재미는 bug를 고치는 것이 아니라 solution을 찾고 정해진 답에 가까워지는 과정에 있다고 생각한다. 답이 있다는 사실은 또 얼마나 명쾌한가. 회사에서도 solution이 필요한 때가 있지만 코드 뭉텅이를 오래 맡을수록 solution이라는 것이 기존의 로직을 비트는 경우가 많아서, 알고리즘 문제처럼 간단하지만 핵심적인 느낌은 자주 오지 않는 것 같다.

이런 의도적인 순수함을 생각해보면 알고리즘 준비가 너무 절망적으로만 느껴지진 않을 것이다.



나의 평범한 두뇌에게

알고리즘 문제는 개발자의 잘 벼려진 도구가 아니다. 이것은 누구에게나 훈련이 필요하다는 의미이기도 하다. 그리고 수학 문제와 비슷한 것 같다. 이것은 반복 훈련으로 계발이 가능하다는 의미이기도 하다.


알고리즘 인터뷰를 준비하는 사람이라면 문제 pool이 정해져 있다는 것을 알고 있을 것이다. 이것은 꽤 희망적이라서, 나는 leetcode의 모든 문제를 전부 풀겠다는 생각으로 꾸준히 길게 보았다.

예전에 스터디에서 어떤 알고리즘 사이트의 문제를 거의 풀었다는 분을 만났는데 알고리즘용 프로젝트를 IDE에서 언뜻 보았다가 엄청난 파일수에 놀란 적이 있다. 그리고 결정적으로 그분은 원하는 회사로 바로 옮기셨다. 후에 이직 준비를 본격적으로 시작했을 때 그분이 풀었을 많은 문제들을 생각하면서, 내가 그보다 월등히 나은 사람이 아니라면 최소한 비슷한 정도로 노력은 해보자는 것이 장기 계획이었다. 정말 모든 문제를 다 풀었는데도 떨어지면 그것은 개발자를 그만두거나 한국에 말뚝 박으라는 운명의 계시이지 않을까? 그 무렵의 github contribution을 보면 초록색이 꽤 촘촘하다.


또 회사마다 문제 난이도나 원하는 해결 능력이 다르므로 케미가 맞는 인터뷰가 인생에 최소한 한 번은 있을 것이라는 게 내 행복 회로였다. 쉬운 문제를 여러 개 물어보는 회사도 있고, 쉽게 시작해서 어렵게 발전시키는 회사도 있고, 기본적인 알고리즘만 물어보고 다른 분야에 질문을 많이 하는 회사도 있다. 계속 질문하는 인터뷰어도 있고 먼저 질문할 때까지 입을 꾹 다물고 있는 인터뷰어도 있다.

딱 한 번 정해진 시간 안에 brute-force부터 최적화까지 모두 구현해서 만족스러웠던 전화 인터뷰가 있는데 바로 페이스북이었다. 온사이트 인터뷰까지 가지 못했는데 그때 들었던 피드백 중 하나가 '처음부터 최적화된 답을 찾지 못했다'였다.

잘했다고 생각해도 떨어지거나 떨어졌다고 생각했는데 몇 달 후에 갑자기 연락이 오는 것이 인터뷰다. 상투적인 말을 하기는 싫지만 언젠가 케미가 맞아떨어지는 순간이 있을 것이다.


2편으로 이어진다! https://brunch.co.kr/@ggool/29


#스웨덴 #개발자 #해외취업


매거진의 이전글 jobsN에 실린 내용
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari