실리콘밸리 알고리즘 면접과 트렌드
요즘도 실리콘밸리 정리해고의 소식이 심심치 않게 들려오고 있지만 큰 회사들은 면접을 보러 오지 않겠냐고 리쿠르터들을 통해서 슬슬 이메일을 보내오기 시작했다. 나뿐만 아니라 친구들 중 상당수가 이런 이메일을 최근 받았다. 물론 예전만큼의 숫자는 아니지만 이런 인터뷰를 요청하는 이메일의 숫자에 따라 실리콘밸리 고용시장 온도를 약간은 가늠할 수 있다.
실리콘밸리 엔지니어 면접 경로를 설명한 글들은 많다. 내가 브런치를 시작할 때 처음 쓴 글도 역시 실리콘밸리 엔지니어 입사과정에 관한 것이었다.
나의 프로파일을 보면 알겠지만, 나는 실리콘밸리 한 스타트업에서 8년째 근무 중이다. 이제는 상장도 했고 직원 숫자도 수 백 명이 되니, 스타트업이라는 말이 조금 어색하게 들리기는 하지만 구글이나 메타 같은 실리콘밸리 대기업에 비하면 아직도 스타트업 같은 기분이 드는 것이 사실이다.
예전 같으면 실리콘밸리 대기업 리크루터의 면접 요청 이메일을 받고는 언젠가는 저런 큰 회사에서 엔지니어로 일 하는 것도 나쁘지는 않겠다고 생각했지만, 지금은 전혀 그럴 마음이 없다. 몇 가지 이유가 있다.
지금 나는 재택근무를 하고 있다. 3개월에 한 번씩 팀끼리 또는 부서끼리 모여서 2박 3일간 회의를 하는 것(보통 Offsite이라고 한다)을 빼고는 재택근무 중이다. 그래서 나는 일 년에 이 4번을 제외하고는 세계 어디에서나 일을 할 수 있다.
반면 실리콘밸리 대기업들 중에는 아직도 출퇴근을 강요하는 곳이 많고 계속해서 출근을 원하는 회사들이 늘어날 것 같다. 최근에는 샌프란시스코에서 가장 큰 IT기업 중 하나인 세일즈포스(Salesforce)가 직원들을 사무실로 돌아오라는 통보를 내렸다.
대기업의 엔지니어 면접은 어디나 비슷하다. 내 경험으로는 회사나 제품에 상관없이 우선 알고리즘 시험을 1차, 2차에 걸쳐 본 후에 시스템 디자인 면접 그리고 행동 면접을 보는 것이 관례다. 그래서 대기업 면접을 준비하는 사람들은 보통 릿코드(https://leetcode.com/explore/)를 통해서 알고리즘 면접을 준비한다.
릿코드는 알고리즘 면접 문제들을 모아놓은 사이트다. 가장 빠른 길을 찾는 방법(Search)이나 효율적인 데이터 저장법등을 45분 정도에 풀 수 있는 문제로 전환한 것이 '알고리즘' 문제인데 엔지니어들은 이런 문제들을 풀면서 알고리즘에 익숙해지고 실력을 늘린다. 예를 들면:
1만 개의 랜덤 숫자들이 있다. 이 숫자들 중 소수(prime number)만 찾아내는 가장 빠른 방법
피라미드처럼 생긴 이진트리(Binary Tree)에 균형을 잡는 최상의 방법
한국어도 된 알고리즘 문제들은 여기에서 자세히 보실 수 있다.
이런 알고리즘 면접의 문제점은 아무리 실리콘밸리 대기업 엔지니어라도 실제로 이런 지식을 쓸 일이 별로 없기 때문에 공부하기가 지루하다. 또 이런 알고리즘 문제를 잘 못 푸는 사람들은 상당한 시간을 들여서 공부를 해도 면접에 성공할 확률이 그렇게 크지 않다. 알고리즘을 잘 못하는 엔지니어들은 실력이 없는 것일까? 왜 실리콘밸리는 알고리즘 문제를 고집할까?
우선 실리콘밸리에서 알고리즘 면접이 성행하는 이유는 우리가 공무원을 뽑을 때 시험을 보는 것과 같다. 선별성에 모호함이 없고, 알고리즘을 잘하는 사람들은 논리적이라는 믿음 때문이다. 틀린 논리는 아니지만, 이런 식의 입사 시험은 역시 비슷한 종류의 사람들만 뽑게 되는 결과를 부를 수밖에 없다. 큰 회사들이야 다양한 인재를 뽑는 제도, 우리가 흔히 DEI(Diversity, Equity, and Inclusion)를 통해서 조금은 다른 배경의 사람들을 뽑기도 하지만 이들도 어느 정도의 알고리즘 시험을 통과해야 입사가 가능하다.
내 생각엔 요즘은 50:50인 것 같다. 인지도가 있는 회사들은 좀 더 그렇다. 아무래도 지원자가 많아서 다. 그러나 많은 회사들이 다른 방법의 면접을 모색하고 있는 것이 사실이다. 알고리즘을 대체한 면접으로는 시스템을 설계하는 면접이 있다. 예를 들자면:
도서관에서 책을 대여해 주는 시스템을 만들기
음식을 배달하는 앱을 만들기
마이크로 소프트사의 엑셀을 만들기
45분 동안 이런 기존의 익숙한 앱이나 프로그램을 만들어보라는 것이 바로 시스템 설계 면접이다. 이런 면접은 완벽한 코딩 실력을 볼 수는 없지만 지원자가 어느 정도 전체적인 시스템을 이해할 수 있는지 또는 핵심 기술을 가늠할 수 있는지 알 수 있다. 이런 면접에서는 아무리 코딩을 오랫동안 한 베테랑 지원자도 중요점을 찾지 못하고 시간을 허비하기도 하고 코딩을 한지 얼마 안 되는 초급자도 예리한 추리력을 통해서 실마리를 잘 풀어나갈 수도 있다.
회사가 필요로 하는 인재상이 다르기 때문에 꼭 한 가지를 잘하는 지원자만 뽑기보다는 여러 가지 좀 다른 기술을 가진 사람들을 뽑아서 팀을 구성하면 좋지만 실제적으로는 직원이 몇 명 안 되는 작은 회사가 아니면 이런 일은 거의 불가능하다. 기술 면접이 생각보다 시간도 많이 들고 준비를 잘하려면 보통 노력이 드는 것이 아니라서 그렇다. 보통은 면접 질문 몇 가지를 가지고 돌아가면서 지원자들에게 묻고 지원자들의 대답을 비교해 가며 제일 적합한 대답을 한 지원자를 뽑는 것이 일반적인 경향이다.
참고로 내가 받은 이메일을 밑에 첨부했다. 한 번 더 강조하지만 이런 이메일은 흔하다. 보통 큰 회사 리쿠루터들은 지원자가 많아야 입사 성공률이 높아지고, 이런 입사율에 따라 성과급을 받는 경우가 대부분이기 때문에 보통 하루에도 수백 개의 이메일을 이름만 바꿔서 무작위로 보낸다.
그럼 난 실력이 없는 엔지니어일까? 어느 방면에선 그렇다고 볼 수도 있겠다. 이런 논리적인 수학 이론을 잘 이해하지 못하고 시스템에 도입할 수 없다는 것은 엔지니어로서는 당연한 한계다. 그러나 실제로 이런 지식과 기술을 써야 하는 자리는 얼마 되지 않는 것이 사실이다.
상당수 실리콘밸리 앱개발자직은 이런 기술을 사용하지도 않고 필요로 하지 않는다. 그래서 나 같은 사람도 실리콘밸리에서 일할 수 있고 많은 회사들도 이런 알고리즘 문제를 풀 수 있느냐를 중요하게 생각하지 않는다.
대기업을 가고 싶은 마음이 없어도 가끔씩은 나 같은 사람도 회사에 큰 도움이 될 수 있을 텐데 하는 생각에 슬쩍 억울한 마음이 들기도 한다. 그러나 이번에도 정중히 면접 요청을 거절하기로 했다.
대문은 Photo by Lala Azizli on Unsplash