2016년 2월 11일 목요일

쥬니어 개발자의 해외 취업 준비 #8 Amazon Lab126 편

월요일 오전, 나는 정갈한 마음으로 목욕 재개를 하고 너무 많지도 적지도 않게 든든하게 아침밥을 먹은 후 약간의 과일로 입가심을 하고캘리포니아의 햇살을 맞으며 식탁에 앉아 커피를 마시고 있었다.

테이블에는 작년 겨울 즘 중고로 산 맥북 에어와 핸드폰, 노트와 필기구가 놓여 있었다.

오전 10시 30분 약속했다는 듯이 전화가 울렸고 나는 이어폰을 꽂은 채 전화를 받았다.




안녕 스엉화 쏭~?
나 아마존 렙 126 오디오팀 켄이야. 이야기할 수 있니?

응 그래 반가워.

요즘 근황 어떠니?(하우아유)

아주 좋아. ! 날씨도 좋고.. 하우아유?

뭐 나도 괜찮아.
암튼 지금부터 내가 널 인터뷰 할건데 너에게 몇가지 질문을 좀 깊게 할거야.


내가 기본적으로 두 종류의 질문을 할 건데
먼저 너는 behavioral questions에 너는 어떻게 행동 할건지 description해주고,
그 다음엔 technical questions 물어볼건데 코딩을 포함해.



야, 근데 너 이력서 보니깐 드론했었네? 굉장히 흥미로운데? 너 뭐 했는지 설명해줄래?

응, 내 레주메 보면 연구 조교로 일했다고 되어 있지? 대학에서 드론 연구 했는데 드론 제어 시스템을 위한 임베디드 컴퓨터와 하드 리얼타임 소프트웨어를 디자인했지. 난 항공쪽 지식이 없어서 항공과 사람들과 코웍 했고 그사람들의 이론을 시스템으로 구현했어.

와우 멋진데, 그래 그럼 인터뷰 시작하자.
먼저  Behavioral Questions



1. 너가 잘 못하는 분야의 문제를 해결해야 돼 어떻게 할거야?
나는 드론 이야기를 다시 꺼내면서 그 분야에 지식이 있는 다른 사람과의 코웍을 통해 문제를 해결하겠다 식으로 설명을 했는데

음.. 내 질문 그게 아닌데?

나도 이해 못하고 켄도 이해 못하고.. 서로. 뻥~~쪘다.. 정신없이 몇마디를 주고 받더니

좋아 그냥 다음 질문 할게(굉장히 빠르게 진행한다)



2. 너 문제 해결할 때 시간이 모자라.. 굉장히 급해. 상황이. 어떻게 할거야?
응, 그럴때 우린 선택을 해야하지.
물론 그냥 내 멋대로 결정하면 빨리 진행할 수 있겠지. 근데 예전에 그랬다가 안좋은 경험 있어. 잘못된 선택을 했기 때문이지. 내 멋대로 코드를 짰다가 다시 수정하느라 애먹었어.

그래서 그 다음부터는 보스랑 팀원과 항상 먼저 논의를 해. 세일즈 팀이 고객의 요구사항을 급하게 전달한 적이 있는데, 나는 내 보스랑 세일즈팀과 논의를 하고 고객에게 컨택했어. 그리고 우리 상황을 설명하고 시간내로 못하니깐 고객이 원하는 우선순위를 정해달라고 했지.

아하! 그렇군, 그러니까 니말은 고객의 요구사항대로 우선순위를 정할거란 말이지?

응... 정확해. (켄은 깔끔하게 한문장으로 정리를 해주면서 내 대답을 타이핑 했다. 저 문장을 먼저 말하고 예문을 이야기 했어야 했다는 생각이 든다. 미국은 무조건 할 말을 앞에 꺼내 놓고 그 다음 그 문장을 뒷받침 한다. 한국인은 이 문장 구조에서 잘 익숙하지 않다. 스피킹 에서도, 라이팅 에서도)



Technical Questions

그래 다음엔 기술적인 문제를 풀어볼거야.
너 오디오 쪽 signal processing 경험이 있다고 했지?
너 FIL 과 IIL의 차이점이 뭐니?

뭐라고? FIL 이 뭐지? 풀어서 말해줄래?

Fxxxxx Ixxxx Lxxxx 이야.

(나는 벙쪘다.. 뭐냐 이건 완전 신호 처리 이론쪽 인거 같은데)


어.. 미안하지만 그거 잘 모르겠어.


음, 그래 괜찮아 다음 문제.

Linked seq. xxx 가 뭔지 설명해봐..


뭐라고? 링크드 뭐? 모르겠는데..

그래 그럼 Convolution 이 뭐냐?


이쯤되면 멘붕이 오기 시작했다.. 내가 지원을 잘못 했나?

나는 정신을 가다듬고

켄, 미안한데 나는 오디오/비디오 신호 처리 이론은 공부한 적은 있는데 난 소프트웨어 엔지니어야. 주로 비디오 오디오 신호 처리가 구현된 하드웨어 컴포넌트나 멀티미디어 SoC 위에서 제공되는 API와 디바이스 드라이버를 이용해서 소프트웨어 스택을 설계하고 어플리케이션을 개발했지. 그런쪽 질문 해줄수 있어?



오~~~ 그래? 오케이 오케이 알았어.  다음 질문.


RISC와 CISC 차이점이 뭐냐?

(아는 용어가 나오자 나는 이 시점에서 아드레날린이 분비되기 시작했다)
응 RISC는 Reduced Instruction Set Computing 이고CISC는Complex...
RISC 는 명령어가 적고 설계가 쉬워서 가격이 싸지. CISC에서 명령어 하나로 처리할 수 있는걸 RISC는 여러개의 명령어 셋을 조합해야해..

Great! 좋아, 그럼 임베디드 시스템에서 왜 RISC를 많이 쓰지?

오, 그건 economic 이슈인데, 아까도 말했지만 RISC는 명령서 셋이 적어서 설계가 쉽지. 그 말은 가격이 싸다. 그래서 임베디드 시스템에서 많이 활용돼.

아주 좋아 대단한데? 좋아 다음 질문. (대답을 하기 시작하자 켄은 굉장히 긍정적인 말투로 encouragement를 하기 시작했다)



나는 여전히 긴장을 늦출수 없었지만 그래도 속으로 안도의 한숨을 쉬었다. 드디어 말이 통한다.


DMA가 뭐냐?

Endian이 뭔지 설명해봐

Macro코딩과 inline 코딩의 차이점은?

Char 포인터와 Integer 포인터의 크기는?

그럼 Char와 Integer 크기는?

ISR 이 뭐야?

Interrupt latency가 뭐야

volatile 키워드가 뭐고 언제 쓰니?

Variable Persistence(기억 안난다?)가 뭐야? (대답 못함)

괜찮아. 다음으로 넘어가자.(켄은 포기가 진행이 빠르다)


자, 이제 코딩문제야. 너 리크루터가 콜라보 에디트 주소 알려줬지?
문제를 보여줄게.


------

Write code that takes a single input and returns either true or false based on whether or not the input is a prime.

하나의 입력을 받고 소수인지 아닌지 참/거짓을 리턴하는 코드를 짜시오.



사실 코딩 문제는 그다지 깔끔하게 하지 못했다.
켄이 낼 수 있는 문제중 가장 쉬운 문제였음이 틀림 없다.
예전에 leetcode.com에서 ugly number라는 문제를 풀면서 소수에 대한 공부를 좀 했었는데 역시 연습 부족이었는지 로직도 생각 안나고, 코드가 깔끔하진 않았다.

그래도 어느정도 알고리즘을 짜자 켄이 시간이 다되었다 라는 신호를 보낸다.

나는 내 알고리즘을 설명하고 왜 이런 식으로 짰는지 이야기를 했다.
내 솔루션은 분명히 틀렸다고 생각한다. 그렇지만 나는 계속 켄과 대화를 하며 내 아이디어를 전달해야 했다.

그리고 코딩시간은 불과 15분도 안준거 같다. 문제가 쉽기는 했지만....



그래 좋아. 끝났다.


뭐 짧게 질문할거 있니?


응, 여기서 인터뷰 패스 못하면 다른팀 지원 가능하니?

음, 그건 나도 몰라. 리크루터한테 이야기해봐


아, 너네 팀의 Key role이 뭐야? 아주 흥미로운데 난 아마존 에코 디바이스 쓰고 있거든 되게 흥미로운 디바이스지. 그래서 이 팀에 관심이 많아.


아, 우리는 블라블라블라....

그렇구나 마지막으로, 언제 대답 들을수 있어?

어, 그것도 모르겠어 리크루터한테 물어봐.

오케이 알았어.

그래 승화, 인터뷰는 끝났고 오늘 이야기해서 즐거웠어.

응, 나도 재밌었다. 좋았고, 너도 좋은 하루 보내 켄.

그래 너랑 다시 이야기할 수 있길 바랄게. 바이바이



10시 반에 시작해서 11시 15분이만 끝난다고 했는데, 12시가 다 되어서 끝났다...


나는 인터뷰 내용을 적은 노트를 훑어보고 정리를 한 다음.
점심을 먹었다.

가장 큰 문제는 30분 뒤에 애플 인터뷰가 잡혀있었다.


폭풍 인터뷰에 멘탈이 약해진 나는  가까스로 점심을 먹고난 후, 간식까지 꼼꼼하게 챙겨 먹고는 다시 테이블에 앉아서 애플에서 올 전화를 기다렸다.

예전에 닐이 내 이력서를 다른 리크루터에게 전달했는데 우연히 멀티미디어 스트리밍 팀으로 연락이 왔던 것이, 아마존 인터뷰 날과 겹쳤다.




오후1시, 어김없이 전화가 왔다.


어눌하고 답답한 인도인 중년 남성의 목소리가 들린다. 그의 이름은 쥬바르
(아직도 인도인 발음은 익숙하지가 않다... 참 큰일이다.)


하이, 씅화 쏭.

나는 멀티미디어 스트리밍 팀의 누구누구야(들리지도 않는다)
지금부터 인터뷰 할 건데 시간 괜찮아?

물론, 괜찮지. 난 준비됐어.

좋아! 바로 기술적인 질문들은 몇개 할게(애플은 behavioral questions은 묻지도 않는다. 쥬바르는 아마존의 켄과 달리 굉장히 무뚝뚝하고 할말만 한다.)
너 최근에 했던 일이 뭐야?

응, 예전 회사에서 비디오 오디오 데이터를 다루는 디바이스를 만들었어. 멀티미디어 SoC위에 소프트웨어를 디자인하고 개발했지. 비디오 스트리밍은 주로 RTP/RTSP 기반이고.

음. 그래 RTP나 RTSP 말고 최신 스트리밍 기술들 아는거 있니?

어... 음 잘 모르겠는데 그냥 요즘 WebRTC 뭐 그런게 있다고 듣기는 했는데 몰라 잘.

응. 그래 다른 질문을 할게. 너가 비디오 오디오 스트리밍 데이터를 받는 클라이언트를 개발할거라고 가정하면 어떻게 설계 할래?

(굉장히 횡설 수설 했던걸로 기억 한다.)

그럼, 비디오랑 오디오 데이터를 sync하려면 어떻게 해야하지?

(평소에 제품을 개발 일만 했고 코어 라이브러리를 가져다가 API를 이용해 어플리케이션을 완성하는 일을 주로 했기에 제대로 파악하고 있을리가 없었다. 지난 3년간 시스템 소프트웨어와 어플리케이션 소프트웨어, 하드웨어간에 복잡한 이슈들을 해결하고 코드 최적화로 프로그램이 자~알 돌도록 만드는 것이 내 임무였다. 분명 멀티미디어 이론은 배운적이 있지만 평소에 공부를 안한 내 탓을 해야지 뭐... 역시 대답은 시원치 않았다.)


몇 번 질문을 하고 쥬바르는 안되겠는지 내가 제일 잘하는 포지션이 뭔지, 무슨 기여를 하고 싶은지 물어 보았다.

그리고는 알겠다는 듯이 다른 리크루터에게 나에게 맞는 포지션이 있는지 연락을 해 보라고 하였다. 힘들게 딴 인터뷰인데, 애플과의 인터뷰는 15분 만에 쫑났다.

좀 허망하긴 하다.

힘들게 딴 애플은 망치고, 우연히 연락온 아마존은 상당히 많은 시간 동안 이야기 했기 때문에 괜찮은 경험 이었던 것 같다.

애플 인터뷰에서는 이런 포지션에 필요한 기술적인 백그라운드가 얼마나 부족한지 알 수 있었다.


하루에 인터뷰 두개를 연달아 보고나니 오나전 Burn out 되어 버렸다.