2016년 1월 13일 수요일

쥬니어 개발자의 해외 취업 준비 #4

비행기는 잠자기 좋은 곳은 아니다.

처음에 기내식을 먹을때만 해도 시간은 빠르게 흘렀다.
음료수와 아이스크림을 흡입하고 영화 두편을 연속으로 봐도 절반도 안왔다.
한국에서 미국으로 가는 비행기는 편서풍의 영향 때문인지 10시간 밖에 걸리지 않지만 나는 장거리 여행이 처음이라 너무 지겹다..


이건 마늘빵 크래커 같은데 토마토 맛이다. 무지 짜다.
덕분에 화장실을 자주안가게 된거 같다.


두편 정도 보면 눈이 아파서 못본다.



잠도 안오고 그래서 노트북을 펴놓고 지난 몇달간 코딩 인터뷰 이야기를 좀 해보기로 한다.

미국으로 출발하기 몇달전부터 코딩 테스트를 대비하기 위한 준비를 하였다.
처음에는 막연하게 잊고 있던 자료구조나 알고리즘을 다시 보기도 하고 알고리즘의 복잡도 계산(complexity)도 해 보며 끙끙댔다.
이런저런 퀴즈도 코딩을 해 보았다.

한국인의 시험에 대비하는 자세는 학창시절이나 대학시절이나 취준생 시절이나 별반 다를게 없는거 같다.




우선 외국인 노동자를 꿈꾸는(?) 사람들은 다 알만한 cracking coding interview 라는 책을 읽으며 문제 풀이를 하였다.

혼자서 무언가를 공부하는것은 여간 힘든게 아니다. 허공에 외치는 메아리 같다고나 할까..

그래서 같이 해외 취업을 준비하는 friend 와 mutual friends와 FB friends들이 모여서 코딩 인터뷰를 준비하는 그룹에 참석해서 매주 가상 코딩 인터뷰를 하였다.

돌아가면서 interviewer 와 interviewee를 번걸아가며 역할을 맡고 문제를 준비해서 실제 코딩 인터뷰를 수행해 보는 것이다.

hangout 을 이용해서 멀리 미국에 거주하고 있는 mutual friends와 함께 실시간으로 미팅을 할 수 있다니..


그뿐만이 아니라 leetcode.com 같은 자료구조나 알고리즘 예제들을 모어 놓고 퀴즈들을 클리어할 수 있도록 하는 서비스들이 많이 있다.

그리고 codeshare 같은 서비스들은 웹 브라우저에 협업용 코딩 에디터 서비스를 제공하는데 여러 사람이 하나의 문서를 실시간으로 편집을 할 수 있다.
다른 사람이 코딩하는 것을 실시간으로 볼 수 있고 중간에 내가 그 코드를 수정할 수도 있다.

실제로 많은 스타트업 회사들은 이런 서비스를 이용해서 코딩 인터뷰를 진행한다. 그래서 미리 익숙해 지는 것도 도움이 된다.

세상 참 좋아졌다.





아마존 같은 회사는 친절하게도 매년 한국에서 리크루팅 이벤트를 연다.

나도 11월에 급하게 지원 했었는데 지원 시기가 늦었다고 아쉽게도 다음 기회에 지원해 달라고 했다. 그 와중에 온라인에 돌아다니는 아마존 온라인 코딩 시험 페이지 주소를 들어가서 퀴즈를 풀어보기도 했다.
(뭐 2시간 이내에 풀라고 하는데, 4시간이 지나도 한문제 밖에 풀지 못했지만..)


평소에 퀴즈나 알고리즘 보다는 필드에서 터지는 이슈들에 익숙해지다 보니 fundamental한 문제 해결 능력은 학부생 시절보다 많이 떨어지는 듯 하다.
creativity 는 확실히 학생 때가 최고조였던 것 같다.
3년간 매일 똑같은 회사 코드만 쳐다보면서 그 세계에서 일어나는 일들만 관심들 갖고 살면 어쩔수 없다.
인간의 뇌 속의 뉴런은 반복되는 입력 데이터(환경)에 최적화 하여 학습(적응)하도록 설계되어 있기 때문에 같은 일을 계속 반복하면 잘 훈련된 개가 된다.

이래서 환경이 중요하다. 맹자 어머니가 왜 그렇게 이사를 많이 다녔는지 생각해 봐야 한다.
소프트웨어 엔지니어는 같은 일만 반복한다고 느끼고 지루함을 느끼면 변화를 주어야 한다.
팀 내에서 안되면 회사 내에서 시도하고 그래도 안되면 나가는 수 밖에 없다.

지친 심신과 스트레스, 술, 노화 현상으로 인한 뇌세포 활동의 저하 등을 핑계대고 싶지만

내가 평소에 이런 문제해결에 관심을 갖지 않은 탓을 해야지 별 수 있나.



아무튼 이런 퀴즈들을 풀다 보면 처음엔 막막하고 막 시험 공부하는 거 같고 그런 압박감이 든다.

근데 어느 순간 그냥 문제를 푸는 것을 즐기게 된다. 학교에서 배웠다가 잊고 있던 알고리즘이나 자료구조들을 다시 한번 되새겨 보고 

간단한 문제부터 하나씩 클리어 하다 보면 참 재미지다.

그냥 가볍게 게임처럼 시도하는 것을 권장한다.






그리고 다른 사람과 같이 가상 인터뷰를 매주 하는 것을 권장한다. 강추한다

참관만 하면 안되고 바로 적극적으로 그룹을 만들어서 인터뷰를 진행해야 한다.
(조금 더 준비하고 참여할 거라고? 언제는 준비했나..… do it right now )

이유는 인터뷰를 하면서 너무 많은 것을 배울 수 있기 때문이다.



내가 몰랐던 해결법, 알고리즘 등을 다른 사람이 알려줄 수도 있고, 많은 사람들이 이미 인터뷰 경험이 있어서 꿀팁들을 알려주신다.

그 분들의 경험담이나 조언 등은 어디가서 돈 주고도 들을 수 없는 값진 노하우다.


한번은 내가 인터뷰이가 되고 다른 사람이 인터뷰어를 맡아서 진행하고 있었다.
진행시간은 40분 정도 되었고, 나는 내 아이디어를 먼저 설명하고 코딩을 시작하였다.

그런데 코딩을 하는 중간에 상대방 인터뷰어가 자꾸 딴지를 걸었다.
“Steve, what are you doing? I don’t understand your code.”
“According to your solution, you might need something before your code line number ###”

난 코딩을 하다가 주기적으로 걸리는 인터럽트에 당황스럽기도 하고 한편으론 짜증이 나기도 했다.
결국 주어진 시간이 끝나고 집중을 하지 못한 탓에 결국 문제도 풀지 못하였다.


인터뷰가 끝나고 나는 왜 자꾸 코딩을 하는 도중에 말을 걸고 집중을 못하게 하는지 물어보았다.

그런데 예상치 못한 답변을 들었다.


실제로 인터뷰를 진행할 때 어느정도 시간이 지나면 인터뷰어는 자꾸 말을 건다고 한다.
간혹 굉장히 aggressive 하게 딴지를 걸기도 하고 (아닌데? 아닌데? 내 생각은 다른데?  )
시간이 지나도 아무말 없이, 게다가 결과에 차도가 보이지 않으면 그냥 인터뷰를 종료하는 경우도 많다는 것이다. (오케이 끝 우리 가야돼. 굿바이)

왜냐하면 코딩을 하면서 내가 내 아이디어를 설명하고 이 부분은 어떤 로직을 구현하는 것인지 등을 설명할 수 있는지 여부를 보려고 한다는 것이다.

많은 사람들이 한번 집중하면 묵묵히 자기 결과를 코드로 보여주는데에 익숙하지,  말로 상대방에게 내 아이디어를 설명하고 설득하는 데에는 익숙치가 않다.


게다가 30~40분 정도의 짧은 시간 내에 주어진 문제를 해결하기 위한 아이디어를 제시하고 이를 인터뷰어에게 설명하고 코드로 작성해 내는 능력 까지 가늠하려면
인터뷰어 입장에서는 어쩔 수 없이 인터뷰이가 뭔 생각을 하는지 이야기를 들어봐야 한다.


설사 완벽하게 돌아가는 코드를 작성했다고 하더라도 이미 알고 있는 코드를 가져다 붙여넣기 한 건지, 진짜 문제를 이해하고 해결을 한 것인지 판단해야 하기 때문이다.


결국은 문제해결 능력, 커뮤니케이션 능력, 코딩 능력을 짧은 시간 안에 보여줘야 하는 것이다. 영어로.



이렇게 가상 인터뷰를 진행하면 내가 생각지 못했던 이슈들을 접학수 있기 때문에 그만한 시간 투자의 가치가 있다.

각자 분야도 나이도 경력도 프로그래밍 언어도 다르지만 공통의 목표를 위해 경험과 아이디어, 지식을 공유하고 서로간에 자신감도 고취시킬 수 있다.
구직 정보도 공유하고 내가 미국 여행 준비를 할 때 이런저런 주의사항이나 꿀팁도 얻을 수 있었다.

이렇게 쌓이는 가치는 분명 큰 자산이다. 해외 취업 과는 별개로.





어느덧 비행기는 태평양 너머 미 대륙에 가까워 지고 있다,
- 1월 13일 1:57 AM.  38000 피트 상공에서.. -

참고로 바깥 온도가 영하 45도이다. 창문은 열지 않는게 좋다.




사실 SFO는 경유해서 LA를 먼저 왔다.
LAX 에서 내 가방이 안나오길래 기다리면서 와이파이에 접속해서 글을 올린다..


LA 는 참 이쁜 도시 같다. 200년 밖에 안된 나라니까 잘 지어 놨네...