brunch

You can make anything
by writing

- C.S.Lewis -

기술이 세상을 이롭게 변화시킨다1
by 김지영 Nov 01. 2017

어떻게 하면 붙는지는 난 모르겠고...

미국 IT 회사 채용 프로세스 및 Tip

이 글은 미국에서 data scientist이고 machine learning 분야 박사학위자이며 현재 senior software engineer인 조선의 4번 타자(가명)님이 유학을 준비 중이거나 미국에서 IT 업체에 취업을 하고자 하는 개발자들에게 도움을 주고자 글을 작성하여 저에게 보내주신 내용을 제가 정리하여 공유해드리는 글입니다. 



안녕하세요, 조선의 4번 타자(익명)입니다. 저는 지금 회사에서 image processing, recommendation system 파트를 담당하고 있고요, 이 글은 유시진으로 쓴 이전 글에서 다루지 못했던 이야기를 전하고자 시작했습니다. 모두 제가 경험한 일인데, 공유하여 조금 더 많은 사람들에게 도움이 되면  좋을 거 같아서요.


저는 미국에서 IT 회사에 지원할 때 Software Engineer(SE) 또는 Data Scientist(DS) role(역할)에 지원을 했습니다. 이 글에서도 크게 이 두 포지션에 지원한 경험에 대해 이야기 나눌까 합니다.


이 전 글에서 이야기했다시피 미국의 채용 절차는 다음과 같습니다.


Job Apply --> Initial Phone Screen (from Recruiter) --> Online Test/ Phone Interview --> Onsite --> Deal (after got offer)!


1. Job Apply

SE

Software Engineer의 경우 회사 차원에서 한꺼번에 직원을 뽑는 경우가 있고, 혹은 팀 별로 각자 구인을 하는 경우가 있습니다. 전자의 경우, 예를 들면 구인 글 제목이 “Software Engineer, 2018 Spring Semester (New Grad)”와 같은데, 즉 내년 봄학기에 졸업하는 대학원생을 대상으로 Software Engineer를 뽑는다는 것이고요. 우리나라로 치자면 공채를 한다는 글입니다. 이 경우 Job Description 부분이 포괄적으로 적혀 있는 경우가 대부분입니다. 팀 별로 모집하는 경우 Job Description이 아주 세세하게 적혀 있습니다. 경험상 구글과 MS가 Software Engineer를 회사 차원에서 많이 뽑았고 Amazon의 경우는 팀 별로 모집을 많이 했는데, 물론 그때그때 회사 사정에 따라 다릅니다. Job Apply는 예전 글을 참고하시고, 회사 Career 페이지 또는  LinkedIn에 이력서를 올려놓으면 팀에서 TO가 생겼을 때 recruiter가 찾아서 연락을 자주 합니다. 꼭 이력서를 자주 update 하기를 권합니다.


DS

Data Scientist 포지션의 경우 SE처럼 사람을 뽑는 게 쉽지 않습니다. 전공하는 사람이 적기도 하고 회사에서도 최근 많이 필요로 하기 때문에 공급보다 수요가 많은 편이죠. 그래서 더욱 팀 차원에서 많이 뽑는 거 같아요. 이 경우 Job Description은 자세히 적혀 있습니다. 예를 들면 Computer Vision, Recommendation System 등등 '우리가 풀고 있는 머신러닝 문제는 이러한 것이고 여기에 경험이 있는 사람을 뽑고 싶다.' 이렇게 말이죠.

해당 분야에 대해 경험이 있으신 분들은 이력서에 Project 란을 만들어서 (1) 프로젝트 주제, (2) 프로젝트 목표, (3) 프로젝트에서 내가 담당한 부분, (4) 어떤 알고리즘을 적용했고 결과는 어느 정도(예를 들면 mAP or F-value)인지 적어두면 구인하는 입장에서 뽑기가 훨씬 수월합니다.


2. Initial Phone Screen

이 부분은 SE, DS 모두 동일한 거 같습니다. 리쿠르터가 연락을 해서 자기가 담당하고 있는 팀의 Job Description과 이 사람이 매치가 되는지, 그리고 조인을 할 수 있으면 언제쯤 할 수 있는지에 대해 물어봅니다. 회사 차원에서 뽑는 경우에는 어느 정도 기간을 줄 수 있지만 팀에서 뽑는 경우에는 당장 필요로 하는 경우가 많기 때문에 최대한 빨리 인터뷰 보고 조인할 수 있는 사람을 찾게 됩니다.  Phone Screen의 경우 기술 인터뷰가 아니기 때문에 크게 긴장 안 해도 됩니다.


3. Online Test

Online Test를 하는 경우 해커 랭크를 주로 사용합니다.

문제는 두 가지로 나뉘는데 (1) knowledge 부분 (예를 들면, hashmap에서 data read 할 때 Big O는?) (2) 알고리즘 부분입니다. 1번의 경우 혹시 모르면 구글링해도 금방 찾아서 풀 수 있는 간단한 문제입니다. 2번의 경우, 전에 이야기했지만, 알고리즘을 공부하지 않으면 풀기가 조금 까다롭습니다. 제가 제일 고생했던 부분은 input이 모두 stdin으로 되어 있어서 데이터 입력 파트를 다 처리해야 했던 것입니다. 요령을 말씀드리자면, 해당 웹사이트에 가면 연습문제가 있습니다. 이때, 데이터 처리 파트 소스를 구현한 후 컴퓨터에 저장해 두고, 인터뷰 때 요긴하게 가져다 쓰면 됩니다. 간혹 리쿠르터가 컴퓨터 화면의 공유를 요청하는 경우도 있었는데, 이런 부분은 미리 양해를 구하니 "준비 많이 했네?"라며 이해해줬습니다. 혹시나 시간을 오버한 경우 저는 “내가 코드를 이렇게 짰고 입력값을 이렇게 주고 결과값도 분명 이렇게 나왔는데 Test 결과는 False라고 나온다. 내 코드를 검토해줬으면 좋겠다.”라고 코드와 함께 리쿠르터에게 이메일을 보냈는데 합격한 경우도 있었습니다. 즉, 시간 내에 못 풀었다고 낙담하지 마시고 꼭 자신을 어필하기 바랍니다.


4. Phone Interview

보통 30분 ~ 1시간 정도 소요되는데, SE, DS part를 나눠서 설명하겠습니다.


SE (Software Engineer)

Knowledge Part

단답식을 요구합니다. 예를 들면, 

What is the difference with abstract class and interface? When we use interface?

What is the difference with HashTable vs HashMap?

What is final, finalize, finally?

How can we create a Thread in Java?

How do thread communicate with each other?

HTTP has POST, PUT, DELETE, GET. Explain them.

When insert, read, delete, what is the time complexity for ArrayList, LinkedList? 

What is REST and SOAP?

등등입니다. 쉬운 질문도 있고, 당연히 어려운 질문도 있습니다. 기억이 안 나는 부분은 모른다고 답하는 게 좋은 거 같습니다.


Algorithm

이 부분은 지난번 글에 적었듯이 leetcode를 참고 부탁드립니다. 꼭 코딩을 하시는 중에도 내가 어떤 부분을 짜고 있고 이 코드의 경우 time complexity는 어떻게 될 것이고 로직은 이렇다 하는 것을 말하는 게 좋습니다. 그래야 인터뷰어도 '이 사람의 지식수준이 이 정도 구나' 하는 것을 알 수 있습니다.


4.2. DS (Data Scientist)

Knowledge

석사나 박사를 요구하는 만큼 꽤 까다롭습니다. 대부분 자신의 연구주제를 설명하는 것으로 워밍업을 하고 여기서 질문을 조금 던집니다. 워낙 머신러닝 분야가 다양하다 보니 이 부분은 거의 유일하게 구직자가 마음 편하게 말할 수 있는 좋은 기회입니다. 그러고 나서 이제 머신러닝의 기초적인 부분을 묻기 시작합니다. 예를 들면,

What is overfitting and underfitting. How to avoid them?

In information retrieval, why use cosine similarity? What is the formula?

Why use sigmoid? What is the formula?

In SVM, how to choose kernel?

Explain how to implement KNN. What is eigenvalue and eigenvector?

Explain CNN, RNN

What is precision, recall, f-measurement? Explain it with confusion matrix


Algorithm

leetcode 문제를 물어보는 경우가 대부분이었지만 수식만 적어주고 코딩을 하라고 한 적도 있었습니다. 가만히 생각해보니 Naïve Bayes를 구현하는 문제였습니다. 그리고 homework를 주는 경우도 있었는데, 회사의 API를 알려주고 recommendation system을 짠 다음 Docker에 올려서 보내라는 식이었습니다. 나중에 알고 보니 모든 팀원들이 돌아가면서 제 코드를 리뷰 했더군요.


5. Onsite

Onsite Interview는 거의 하루를 소모하고 DS의 경우 SE의 역할도 요구하기 때문에 더욱 까다로웠습니다. 보통 3 ~ 5 세션 정도를 screen 하게 됩니다. 

우선 SE 역할의 경우 당연히 알고리즘 부분이 대부분이고, 처음 문제는 medium level로 시작해서 첫 문제를 잘 풀면 다음 문제가 어려워지는 식입니다. 기억나는 문제로는 'given an unsorted array find the k smallest elements'가 있었는데, 처음에는 sorting을 먼저 하고 Kth를 찾겠다고 했다가 인터뷰어가 "더 빨리 할 수 없을까?"하고 묻길래 heap을 사용하는 방식으로 풀었던 기억이 납니다. 문제를 풀어내면 거기서 더 어려운 문제를 던져주고 문제 해결하는 방법을 찾아내는 과정을 지켜봤습니다.

DS의 경우에는 팀원들 대상으로 제 연구를 발표하는 시간을 가졌고요, 한 4명 정도의 scientist를 만나서 statistics에 대한 질문을 시작으로 (예를 들면, how to calculate confidence?) recommendation system의 경우 TF-IDF, Collaborative Filtering 등 그 팀이 만들고 있는 실제 시스템을 기반으로 질문이 마구 들어왔습니다. 이때 중요한 건 Machine Learning(머신러닝) 분야를 다 아는 것은 거의 불가능하기 때문에, 대신 기초 분야는 잘 알고 있어야 하며 '실제 data를 사용해서 이 문제를 풀어 봤는가?' 그리고 '내 팀에 들어왔을 때 이 친구가 본인 연구가 아니라도 이 쪽 분야에 apply 할 능력이 되는가'를 중점적으로 봤습니다. 


전달해 주고 싶은 이야기는 많은데 또 두서없이 글을 쓴 듯합니다. 앞으로도 경험한 것들에 대해서 종종 나누고 많은 분들에게 도움이 되었으면 합니다. 감사합니다.


편집자 주 1 : 이전 글과 마찬가지로 익명으로 글이 배포되길 원하셔서 작성자분이 희망하는 닉네임으로 시작하였습니다. (참고로 이전 글은 유시진 님으로 작성하셨죠~)

편집자 주 2 :  대부분의 용어를 영문으로 작성하여 주셨고 이번 글에서는 번역 없이 그대로 올렸습니다. 아무래도 미국에서의 취업에 대한 내용이기 때문에 영문 그대로 올리는 것이 더 도움이 될 듯합니다.

편집자 주 3 : 궁금하신 점은 댓글로 남겨주시거나 jiandson@jiandson.co.kr로 보내주시면 작성자분께 문의드린 후 답변하도록 하겠습니다. 


추신 : 취업 경험이나 구직 경험 등을 나누어 주실 수 있다면 언제든지 jiandson@jiandson.co.kr로 연락 주시기 바랍니다. 한 분 한 분의 소중한 경험이 더 많은 사람들에게 도움이 됩니다. 

keyword
magazine 기술이 세상을 이롭게 변화시킨다1
매일 하나씩 새롭게 배우기...
댓글

    매거진 선택

    키워드 선택 0 / 3 0
    브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari