[번역] Matt Might – 학생, 교수, 연구자들을 위한 생산성을 높이는 비결 (2015년판)

원문: http://matt.might.net/articles/productivity-tips-hints-hacks-tricks-for-grad-students-academics/

제가 대학원생으로 있을 때에 많이 참고했던 Matt Might 교수님의 생산성 팁 블로그 글을 번역해 올립니다. 꼭 학계에 있는 분들에게만 적용되는 이야기는 아니고, 일반적으로 유용한 팁들도 많이 있습니다. 번역 오류나 부자연스러운 부분에 대한 지적은 언제든지 환영합니다.


목차

건너 뛰기:

  1. 나의 원칙: 거래 비용의 최소화
  2. 집에서 일하지 마라
  3. 시간을 낭비하고 싶은 유혹을 제거해라
  4. 죽은 시간을 테크놀로지로 살려내라
  5. TV를 없애라
  6. 이메일 길들이기
  7. 노트북으로 일해라
  8. 캘린더 시스템을 활용해라
  9. 메신저를 꺼라
  10. 협업 비용을 최소화해라
  11. 참고 문헌 관리 시스템을 활용해라
  12. 생산적으로 미뤄라
  13. 생산적으로 운동해라
  14. 반복을 통해 완벽에 가까이 가라

나의 원칙: 거래 비용의 최소화

다음의 조언은, 내가 경험으로 체득하여 세운 원칙을 요약한 것이다:

  1. 생산적인 활동을 시작하는 데 들어가는 거래 비용(transactional cost)을 줄여라
  2. 비생산적인 활동을 시작하는 데 들어가는 거래 비용을 높여라
  3. 기회비용(opportunity cost)을 최소화하라. 당신이 가장 잘하는 일에 집중하고, 다른 일을 해야할 때에는 그 분야의 전문가와 함께 일하라. [이것은 우리 엔지니어들이 가장 받아들이기 어려운 원칙이다. 우리들은 우리가 할 수 있는 일이면 해야한다고 느끼게 마련이다.]

간단히 말하면, 생활속에서 가장 저항이 적은 일을 하는 것이 곧 최고의 생산성으로 가는 길이 되도록, 당신의 삶을 조율하라는 것이다.

사람들은 내가 게으르다고 말하면 놀란다.

나는 내가 게으르다는 사실을 변화시키려고 노력하지 않는다. 다만 그것을 활용할 뿐이다.

나는 어떤 순간에든 내가 할 수 있는 가장 게으른 행동이 바로 내가 해야할 일이 될 수 있도록 노력한다.

업데이트: 의지력 관리하기

내가 이 글을 쓴지 몇 년 후에, 나의 원칙을 심리 과학에 기반하여 잘 설명하는 Willpower 라는 책을 발견했다.

 

Willpower
 

이 책에서는 자기 통제의 원리에 대한 문헌 조사를 수행했다.

저항이 최소화되는 길을 신중하게 닦는 것은 의지력을 가장 잘 사용할 수 있는 길이다.

일화: 턱걸이

내 교수로서의 첫 해에, 나는 턱걸이 운동을 시작하기 원했고, 이동식 턱걸이 봉을 우리 침실 바깥 문에 달아두었다.

매번 문을 지나갈 때마다 턱걸이를 하는 데 들어가는 거래 비용은 거의 제로에 가까웠고, 덕분에 나는 턱걸이를 어느 정도 했다.

뿐만 아니라, 나는 턱걸이 봉을 항상 볼 수 있었기 때문에, 턱걸이를 해야 한다는 사실을 기억할 필요조차 없었다.

 

Portable pull-up bar
 

어느 날 (이유는 모르겠지만) 턱걸이 봉이 바닥에 떨어져 있었다. 턱걸이 봉은 바닥에 놓여진 채로 몇달을 지냈고, 나는 그 후 몇년간 턱걸이를 전혀 하지 않았다.

아마도 봉을 다시 설치하는 데에는 십초 정도 밖에 안걸렸을 것이다. 하지만, 나는 자주 급한 상황에 처해 있었고 그 십초의 시간은 거래 비용이었던 것이다.

[업데이트: 나는 결국 체중 감량근력 강화를 위한 최소 저항 접근법을 개발해냈다.]

집에서 일하지 마라

집에는 주의를 산만하게 하는 온갖 것들로 들어차 있다.

연구자들은 스케쥴이 유동적이기 때문에, 당신 자신을 매일 강제로 일터로 보내는 것이 더더욱 중요하다.

당신의 일하는 공간을 편안하고, 생산적이고, 즐길 수 있는 곳으로 만드는 데 투자해라.

  1. 당신의 책들을 일터로 옮겨라. 이것은 그 무엇보다도 출근에 강제성을 부여한다. 참고 문헌들이 일터에 있으면 집에서 일하기 어려워진다.
  2. 인체 공학적 의자를 사용해라. Aeron chair 만한 것이 없다.
    Aeron chair
  3. 품질 좋은 인체 공학적 키보드를 사용해라. 나는 Kinesis Advantage 를 강력히 추천한다.
    Kinesis Advantage
  4. 일하는 공간을 꾸며라. 일터가 재밌는 공간이 되도록 해라.

시간을 낭비하고 싶은 유혹을 제거해라

[테크놀로지를 의도적으로 제한해서 생산성을 높이는 방법에 대한 내 블로그 글을 읽으면 도움이 될 것이다.]

대학원에 다닐 때, 나는 온라인 기사 읽기 중독에 빠졌다.

나는 모든 것을 읽었다: 미디어 사이트, 포럼 사이트, 투표 사이트, 블로그 등등.

무언가 하고 있지 않을 때 내가 늘 하던 행동은 반사적으로 cnn.com, reddit.com, 또는 boingboing.net 등을 브라우저 주소 창에 입력하는 것이었다.

이 사이트들에서 시간을 잃는 것을 멈추기 위해서, 나는 해당 사이트들을 /etc/hosts 파일에 등록해서 리디렉트 하는 방법으로 차단하기 시작했다.

하지만, 불가피하게도 나는 큰 뉴스들에 대해서는 확인을 하기 위해서 차단을 풀었고, 그러면 금세 읽기 중독에 다시 빠져들었다. 언제나 그렇듯이, 적당한 지점을 찾는 것이 핵심이다. 다음의 세 가지 방법이 나의 이런 습관을 관리하는 데 도움을 주었다:

  1. 최적의 시간에는 사이트 접속을 제한해라. 나의 뇌는 아침, 그리고 퇴근한 후 저녁 6~7시 정도에 가장 느리다. 나는 Firefox용 LeechBlock, Chrome용 StayFocused, Safari용 WasteNoTime 을 사용해서 시간 죽이는 사이트들에 정확히 그 시간 동안에만 접속할 수 있도록 제한했다.

    최근에는, 이 방법을 극단적으로 적용했다. 시간 죽이는 사이트들을 내 노트북에서 영원이 접속 차단시킨 것이다. 금단 증상이 진정된 후 부터는 정말 좋다고 느끼고 있다.

  2. 자주 확인해보는 (polling) 웹서핑 스타일을 버려라. 뭔가 새로운 글이 없나 웹사이트를 자주 확인해보는 것은 비효율적이고 습관이 형성되기 쉽다. 한 사이트를 100번 새로 확인해보았을 때 새 글이 없더라도, 101번 째 확인했을 때 새 글이 있다면, 당신은 그 새로운 글을 보상으로 받고 습관이 강화될 것이다(reinforced).

    심리학자들은 무작위적으로 보상을 주는 것이 가장 습관을 강력하게 강화하며, 보상이 없어졌을 때 습관이 사라지는 데 걸리는 시간도 가장 길다는 것을 알고 있다. (당신이 좋아하는 사이트 URL을 계속 두드려 대는 습관이 없어지는 데에는, 해당 사이트가 차단된 이후에도 몇 달씩 걸릴 수 있다.)

  3. 종이 신문을 구독해라. 나는 아침마다 월스트리트 저널의 종이판을 훑어보고, 캠퍼스에서 오후에 읽기 위해 뉴욕 타임즈 한 부를 챙긴다.

웹서핑 습관을 깨고자 할 때에는 금단 증상에 대비해야 한다. 나는 처음 사이트들을 차단했을 때, 그 차단을 우회하고싶은 유혹을 거의 매 시간 느껴야 했다.

처음에는 가능한한 모든 우회 경로를 차단하고, 어느 정도 “디톡스” 된 후부터 천천히 풀어라.

죽은 시간을 테크놀로지로 살려내라

우리의 생활 속에는 사무실에서 기다릴 때, 공항에서 기다릴 때, 수업 전에 기다릴 때, 버스 안에서 기다릴 때 와 같이 죽은 시간으로 가득하다. 그리고 죽은 시간은 누적된다.

다행히, 연구자들에게는 죽은 시간이 시작되려는 순간 곧바로 생산적인 일을 할 수 있도록 도와주는 거래 비용이 적은 디바이스들이 많이 있다. Kindle 과 같은 이북 리더, 스마트폰, 타블렛 PC 등이 그것이다.

당신이 읽은 모든 논문들(또한 읽고 싶은 논문들)이 담긴 얇은 타블렛을 가지고 다니는 것은 자칫 낭비될 수 있는 시간을 살려준다.

이러한 논문들을 클라우드에 저장해두면 접근하기 쉬워진다.

나는 클라우드 저장소로, Copy 의 깔끔한 인터페이스와 넉넉한 무료 용량, 그리고 공정한 공유 정책을 정말 좋아한다.

이런 디바이스들은 생산적인 읽기를 통해 죽은 시간을 상당히 많이 살려준다. 특히, 학회나 저널 논문을 피어 리뷰 할 때 유용하다.

아이패드로 오랫동안 읽을 때에는, 손쉬운 사용에서 색상 반전 옵션을 켜 흰 배경을 검은색으로 바꿔라. 당신의 눈이 고마워 할 것이다.

기다리는 동안 이메일 받은 편지함을 “가지치기” 할 때, 나에게는 Mailbox 앱이 특히 효율적이다.

TV를 없애라

나는 TV를 계속 켜두는 것이 하루 종일 생산성을 잡아먹을 수 있다는 사실을 발견했다. Hulu, Netflix, 그리고 iTunes 같은 사이트들을 사용하면 더이상 케이블 TV 수신료를 내지 않아도 된다.

나는 전혀 TV가 그립지 않다.

이메일 길들이기

이메일은 여러 분야에서 업무 시간의 많은 부분을 차지하고, 학계도 예외는 아니다. 나는 이메일이라는 괴물을 길들이기 위해 적지 않은 노력을 들였다.

이메일을 놓치는 일을 피하기 위해서, 나의 모든 이메일 계정은 나의 공용 GMail 계정으로 포워딩하여 한 곳에서 모두 확인할 수 있도록 한다.

출장중이거나 인터넷 접속이 안될 때에 나의 모든 이메일에 접근하는 것이 꼭 필요해짐에 따라서, 나는 OfflineIMAP 과 notmuch 를 통해서 나의 모든 이메일을 오프라인으로 검색할 수 있도록 해두었다.

나는 또한 8년동안의 이메일 히스토리를 모두 GMail 계정에 업로드해서 빠르고 쉽게 검색할 수 있도록 했다.

나는 내 아이폰에서 Mailbox app 을 사용하여 빠르게 이메일을 가지치기 해낸다.
(역자 주: 중요하지 않은 메일을 쳐낸다는 뜻인 듯).

내 노트북에서는, 콘솔 기반의 mutt 를 사용해서 이메일을 효율적으로 답장한다. vim 이나 mutt 등의 효율적인 텍스트 편집기를 사용해서 이메일을 작성할 수 있다는 것은 이메일 처리량을 늘리는데 필수적이다.

나의 OfflineIMAP + notmuch + mutt 설정은 Steve Losh 가 작성한 가이드를 따랐다.

나는 또한 학계의 이메일 사용 수칙에 대한 글을 작성했다.

이메일의 양이 임계점을 넘게 되면, 이메일 알림 기능을 끄는 것이 중요하다.

이메일 작업 하는 시간을 하루 중 특정 몇 시간으로 제한하고, 답장은 한꺼번에 몰아서 해라.

반복해서 답하지 않기: 블로그를 통해 “대중에게 답장하기”

만약 당신이 서로 다른 여러 질문에 동일한 답변을 반복하거나, 똑같은 질문에 답장해야 하는 일이 반복하는 일이 잦아진다면, 해당 답변을 블로그 글로 옮길 때이다.

“대중에게 답장하기”에 대한 더 자세한 내용을 보려면, 내가 쓴 효율적인 학계 블로깅 글을 참고해라.

암호화에 대한 주의사항

당신이 “사생활 보호에 신경쓴다”면서 정작 민감한 내용이 담긴 이메일을 PGP 등으로 암호화 하지 않은 채 보내거나 받고 있다면, 당신은 잘못하고 있는 것이다.

당신이 민감한 이메일(혹은 어떤 형태로든 민감한 정보)을 노트북에 보관하고 있고, 그 하드 디스크를 좋은 패스워드로 암호화 하지 않았다면, 이것도 마찬가지이다. 데이터를 제대로 암호화하는 것만이 당신의 민감한 데이터를 엿보는 눈으로부터 지키는 유일한 방법이다.

내가 미리미리 암호화를 하는 이유는 안전벨트를 매는 이유와도 같다. “이것을 사용해서 다행이다” 라고 생각할 상황이 생기지 않기를 바란다.

더 자세한 내용을 보려면, 내 암호화 입문서를 읽어보라.

노트북으로 일해라

  1. 노트북(laptop)을 고를 때에는, 휴대성에 최적화된 크기와 배터리 용량을 고르고, 하드 디스크 용량을 최대한 늘려라. 계산 처리를 위해서는 서버를 사용해라.
  2. 외장 키보드, 마우스, 모니터를 사용해라. 커다란 외부 모니터는 생산성을 향상시킨다.
  3. 노트북에 중앙 데이터 저장소가 되도록 해서 동기화 문제로 골치썩지 않도록 해라. 여전히 데스크탑을 사용했을 때에도, 내 홈 디렉토리를 NFS를 통해서 노트북에서 데스크탑으로 보냈다. SAMBA나 AFS도 동일하게 잘 작동한다.
  4. 노트북을 당신의 주 하드 디스크로 사용하고, 노트북을 매주 백업해라. 애플의 타임머신 소프트웨어는 백업을 깔끔하게 자동화해준다.
  5. 당신이 정기적으로 노트북을 사용하는 모든 장소마다 여분의 전원 어댑터를 구매해서 설치해라.

캘린더 시스템을 활용해라

대학원생일 때에는, 내가 무엇을 해야 하고 중요한 데드라인들이 언제인지 머릿속에 다 담을 수 있을 정도로 삶이 단순했다. 교수이자 아빠가 된 지금의 내 스케쥴은 온갖 종류의 약속과 내가 있어야할 곳들로 가득하다. 내 아내와 나는 Google Calendar를 사용해서 일정을 동기화한다.

캘린더를 동기화 하면, 바쁜 사람들이 주로 피하려 하는 협업의 추가 비용 없이도 삶이 잘 정돈될 수 있게 된다.

메신저를 꺼라

메신저(instant messaging) 기술은 훌륭하지만, 일을 중간에 끊기기 너무 쉽다. 그리고 과학 분야에서 일이 자꾸 중단되는 것은 좋은 연구를 하는 데 치명적이다. 당신과 정말로 연락해야 하는 사람들은 전화나 문자를 하거나 이메일을 보낼 수 있다.

협업 비용을 최소화해라

  1. 연구 그룹을 운영하는 것은 소규모 자영업을 하는 것과 비슷하다. 연구 그룹에 이름을 지어서 브랜드를 만들어라 (U Combinator 처럼!). 프로젝트를 진행할 때에는, 해당 프로젝트에 제품 이름이나 코드 네임을 지어라.
  2. 논문을 쓰기 위한 협업 도구들을 활용해라. CSV는 오래 전의 표준이었다. Subversion (SVN) 은 이제 여러 분야의 학계에서 쓰여지고 있다. SVN이나 CVS같은 도구들은 여러 사람이 동시에 같은 문서에서 작업하는 것을 가능하게 해준다. 대부분의 경우, 이러한 도구들은 여러 사람이 작업한 변경점들을 어떻게 합칠 것인지 사용자에게 물어보지 않고 알아서 잘 통합할 수 있다.
  3. 연구 그룹이 사용할 서비스들(ssh, 이메일, 공유 디스크, 웹사이트, 포럼, 위키, svn)을 돌리는 전용의 가상 서버를 설치해라. 나는 linode.com의 가장 싼 요금제를 이러한 목적으로 사용하는 것을 추천한다.

참고 문헌 관리 시스템을 활용해라

대학원에서는, 나는 BibTeX 파일을 수동으로 관리했다. 여러 사람들과 일하는 여러 프로젝트들에서 일하기 시작할 때마다, 이 수동 관리 시스템은 붕괴되었고, 내 BibTeX 파일은 제대로 업데이트 되지 않았다. 다행히 지금은 이러한 어려움들을 자동화해줄 수 있는 훌륭한 참고 문헌 관리 시스템들이 있다. 나는 Mendeley, Zotero, 그리고 CiteULike를 사용해 보았다. 이 세 가지 중에서 나는 CiteULike가 가장 마음에 든다.

  1. CiteULike는 여러 과학 논문 데이터베이스에서 자동으로 인용 정보를 자동으로 가져오는 기능을 지원한다.
  2. CiteULike는 정확하게 인용 정보를 가져오는 데는 최고다.
  3. CiteULike는 그룹 단위로 협업하는 것을 쉽게 해준다.
  4. CiteULike의 사용자 혹은 그룹의 BibTeX 파일들은 URL을 통해 가져오기가 가능하며, wget과 같은 커맨드라인 도구와 함께 쓰일 수 있다.
  5. CiteULike의 자료는 평문(plaintext)으로 내보내지기 때문에, BibDesk 등의 또다른 참고 문헌 관리 시스템으로 옮기거나 함께 사용하기 편리하다.

생산적으로 미뤄라

꼭 할일을 미뤄야 하겠다면, 하찮은 일을 하기 보다는 좀 더 늦은 데드라인의 다른 생산적인 일을 하며 시간을 보내도록 노력해라. 나는 논문 제출 데드라인 전날을 자주 다음 논문이나 연구 제안서를 작성하며 보낸다.

일을하며 미루는 것이 잘 되지 않는다면, Academic Productivity Blog 등에 나오는 것을 실제로 해보는 등의 메타 단계의 일을 해보라.

생산적으로 운동해라

나는 운동하는 것이 창의력을 증가시킨다는 사실을 이해하는데 시간이 꽤 걸렸다. 이제는 운동 없이 어떻게 새로운 발견을 해낼 수 있었는지 의문이 든다.

운동을 하기 위해 일이나 여가 시간을 희생하지 않아도 되는 방법을 알아내는 데에는 더 오랜 시간이 걸렸다.

핵심은 운동을 시작하는 데 들어가는 비용을 최소화해서, 내가 언제든 짧은 휴식을 취할 때, 단 1분간이라도, 그 휴식 시간동안 빠르게 운동을 할 수 있도록 하는 것이다. 나는 내 사무실을 작지만 잘 갖추어진 헬스장으로 만들어냈다.

첫 번째 기구는 내가 여전히 가장 자주 사용하고, 다방면에 유용하며 콤팩트한 나의 10-90파운드 무게 조절 덤벨이다.

 

Adjustable Dumbbells
 

평균적으로 나는 매주 120분 정도 운동을 하는데, 이 120분은 예전이라면 책상 앞에서 고민하고 있었을 시간을 짜내서 만들어낸 것이다.

지금은 아령을 들면서 고민을 한다.

왜 무거운 아령을 드는 것이 창의력을 향상시키는지 잘 설명할 수는 없지만, 어쨌든 나의 경우에는 그렇다.

나는 앞에서 얘기한 최소 저항 원칙을 적용해서 체중 감량근력 강화를 하는 방법에 대한 글도 썼다.

반복을 통해 완벽에 가까이 가라

완벽이라는 것은 어떤 달성할 수 있는 상태가 아니라 일종의 프로세스라고 생각해라. 완벽주의는 생산성을 저해한다. 나는 완벽주의 때문에 프로젝트를 시작조차 하지 못하는 학자들을 알고 있다. 나는 자신들의 생산성이 떨어지는 이유가 바로 완벽주의 때문이라고 자랑스럽게 변명하는 학자들도 조금 알고 있다. 나는 완벽주의가 과연 자랑할만한 일인지 의문스럽다. 완벽하기 원하는 것이 잘못된 것이라고 생각지는 않는다. 다만 완벽을 기대하는 것이 비현실적이라고 생각할 뿐이다.

학자들이 도달해야할 상태는 “그만하면 충분한(good enough)” 상태이며, 시간이 허락한다면 “충분하고도 남는(better than good enough)” 상태까지는 도달할 수 있다. 완벽이라는 단어가 존재한다는 사실을 잊어버려라. 그렇지 않으면, 실질적인 과학적 임무가 끝난 뒤에도 프로젝트에 무한히 시간을 잡아먹히게 될 수 있다. 존재하지도 않는 완벽한 논문을 무한히 쓰려 애쓰는 것보다, 적당히 좋은 논문 한 편을 제출하는 편이 훨씬 낫다는 말이다.

컴퓨터 과학 분야의 논문 출판 프로세스는 다음과 같이 반복적인 프로세스를 장려하며, 다른 분야에서도 마찬가지일 것이라고 생각한다.

  1. 아이디어가 잘 다듬어질 때까지 발전시킨다. 약간의 예제를 만들어 보고 직관적으로 말이 되는지 확인한다. 시간이 있다면 경험적 실험으로 검증한다. 이 아이디어에 대한 피드백을 받기 위해 워크샵에 제출해라. 또한, 워크샵은 예비단계의 연구에 대한 것이지 준비가 덜된 논문을 제출하는 곳이 아니라는 것을 기억해라. 워크샵 논문이라도 여전히 완결성이 있고 잘 쓰인 논문이어야 한다.
  2. 만일 이 아이디어가 좋은 아이디어라는 확신이 들면, 경험적 실험으로 검증하고 이론을 세운다. 이제 이것을 좋은 학회에 제출한다. [컴퓨터 과학 분야에서는 좋은 저널에 논문을 내는 대신 좋은 학회에 논문을 낸다.]
  3. 이 아이디어에 대한 열정이 있다면, 일이년 정도 후에 해당 아이디어의 핵심과 영향력에 대해 충분히 인지한 후에 저널 논문을 쓴다.

반복적으로 일하는 방식을 사용하기 원한다면, 반복이 쉽도록 만들어라:

  1. 당신이 무언가 하겠다는 생각이 들 때, 그 즉시 시작해라. 빈 문서 파일을 만들고, 빈 프리젠테이션 파일을 만들고, 이메일 작성을 시작해라 (받는 사람을 비워두고). 그러고 나면, 추후에 실제로 그 일을 진행하려고 할 때의 거래 비용이 거의 사라진다.
  2. 프로젝트를 진행할 때에는, 진행하고 싶은 마음이 들 때 해라. N일이 걸리는 일의 데드라인이 정확히 N일 남은 경우가 아니라면, 데드라인의 순서를 너무 신경쓸 필요는 없다.

DropBox App folder names in different languages

While developing my open-source project Journaley, I ran into a situation where I wanted to detect a specific folder inside the App Folder of Dropbox root directory. This was not a trivial task, because the App Folder name differs depending on the Dropbox user's language setting. So, I manually switched between different language settings and checked the name of the App Folder created by Dropbox in each language. The table below is the summary of what I found, which I keep here for future reference.

Language App Folder Name
Bahasa Indonesia Aplikasi
Bahasa Malaysia Apl
Dansk Apps
Deutsch Apps
English Apps
Español (España) Aplicaciones
Español (Latinoamérica) Aplicaciones
Français Applications
Italiano Applicazioni
Nederlands Apps
Norsk (bokmål) Apper
Polski Aplikacje
Português (Brasil) Aplicativos
Pусский Приложения
Svenska Applikationer
Українська [Beta] Програми
ไทย แอพ
中文(简体) 应用
中文(繁體) 應用程式
日本語 アプリ
한국어

미국 내 소프트웨어 엔지니어 잡서치 후기

저는 지난 2014년 겨울~2015년 봄 동안 미국에서 소프트웨어 엔지니어 포지션으로 잡서치 기간을 가졌습니다. 그리고 마운틴뷰의 구글 본사에서 2015년 가을부터 일하게 되었습니다. 구직을 준비하는 과정에서 여러 선배분들의 조언과 블로그 글에서 큰 도움을 받아서 저도 조금이나마 다른분들께 도움이 될까 하는 마음으로 글을 씁니다. 아마 다른 글들과 중복되는 부분도 많을 것 같습니다. 어디까지나 개인적인 후기이니 참고만 해주세요.

배경

구직 당시에 저는 미국에서 소프트웨어 공학 박사과정 5년차였고, 2015년 5월 졸업을 예정에 두고 있었습니다. 대략 박사 3년차 정도부터 이미 졸업 후에는 미국 IT업계에서 소프트웨어 엔지니어로 일해야겠다고 마음을 먹고 있었습니다.

잡서치 스케쥴

잡서치 기간에 뭘 했는지 대략 정리해보면,

  • 2014/08: 코딩 인터뷰 공부 시작 (알고리즘/데이터구조 공부, 문제풀이 등)
  • 2014/11: 레쥬메 준비
  • 2014/11하순: 리크루터 혹은 회사 다니고 있는 지인들에게 연락 해보기 시작
  • 2014/12중순-2015/01중순: 실제 가장 많이 어플라이 한 기간
  • 2015/02하순-2015/03초순: 온사이트 인터뷰 기간
  • 2015/03중순경: 여러 회사에서 최종 합격 여부 통보 받음
  • 2015/03/20: 최종 결정해서 각 회사에 알림

이정도가 됩니다. 어떤 경로로든 입사 지원을 처음 하고 나서 기술 인터뷰까지 가는 데 기간이 몇달씩 걸리기도 하기 때문에 미리 컨택할 수록 좋은 것 같습니다. 지원을 좀 일찍 했다고 인터뷰를 반드시 빨리 해야한다거나 하지는 않고, 인터뷰 일정은 지원자 상황에 회사가 많이 맞춰주는 편입니다. 경험상 “아직 인터뷰 준비를 좀 더 하고 싶으니 기다려달라” 하면 기다려주고, “다른회사 리크루팅 프로세스가 이미 많이 진행됐는데 최대한 expedite 해달라” 하면 어떻게든 해주기도 합니다. 최종 오퍼가 오고 나서는 어느정도 기간 안에 결정을 내려서 알려줘야 합니다. 이 기간을 잘 맞추려면 온사이트 인터뷰들을 최대한 몰아서 (대략 2주정도 범위?) 하는게 좋습니다. 온사이트 일정을 잘 조율하려면 최대한 일찍 원하는 회사들의 리크루팅 프로세스가 시작되도록 해야 합니다. 또 다른 이슈로는 인터뷰를 보는 순서가 있는데, 이왕이면 가고 싶은 회사 인터뷰를 뒤로 미루는게 앞쪽에서 인터뷰 연습도 할 겸 좋을거라고 생각을 했습니다. 그런데 준비하다보면 이 일정이 꼭 마음대로 되지가 않습니다. 제 경우는 막상 가고 싶은 회사들 리크루팅 프로세스가 먼저 시작되어 버려서 제일 가고 싶었던 구글에서 처음으로 인터뷰를 하게 되었습니다.

2월말 ~ 3월초까지 온사이트 인터뷰들을 봤는데, 이 시기가 그 해에 바로 H1-B 비자를 지원해볼 수 있는 최후의 마지노선이었던 것 같습니다. 보통 온사이트 한 이후로 최소 1~2주는 지나야 합격 여부를 알게 되고, 제가 오퍼 받은 회사들은 모두 H1-B 지원을 하려면 3월 20일까지 최종 결정을 해서 알려달라고 했습니다. 좀 더 규모가 작은 다른 회사들은 더 일찍부터 시작해야 되는 경우도 있었습니다. 참고로 저는 조금 일찍 구직을 시작한 편인데요, F1 OPT 도 있긴 하지만 H1-B 지원도 같이 하고 싶었기 때문입니다. OPT 나 다른 work authorization 이 있어서 무리해서 H1-B 를 지원하지 않아도 된다면 더 늦게 구직을 해도 될 것 같습니다. 다만, 저의 경우 잡서치가 빨리 끝났기 때문에 박사 졸업/디펜스 준비에 올인할 수 있어서 좋았습니다. 졸업 이후에 구직을 하게 되면 미래가 불확실해져서 불안할 수 있고, OPT 규정상 최대 unemployed 기간이 정해져있어서 문제가 될 수 있는 점도 참고하세요.

입사 지원

지원 회사

지원한 회사들은 미국내 유명 소프트웨어 기업들 위주로 지원했고 (대부분 Bay Area / Seattle), 모두 15군데 지원했습니다. 총 9곳에서 연락을 받았고, 이들 중 구글, F사, P사 에서 공식 오퍼 레터를 받았습니다. 연락 온 6개의 다른 회사들 중 한 곳은 프로세스 도중 전화면접에서 떨어졌습니다. 2곳에서는 이미 제가 최종 결정을 내린 후에 연락이 와서 프로세스를 진행시키지 않았습니다. G,F,P사 오퍼 레터를 받을 당시 프로세스가 진행중이던 나머지 3개의 회사에는 프로세스를 중지해달라고 요청했습니다. 지원한지 2달 이상 걸려서 연락 오는 경우도 있었습니다. 다시 한 번 말씀드리지만 미리미리 지원하는 것이 좋습니다.

이력서 (Resume / CV)

저는 연구 포지션도 아닌 순수 소프트웨어 엔지니어링 포지션에만 관심이 있어서, 레쥬메에서 연구 관련된 내용은 많이 쳐내고 1장으로 어떻게든 압축을 해 냈습니다. 레쥬메 내용은 가능하면 테크니컬 스킬을 강조할 수 있는 방향으로 가닥을 잡고, 이 샘플을 많이 참고하여 작성했습니다. 저는 커버레터 작성은 딱 A사 한 군데만 했고, 나머지 회사들은 커버레터 없이 지원했습니다.

지원 방법

지원하는 방법은 다양합니다. 경험적으로 가장 확률이 높은건 내부 지인의 추천을 통해서 지원하는 방법입니다. 처음 연락이 오기까지의 허들이 높은 편이고, 일단 연락이 오고 나면 그 때부터는 꽤 빨리빨리 진행이 되었습니다. 제 경우 특이하게도 오퍼 받은 3군데 회사에 지원한 방법이 다 다릅니다 (G: 내부인 추천, F: 리크루터에게 직접 이메일, P: 학교에서 Tech Talk 할 때 레쥬메 제출). 상황에 따라 다양한 방법으로 지원하시면 됩니다. O사의 경우, 학교의 취업 사이트를 통해서 간단히 지원했는데, 아무 소식 없다가 한달 반정도 후에 갑자기 온사이트 인터뷰를 하자는 연락이 왔습니다.

코딩 인터뷰 준비

제 경우는 박사 3년차부터 졸업 후에는 software industry 에서 일하겠다고 마음을 먹은 상태여서 비교적 일찍 준비를 시작할 수 있었습니다. 2014년 가을학기 시작하면서 부터 코딩 인터뷰 준비를 했고, 이에 관해 좀 자세히 설명해보려 합니다. 그에 앞서, 대부분의 소프트웨어 회사에서 사용하는 화이트보드 코딩 인터뷰가 왜 어려운지에 대한 제 의견을 먼저 공유합니다.

코딩 인터뷰가 어려운 이유

  1. 코드 편집이 어렵습니다. 일반적인 에디터 환경이라면, 있는 코드 중간에 새 코드를 끼워넣거나 copy & paste 해서 고치는 경우가 흔합니다. 하지만 화이트보드에서는 이런 단순한 편집도 굉장히 귀찮고 까다로워 집니다.
  2. IDE 지원이 없습니다. 화이트보드 코딩을 하면 IDE 의 도움을 받을 수 없게 됩니다. Syntax highlighting, refactoring, compiler, debugger 등의 지원이 갑자기 없어지면 엄청 불편해집니다.
  3. 설명을 병행하면서 코딩해야 합니다. 코딩 인터뷰중에는 내가 어떤 생각을 통해서 이런 코드를 짜고 있는지, 자신의 thought process 를 명확히 밝히면서 코딩을 해줘야 합니다. 그런데 코딩을 하면서 말로 (잘 안되는 영어로…) 설명을 병행하면 코딩에 온전히 집중하기가 어렵습니다. 평소에 그냥 혼자서 코딩하면 쉽게 금방 할 것을 버벅이면서 잘 못하게 되거나 실수를 하는 경우가 생깁니다.

폰 인터뷰는 보통 온라인 코드 에디터를 사용하게 되기 때문에 1번 문제는 없지만, 2, 3번 문제는 동일합니다.

본격적인 코딩 인터뷰 준비

저는 위에서 언급한 코딩 인터뷰의 특수성을 염두에 두고 준비를 했습니다. 졸업 준비와 병행하며 해야 했기 때문에 그냥 짬짬이 시간을 내서 특히 주말에 많이 준비했습니다. 프로그래밍 언어를 하나 딱 정해두고 준비하는게 좋은데, 저는 박사과정 내내 주력으로 사용한 Java 를 선택했습니다. 우선 dynamic programming, tree algorithms, dfs/bfs 등을 가볍게 리뷰한 후, 다음의 3가지를 중점적으로 준비했습니다.

LeetCode 의 장점은 일단 자체 코드 에디터(IDE 기능들은 없고 syntax highlight만 되는)가 있어서 폰 인터뷰와 비슷한 환경을 제공한다는 점입니다. 그리고 작성한 코드를 제출하면 자동으로 채점을 해주기 때문에 많은 도움이 됩니다. 이런 온라인 코드 채점 시스템에 익숙하지 않은 분들을 위해 간단히 설명하면, 단순히 답만 맞으면 되는게 아니라 지정된 시간/메모리 제한 내에서 답을 출력해야만 accept 가 됩니다. 여기서 IDE 의 도움 없이 코딩해서 최대한 에러 체크를 머릿속으로 해보고 최소한의 submit 횟수로 accept 받는 것을 연습하면 큰 도움이 됩니다. 문제가 생각보다 많아서 이게 기간이 꽤 걸리는데, 저는 폰 인터뷰 시작하기 전까지 모든 문제를 한 번씩 다 풀어봤습니다. 스스로 풀어보고 난 후에 궁금하다면 문제 페이지에서 discussion 으로 들어가면 다른 사람들이 올려둔 솔루션들이 많이 있으니 참고하실 수 있습니다.

CTCI 는 주요 알고리즘/데이터구조 등이 잘 정리되어 있어서 리뷰하는데 많은 도움이 됩니다. CTCI 에 나오는 연습문제들은 LeetCode 와 좀 다른 방식으로 풀었는데, 문제를 가지고 적당히 시끄러운 카페에 가서 종이에 손으로 코딩하면서 풀었습니다. 그리고 단순히 종이에 손코딩을 한 것이 아니라, 입으로 계속 중얼중얼 설명을 하면서 풀었습니다. 위에서 나열한 코딩 인터뷰의 어려운 점들을 극복하는 연습으로써 이렇게 했고, 저에게는 이 연습이 실제 인터뷰 때 굉장히 큰 도움이 되어습니다. 코드 편집을 할 수 없으니 좀 더 알고리즘의 큰 그림을 먼저 생각하여 skeleton 을 짜고, 그 이후에 skeleton 에서 적당히 method 이름만 적고 넘어간 부분들을 따로 구현해주는 식으로 연습을 했습니다. 더 좋은 방법은 실제 화이트보드 앞에서 mock interview 를 하는 방법일텐데, 저는 여건상 mock interview 는 해보지 못했습니다. 같이 취업 준비하는 동료가 있으면 많이 도움이 될 것 같네요.

TopCoder Arena 문제들도 풀었는데, 이 것은 앞의 2가지와 달리 어려운 코딩 문제를 풀기 위해서가 아니었습니다. 머릿속으로 생각한 것을 코드로 correct 하게 구현해낼 수 있는 코딩 감각을 유지하기 위해서 일종의 매일 하는 운동에 가까웠습니다. 매일 250-300pt 레벨 문제를 2개씩 풀었습니다. 이 것은 코딩 감각 유지가 목적이었기 때문에, 제가 늘 쓰던 Eclipse IDE 에다가 EclipseCoder 라는 TopCoder 플러그인을 깔아서 빨리빨리 코딩하는 방식으로 연습했습니다. 이 연습의 장점은 자주 쓰게 되는 collections 라이브러리나 string manipulation 등에 익숙해진다는 점입니다. 저도 TopCoder Arena 는 이번에 처음 해보았는데요, 사용방법은 검색해보시면 많이 나옵니다.

LeetCode 와 CTCI 는 시작할 때부터 쭉 병행했습니다. 제가 LeetCode / CTCI 문제들을 풀면서 가장 신경썼던 부분은 절대로 먼저 답을 확인하지 않는다 라는 원칙입니다. 어차피 실제 면접을 보면 모르는 문제가 나올 것이고, 새로운 문제를 만났을 때 풀어내는 능력을 길러야 한다고 생각했기 때문입니다. 혹시라도 아는 문제가 나오면 솔직하게 면접관에게 얘기하고 다른 문제를 받는 것이 더 낫다는 조언을 많이 들었고, 저도 동의합니다. 그래서 준비할 때에는 정말 며칠씩 고민해도 문제가 명확하게 풀리는 않는 경우를 제외하고는 늘 먼저 스스로 풀어본 후에 궁금하면 다른 사람들 코드나 책의 솔루션을 참고했습니다.

참고로 저는 careercup.com glassdoor.com 사이트 등은 너무 정리가 안 되어있고 저도 시간도 부족해서 그냥 포기하고 거의 안 봤습니다. 그리고 회사별 인터뷰 특징은 여기저기 검색해보면 많이 나오고 CTCI 책에도 좀 나와있으니 미리 알고 가면 약간은 도움이 됩니다. 그렇지만 결정적으로 크게 영향을 미치지는 않는 것 같습니다.

실제 인터뷰 팁

마지막으로 실제로 인터뷰 하면서 경험으로 체득한 팁을 몇 가지 공유합니다.

폰 인터뷰

폰 인터뷰가 온사이트 인터뷰보다 쉬울거라고 지레짐작했는데, 오히려 저는 폰 인터뷰가 훨씬 어려웠습니다. 물론 문제의 난이도 자체는 온사이트보다 약간 쉬운 편인데, 면접관과 같은 공간에서 진행하는게 아니기 때문에 어려운 점들이 있었습니다. 얼굴 표정이나 몸짓등이 전달이 안 되고, 그림을 그려가면서 설명하기도 어려우며, 통화 품질이 떨어지는 경우도 생길 수 있습니다. 그래서 폰 인터뷰 때는 다음과 같은 것들을 좀 주의하면 좋습니다.

  • 열심히 말로 설명할 것. 온사이트 인터뷰와는 달리 면접관은 지원자가 생각을 하고 있는지 아닌지 조차도 얼굴을 볼 수 없으니 알기가 힘듭니다. 그렇기 때문에 온사이트 때보다도 더 말을 많이 한다는 생각으로 (think aloud) 면접을 진행해야 합니다.
  • 키보드로 타이핑을 해야하기 때문에 블루투스 이어셋 등을 마련해두는 것은 필수입니다. 컴퓨터용과 폰용 2가지 다 있으면 더 좋습니다. 제 경우 한 면접관이 Skype 로 연락하기로 했는데 실제로는 전화로 연락을 해왔습니다. 다행히 휴대폰용 블루투스 이어셋도 준비되어 있어서 큰 문제 없이 면접을 진행할 수 있었습니다.
  • 지원할 때 냈던 레쥬메나, 자주 사용하는 라이브러리 문서등은 미리 띄워놓으면 좀 도움이 됩니다. 듀얼 모니터라면 더 좋습니다.

온사이트 인터뷰

온사이트 인터뷰 에서는 다음과 같은 부분들을 유념하면서 인터뷰에 임했습니다.

  • 처음 문제를 듣고난 뒤에는 문제를 제대로 이해했는지 여러가지 질문을 하며 확인하는 과정이 필수입니다. 이 과정에서 문제에 ambiguous 한 부분이 있다면 파고들어서 미리 clarify 해두어야 합니다. 이것 또한 면접의 중요한 요소입니다.
  • 문제를 확실히 이해했으면, 곧바로 코딩으로 들어가기 전에 먼저 어떤식으로 문제를 풀 것인지 면접관에게 구두로 설명합니다. 다양한 high-level 아이디어들을 최대한 떠올려보고 그 중 가장 적절한 방법을 설명합니다. 설명하는 도중에 문제점이 발견되거나 더 좋은 방법이 떠오르면 최대한 일찍 방향을 선회하면 됩니다.
  • 코딩을 시작해도 되겠는지 물어본 뒤 코딩을 시작합니다. 면접관이 코딩을 시작하라고 먼저 말해주기도 합니다. 간단한 테스트 케이스 몇가지를 미리 정해두고 시작하는 것도 좋습니다.
  • 화이트보드 공간이 모자랄 수 있으니 최대한 왼쪽 위 구석에서 시작합니다. 더블 스페이스 느낌으로 라인 사이사이에 공간을 좀 비워두면 나중에 혹시 코드를 끼워넣어야 할 때 편합니다.
  • 생각보다 시간이 잘 가기 때문에 조금 빨리 코딩하는게 좋습니다. 중간에 인터뷰어가 질문을 하거나 힌트를 주면 반드시 잘 되새겨보고 문제점이 무엇인지 파악해야 합니다. 해당 문제에 대해서는 면접관이 훨씬 더 경험이 풍부하고 잘 알고 있다는 사실을 기억합시다.
  • 코딩이 끝났으면 바로 끝났다고 얘기하기 보다는, 테스트 케이스를 머릿속으로 수동으로 코드에 넣고 돌려봅니다. 이 과정에서 계산 결과, 조건식 등을 대충 넘어가지 말고, 실제로 계산 다 해보고, 조건식 양쪽 다 evaluate 해서 원하는 대로 결과 나오는지 체크해 봅니다. 저는 이거 하면서 면접중에 버그 몇개 잡았습니다 :p
  • 면접에 임하는 태도도 중요한 요소임을 기억해야 합니다. 면접관이 ‘이 사람과 동료로서 같이 일하고 싶은가?’ 라는 질문에 그렇다 라고 대답할 수 있도록 노력해야 합니다. 너무 거만해서도 곤란하고 반대로 너무 shy 해서도 곤란하겠죠. 새로운 아이디어를 들었을 때, 재빨리 각 아이디어의 장단점을 파악하고 기존의 아이디어를 defend 하거나 새로운 아이디어 쪽으로 선회하는 유동적인 자세도 중요한 것 같습니다.
  • 마지막으로.. 가능하면 면접을 즐기세요 🙂 물론 저도 긴장은 많이 되었지만, 주어진 문제를 가지고 이 분야의 expert 와 즐겁게 토론한다는 마인드로 임했더니 배우는 점도 많았고 실제 면접에도 더 도움이 되었던 것 같습니다.

정리

이것 저것 생각나는 것 위주로 나열해 보았는데, 가장 중요한 포인트를 한 가지 뽑으라면 일찍 준비하기 시작하라는 것입니다. 뭐든 그렇지만 잡서치도 일찍 시작해야 정보도 많이 모이고 자기 상황에 맞게 계획을 세워서 모자란 부분을 중점적으로 잘 준비할 수 있게 되는 것 같습니다. 혹시 더 궁금하신 부분은 댓글로 물어보시면 제가 답변할 수 있는 한도 내에서 최대한 알려드리겠습니다.

마지막으로 제가 도움 받았던 다른 글들 링크 걸어둡니다.

PS. 어째 다 써놓고 보니 논문같은 형식으로 써버렸네요^^;;