전문참조: https://www.vobour.com/book/view/fiRGQMcmRkaw7pgpL


내가 어떻게 여기 왔을까

나는 중학생 때 프로그래밍을 시작했지만, 대학을 졸업 할 때는 경제학 학위를 받았다. 내가 졸업 할 때까지 취직을 못한 프로그래머가 너무 많다고 생각했다. 아쉽지만, 그때 나는 틀렸다.

나중에, 나는 프로그래머가 되기 위해 군대에 지원했지만, 신병 모집자(recruiter)는 나를 군사 정보(military intelligence) 부서를 지원하도록 설득했다. 그리고 나는 다음 2 년 동안 한국어를 공부했고, 2 년 동안 한국에서 군복무를 했다.

군대를 제대하기 전에, 나는 프로그래밍을 다시 시도했지만 그 어려움에 놀라고 말았다. 중학교 때 BASIC을 배웠고 고등학교를 가서도 프로그래밍을 계속하긴 했었다. 하지만 C++로 프로그래밍 공부를 다시 시작했는데 너무 어려웠다. 나는 정말 이해가 안됐다.
나는 웹사이트 만드는 것을 좋아했지만, Word와 같은 인터페이스를 갖춘 소프트웨어를 사용해서 사이트를 만들었다. 사실 나는 밑바닥 부터(from scratch) 웹 사이트를 만드는 방법을 몰랐다.
군대를 제대 한 후 나는 1 년 동안 한국에 머물면서 영어를 가르치기로 결정했다. Perl, HTML, CSS (당시에는 새로운 기능), JavaScript 및 SQL을 사용하여 웹 프로그래밍을 공부하기 위해 밤낮 주말을 이용했다.

1년간의 치열한 공부 끝에, 시애틀 지역에 취직했고, 그 이후로 쭉 이곳에 머물고 있다.

아름다운 벨뷰(Bellevue), WA의 발코니에서 일하는 중 

나는 15 년 동안 웹개발자로 일하고 있고, 3 개의 회사를 시작하기도 했다. 그 중 2 개는 여전히 운영 중이며 수익을 내고 있다. 나는 대기업 및 중소기업에서 일하고 스타트업의 창업 및 성장을 도우며 팀을 채용하고 관리하는 데 도움을 줬다. 나의 역할은 제품 관리자, CEO, 디자이너 및 마케팅 담당자였다.나는 성공적인 경력을 쌓았고 많은 것을 배웠다. 하지만 아직 끝난 것은 아니었다.

커리어 변경 모색

내가 위에서 컴퓨터 공학 학위를 받지 못했다고 한 것을 기억하나? 그것이 격차를 만들었다.
몇 년 전, 나는 어디든지 채용 될 수 있을 거라 생각했다. 나는 내가 핫(hot) 하다고 생각했다: 찾기 힘든 풀 스택 웹 개발자. 그러나 2013 년에 일자리를 검색하는 동안 기술이 부족하다는 것을 깨달았다. 나는 여가 시간에 스타트업을 운영하며 돈을 쫓는 데 많은 시간을 보내서 기술에선 뒤쳐져 버렸다. 나는 기술을 따라 잡지 못했다.
수년 간, 나는 그럭저럭 살아갈 수 있을 만큼만 배웠다. 나는 다양한 기술을 가지고 있었지만 전문가는 아니었다.

오해하진 않았으면 좋겠다. 나는 아직도 채용 될 수 있었지만, 내가 일하고 싶었던 기술이나 분야에서는 그렇지 않았다. 나처럼 테크 스택이 다소 구식 인 곳에선 고용 될 순 있었다. 거기에는 큰 돈은 있지만 흥미로운 전망을 보진 못했다.
그 실현은 작년 커리어 페어(career fair)에서 최고조에 달했다. 나는 벤처 캐피탈 회사가 운영하는 스타트업 기업 중 한 곳에서 일하는 것에 관심이 있었다. 하지만 컴퓨터 공학 학위가 없고, 그런 수준의 기술과 지식이 부족하다는 사실은 내게 기회가 없었음을 의미했다. 나는 그때 당시 사업에 전념하고 있었고, 지금도 마찬가지이다.

2016년 초에 웹 개발자에서 소프트웨어 엔지니어로 경력을 바꿀 때가 되었다고 결정했다. 나는 컴퓨터 공학 학위를 몇달 안에 공부하기 위해 열심히 공부해야 했었다. 이것을 끝내고 나면, 새로운 경력을 시작할 수 있을 것이라고 생각했다.
당신은 웹 개발과 소프트웨어 공학을 다르다고 보지 않을 수도 있다. 둘 다 프로그래밍과 장인 정신이 필요하지만 소프트웨어 공학은 데이터 구조와 알고리즘, 컴파일 언어, 메모리 관리에 대해 잘 알고 있어야 하며, 코딩 및 아키텍처 결정이 시스템에 미치는 영향을 이해해야 한다.

소프트웨어 공학 직을 고용 한 큰 기업은 응시자가 이 지식을 알고 있기를 기대한다.
나는 구글에서 일하는 지인에게 부탁해서 회사에 대한 자신의 경험에 대해 물어봤다. 나는 How Google Works를 읽고 있었으며 구글에 이미 익숙했다. 다른 곳을 통해 후보자 인터뷰를 위해 제공된 구글 코칭 노트 사본을 받았다. 이것이 나의 스터디 플랜의 기초가 되었다.
구글은 일하기에 아주 멋진 곳으로 알려져 있지만, 내가 그 사실을 알기도 전부터 구글은 나의 목표가 됐다.


왜 구글인가?


구글은 고용에 대한 기준을 매우 높게 책정되어 있다. 그들은 최고인 사람만을 고용하고 싶어한다. 따라서 내가 눈높이를 높게 설정한다면(구글에 고용되는), 내가 선택되지 않더라도 여전히 다른 곳에 고용 될 수 있을 것이다.



구글에 관해 더 많이 배울수록 더욱 그곳에서 일하고 싶었다.

간단히 말해서 구글은 현명하고 창의적인 사람을 고용하고 잘 대우하는 회사다. 구글은 장점을 발휘하고, 큰 아이디어를 장려하며, 직원에게 사용자를 위해 올바른 결정을 내릴 자유를 부여한다.
고용 과정은 똑똑하고 열정적인 사람들을 영입하기 위해 조정된다. 구글은 수년 동안 채용 및 인터뷰 프로세스를 발전 시켜 왔다. brain teaser 질문은 오래 전에 사라졌다. 요즘에는 코딩 능력, 기술 지식 및 Googleyness를 기반으로 후보자가 선택된다. 이 한마디에는 많은 것이 포함되어 있다.

매니지먼트는 다르다. 관리자는 세세한 것은 관리하지 않는다. 그들은 엔지니어가 올바른 결정을 내릴 것이라고 신뢰한다. 직원을 신뢰하면 대부분의 사람들이 관리를 생각할 때 생각한 것에서 구글의 관리자 역할이 바뀐다. 또한, 관리자는 일방적으로, 고용, 해고 또는 승진 할 수 없다. 사내 정치로 인식 될 수 있는 중요한 경영 결정의 대부분은 그 위험을 제거하기 위해 위원회에서 처리한다.

구글의 인력 운영 (HR)은 시간이 지남에 따라 무엇이 효과가 있는지 배웠으며, 평가 시스템, 채용 프로세스, 판촉, 보상, 혜택 등을 개선하기 위해 데이터 및 직원 피드백을 사용한다. 더 자세한 내용은 Laszlo Bock (SVP, People Operations)의
 Work Rules를 읽어보자! 

그렇다. 그 혜택은 놀랍다. 나는 WA 주 커클랜드에있는 구글 사무실을 둘러 보았다. 그곳은 내 기대를 뛰어 넘었다. 그리고 나의 기대는 이미 높았다.

구글 인터뷰 대학

무엇을 공부해야하는지에 대한 코칭노트를 기억하는가? 목록에 적혀 있는 것에 대해서 아무것도 알지 못했지만, 감당 할 만해 보였다.

노트의 토픽을 MIT 및 UC Berkeley의 강의 영상 유투브로 그 토픽을 채워 나가기 시작했다. 이런식으로 하다보니 목록이 점차 늘어나기 시작했다.

내 깃헙(Github) 계정이 꽤 비어있는 상태였기 때문에, 깃헙에 이 리스트를 게시했다. 비즈니스와 일을 위해 작성한 코드는 모두 비공개 였기 때문에 깃헙 계정을 사용하면 코딩을 전혀하지 않은 것처럼 보였다. 나는 포트폴리오를 구축해야했다. 나는 원래 이 프로젝트를 "Project 9894"라고 불렀다. 구글은 1998 년 9 월 4 일에 출시되었기 때문이다. 나중에 "Google Interview University"로 이름을 변경했다.

시간이 지나고 몇 가지 항목을 추가했다.
나는 CPU가 프로그램을 어떻게 처리하는지, 메모리가 어떻게 작동하는지, 그 외의 것들을 어떻게 처리하는지 알지 못한 채 지금까지 경력을 쌓았다는 데 놀라지 않을 수 없었다. 나는 그저 "적당한 정도(just enough)"만 알고 있었던 것이다.

이 작은 깃헙 프로젝트는 몇 개의 별을 얻기 시작했고 20 개의 별을 축하하기 위해 블로그에 글을 게시했다.
어느 날 아침 나는 이 프로젝트가 120 개의 별을 받은 것을 확인했다. 유명한 어떤 사람이 밤에 이것을 트위터를 썼고, 그 결과로 깃헙 일일 트렌딩 리포트에 반영 되었다. 며칠 동안 깃헙에서 #1의 인기 급상승을 했다.

많은 좋은 사람들로부터 감사와 격려 메세지를 받았다. 구글에서 일하는 것 뿐만 아니라 소프트웨어 엔지니어로서 일하고 싶어하는 수천 명의 사람들이 있다는 것을 알았다. 그래서 이 리스트는 그런 사람들에게 꼭 필요한 리스트이었다.

현재는 21,000 개의 별이 넘는다.나는 아직도 이것을 믿을 수 없다.


내가 일자리를 얻지 못하면 어떻게 될까?

그것이 세상 끝은 아닐 것이다.
나는 많은 시간과 헌신적인 노력을 통해 구글 소프트웨어 엔지니어로서의 채용 목표를 달성 했지만, 실패하더라도 여전히 어떠한 회사에서도 소프트웨어 엔지니어로 일하기 위해 필요한 기술과 지식을 갖추고 있을 것이다.
결국 나는 엔트리 레벨(entry-level) 소프트웨어 엔지니어로 일하게 될 것이다. 난 15 년 소프트웨어 엔지니어링 경험이다. 왜나하면 말 그대로 소프트웨어 엔지니어링 경험이 없기 때문이다. 이것에 관해서라면, 나는 신선한 CS 졸업생과 다를게 없다.
그러나 나는 졸업생 만큼의 열정도 가지고 있다. 이것은 나에게 새로운 세상이다. 이제 막 시작이다. 나는 실수하는 것을 두려워하지 않는다. 나는 해낼 수 있다. 나는 또한 내가 할 수 있는 모든 것을 배우고, 어떤 팀에서라도 잘 해낼 수 있다.


내가 한 것처럼 많이 공부하지 말자

맞다, 난 8 개월이 걸렸다. 그러나 난 짧은 과정을 밟을 수도 있었다. 큰 목표를 가진 모든 스타트업과 마찬가지로, 실수를 저지르며 시간 낭비를 하곤 한다. 나 역시 그때로 돌아간다면 다르게 시도하고 싶은 것들이 있다.
나는 불필요한 주제들을 공부했다. 왜냐하면 인터뷰를 위해 필요 하다고 생각 했고, 일을 시작 할 때 관련 지식을 갖고 싶었기 때문이다. 내가 배정 된 팀에 대한 부담이되고 싶지 않았다. 나는 정말 지나치게 준비한 것이다.
나는 1,000 페이지짜리 C++ 책을 읽는 데 3 주를 보냈다. 1,000 페이지 모두를 기억하진 못하지만, C++에 대해 조금 기억하고 있다. 결론만 말하자면, C++이 아니라 인터뷰를 위해 Python을 사용하고 있다. 나는 C++, C, Java가 필요하다고 생각했지만 아니었다. 추측보단 물어 보는 것이 좋다.

내가 필요한 것보다 너무 많은 책을 읽었다. 읽어야 할 책은 3~4권 밖에 없다.
내가 리뷰 한 수십 가지 알고리즘의 코드 카탈로그를 가지고 있는데, 그 중 대부분은 인터뷰에서 필요하지 않다. 당신도 그렇게 할 필요가 없다.

리뷰를 위해 프린트 된 알고리즘 스택


유투브(YouTube) 영상을 많은 시간 동안 시청했지만 시간이 지남에 따라 훨씬 적은 시간을 보냈다.

책 읽는 것을 멈추고 비디오를 일찍 보고 코딩 문제를 더 일찍 시작해야 했다. 내가 배운 주제를 적용하는 데 더 많은 시간을 할애 했을 것이다.

간격을 둔 반복은 암기의 키다.
 
일단 뭔가를 배우고 나면 나중에 다시보고, 나중에 다시 리뷰하자. 반복 할 때마다 학습을 강화하자. 한 번에 많은 시간을 할애 한다고 전문가가 되진 않는다. 반복해서 다시 리뷰하고 리뷰 함으로써 전문가가 된다. 그렇게하면 디테일을 까먹지 않는 시점에 도달하게된다.
리뷰를 효과적으로 하기 위해, 1,792 개의 플래시 카드 (디지털 플래시 카드)를 만들었다. 이것은 사실 지나치다. 남는 시간 (예 : 크리스마스 쇼핑 도중)이 있을 때마다 휴대 전화나 태블릿에서 리뷰를 한다. 플래시 카드와 간격을 둔 반복은 밀접한 관계가 있다. 일단 플래시 카드에 대한 답을 얻은 후에는 이것을 안다고(known) 표시하지 않는다. 나는 그것을 덱(deck)에두고 일단 그것을 본 다음 올바르게 여러 번 답변 했다면 그것을 안 것(known)으로 표시한다.

두려움 때문에("Red-black tree에 관한 질문을 한다면?") 내가 필요로하는 것보다 훨씬 더 많은 주제를 공부 할 수밖에 없었다. 
하지만 인터뷰 준비만 하고 싶지는 않았기 때문에 구글에서 커리어를 준비하면서 대규모 문제를 해결 하려고 했다. 이것은 시간, 공간 및 I/O의 컴퓨팅 리소스를 절약 할 알고리즘에 대해 아는 것이다.  최대 흐름 알고리즘 (Ford-Fulkerson)을 알 필요는 없을 수도 있지만, 상황에 따라 (구현을 암기하지 않고) 해당 도구를 사용할 수 있고, 어플리케이션의 문제를 인식 할 수 있다.


결론
초기에 나는 이런 모든 학습을 건너 뛰고 서둘러 입사해서 내가 참여한 팀의 언어와 도구를 배우는 데 시간을 할애 할 수 있기를 바랐다. 그러나 그 과정에서 나는 이 지식이 얼마나 중요한지 깨달았다. 그리고 대부분 이것이 일상적으로 적용될 수는 없지만 노력을 기울여 기쁘다. 나는 컴퓨팅의 역사, 실무에 뛰어난 인물, 데이터 구조 및 알고리즘 (그리고 이들이 서로를 보완하는 방법), 그리고 컴퓨터 시스템이 저수준에서 어떻게 작동하는지에 대해 새로운 인식을 습득했다. 

나는 곧 신청서를 제출할 것이다. 여기까지 오기까지 오랜 시간이 지났다. 거의 1 년이 지나고 말았다. 1 월에 시작했지만, 4
월까지는 풀 타임으로 공부할 수는 없었다.

나에겐 밝은 미래가 있다.
이 글을 읽어 주셔서 감사합니다. 



,