Slide 1

Slide 1 text

시니어 SW 엔지니어의 이직 고군분투기 (3) 한때 개발을 접었던 창업자 출신 엔지니어를 구글로 인도해준 어떤 방법론 강사룡

Slide 2

Slide 2 text

Who is this guy? • 박애주의자 선천성 선택 장애자: 모두 사랑합니다~❤ • 엄마 vs 아빠 • 부먹 vs 찍먹 • 엔지니어링 vs 비즈니스 • 프론트엔드 vs 백엔드 • Android vs iOS • 역시 모두 사랑합니다~ • @ IBM iX Japan by 5/15 • @ Google Japan since 5/18

Slide 3

Slide 3 text

주의 사항 • 성급한 일반화의 오류 주의 • 어디까지나 개인적인 경험과 의견입니다 • 누군가에게 옳았던 전략이라도 나에게는 맞지 않을 수 있습니다

Slide 4

Slide 4 text

Chapter I. 문제편

Slide 5

Slide 5 text

정말 중요한 진실인데 남들이 동의해주지 않는 것은 무엇인가? Peter Thiel, Zero to One

Slide 6

Slide 6 text

I think I’ve found one good answer.

Slide 7

Slide 7 text

사람들은 중요한 것일수록 대충 처리하고 싶어한다. I think I’ve found one good answer:

Slide 8

Slide 8 text

예를 들어.. 취업준비생이라면,

Slide 9

Slide 9 text

기꺼이 시간을 쓸 수 있는 것 • TOEIC 고득점 받기 • 자격증 취득

Slide 10

Slide 10 text

기꺼이 시간을 쓸 수 있는 것 • TOEIC 고득점 받기 • 자격증 취득 길게 생각하기엔 너무 어려운 것 • 진로 선택 하기 • 최고의 직장에 들어가기 • 부자가 되는 방법 고민하기

Slide 11

Slide 11 text

기꺼이 시간을 쓸 수 있는 것 • TOEIC 고득점 받기 • 자격증 취득 길게 생각하기엔 너무 어려운 것 • 부자 되기 • 진로 선택 하기 • 최고의 직장에 들어가기 è나한테 왜이러세요?! 생각하는 것 자체가 공포스럽다. è 묻지마! 좋은 방향이든 나쁜 방향이든 대충 그럴싸한 해결 책만 찾으면 빨리 결정 내리고 잊어버리고 싶다.

Slide 12

Slide 12 text

TOEIC 점수를 높이기 위해선 엄청난 시간을 들이지만, 정작 자신에게 가장 맞는 커리어 패스, 가장 최적화된 취직 전략을 수립하는 데에는 단 몇 시간도 쓰지 않는다.

Slide 13

Slide 13 text

십수년 전부터 반복되는 비극..

Slide 14

Slide 14 text

평생 노력해서 얻은 퇴직금 + 추가 대출금을, 몇 번의 설명회만 듣고 프랜차이즈에 부어넣기..ㅠㅠ

Slide 15

Slide 15 text

대체 이런 모자란 인간을 추종 하는 이유가 뭘까?

Slide 16

Slide 16 text

의외로 powerful한 메시지: “교주만 믿으면 나머지는 전부 네 맘대로 살아도 된다”

Slide 17

Slide 17 text

사회인도 마찬가지..

Slide 18

Slide 18 text

부자 아빠 가난한 아빠 • “사람들이 가난한 이유는 돈이 없어서가 아니라, 돈을 금기시하며 금융 지식을 멀리하는 사고와 문화 때문” • 어떤 카드가 포인트를 많이 주는지 같은, 지엽적인 문제에는 집중하면서, 정작 자 산을 어떻게 모을지, 어떻게 관리할지는 생각하고 싶어하지 않음

Slide 19

Slide 19 text

개발자는 어떨까요?

Slide 20

Slide 20 text

실제로 있었던 일.. • 개발 기간은 단 5개월, 그 안에 쇼핑몰을 만들어야 한다! • 그런데, 기획이 아직 미완료 • 당연히, 디자인은 초안 수준

Slide 21

Slide 21 text

다들 우왕좌왕.. • 뭘해야 할 지 모르겠으니 업무 강도는 약 함. 그러나 스트레스는 배로 증가.. • 뭐라도 해야겠으니.. • Agile! 일단 스토리부터 작성 à 만병통치약이 아님. 게다가 이런 경우 설계를 엉망으로 만들 수도 있음 • 에라 모르겠다. 일단 화면 구성과 API 부터.. à 초안과 완전히 다른 디자인이 나와 폭망 • 개발 초기는 널널, 말기엔 죽음의 야근..

Slide 22

Slide 22 text

Chapter II. 방법론(1) 문제를 단순하게 만들기

Slide 23

Slide 23 text

당면 문제를 바꾼다, 최대한 직관적으로 와닿는 형 태로.

Slide 24

Slide 24 text

1) 전통적인 노하우 – Entity(data schema)를 먼저 확립 1) 전통적인 노하우 – Entity(data schema)를 먼저 확립

Slide 25

Slide 25 text

Entity(data schema)를 먼저 확립 • 간략한 ER Diagram 형태로 모든 주요 엔티티를 도출

Slide 26

Slide 26 text

• 자연스럽게 핵심 도메인 로직에 사용되는 데이터를 파악하게 된다 • 모든 개발팀원들이 쉽게 시스템의 가장 중요한 요구 사항들을 파악할 수 있다 • 1주 정도의 설계 확립 후, 바로 코딩에 들어갈 수 있 다 • But, 비즈니스 로직을 완전히 파악하기엔 무리가 있 음 à 여러가지 부작용이 야기될 수..

Slide 27

Slide 27 text

2) 더 영리한 방법 – Domain-Driven Design: Biz Entity(domain model)를 먼저 확 립

Slide 28

Slide 28 text

DDD? • 비즈니스 전문가와 함께 공통의 언어, 공통의 그림을 그리고, 이를 기반으로 설계

Slide 29

Slide 29 text

• 프로젝트 최악의 리스크를 방지 – 실제 비즈니스 요 건과 개발자와의 괴리 • 빠른 속도로 전체 내용을 가시화 가능. 개발자도 뭘 해야할 지 즉시 파악 가능 • 가장 변화 가능성이 적은 도메인 계층을 먼저 구현, 이후 데이터 계층 à 프리젠테이션 계층 순으로 구현 • 부가적으로, • 요구사항의 변경 가능성이 줄어듦 • 서버와 클라이언트가 거의 동일한 로직을 공유 가능: 슈퍼 셋과 서브셋에 가까운 형태로

Slide 30

Slide 30 text

3) 뇌를 혹사하지 않는 구현 방법 – Test-Driven Development

Slide 31

Slide 31 text

TDD? • 기능을 구현하기 전에, 그 기능의 스펙을 먼저 작성하는 방법론 • 먼저 기능 명세를 간단히 작성 • 완료까지 무한루프 • 1번 기능을 만족하는 유닛 테스트 작성 • 1번 기능만 통과하는 유닛 테스트를 마구잡이로 작성 • 리팩토링 • (필요시)새로운 기능을 명세에 추가 • 눈 앞에 당면한 과제에만 급급해서 푸는 게, 역설적으로 더 훌륭한 코드를 만들 도록 해줌! • 참고 서적: TDD by Example

Slide 32

Slide 32 text

Chapter III. 방법론(2) 단순화 불가능한 문제로부터 도망가지 않기

Slide 33

Slide 33 text

사실 이건 오래전부터 잘 알려진.. • First Things First! (가장 중요한 일에 집중!) • 대부분의 사람은 급한 일 에 대부분의 시간을 사용 à 급하지 않지만 중요한 일 에 시간을 투자하라!

Slide 34

Slide 34 text

백만원 짜리 컴퓨터를 살 때도 여기저기 알아보고 사는데, 그보다 더 중요한 문제를 풀려면, 얼른 결론 내고 해치우고 싶은 마음을 억 제하고, 최대한 많은 시간을 쏟아야 한다

Slide 35

Slide 35 text

예를 들면..

Slide 36

Slide 36 text

투자: 인생에 한 번밖에 없는 투자기회는 존재하지 않음 à 인내심을 갖고 최 대한 많이 리서치 하기. 처음엔 작게 시작하며 스킬을 높여 나가기

Slide 37

Slide 37 text

창업: 왠만하면 하지 마세요..ㅠㅠ 하려면 최소한의 비용으로 최대한 빨 리 실패하기 (eg 배민, 그루폰)

Slide 38

Slide 38 text

개발 커리어 향상: 나에게 주는 homework 풀기

Slide 39

Slide 39 text

나에게 숙제 내기? • 개발력은 제일 높일 수 있는 방법은 역시 별도 프로 젝트를 해보는 것.. 하지만 많은 노력이 필요하고, 모 티베이션 유지가 쉽지 않음 • à 회사 업무 중에 접하는 모든 것에 호기심을 갖고 보기. 그리고 의문의 생기는 것은 적어놨다 나에게 숙 제주기

Slide 40

Slide 40 text

• 이런 질문에 답변을 못하면 면접관에게 매우 나쁜 인상을 줌 • iOS: bound와 frame의 차이는? • Android: Fragment의 onStart()와 onCreate()의 차이는? • Ruby on Rails: <%= csrf_meta_tags %> 혹은 protect_from_forgery with: :exception 은 어떻게 구현되어 있 나? • Back-end: msql의 인덱스는 어떤 원리로 동작하나?

Slide 41

Slide 41 text

• 단편적인 지식을 묻는 문제가 아니라, 업무 중에 반드 시 한 번쯤은 이런 건 왜 이렇지? 라고 생각하는 사람 인가 아닌가를 나누는 문제이므로 중요. • 경력은 길어도, 그냥 주어진 일만 수행해온 사람이라 는 인상을 줬을 때 합격점을 주는 면접관은 거의 없 음

Slide 42

Slide 42 text

그리고 이직! 이직 성공으로 인한 연봉 상승분을 생각하면, 준비에 상당한 시간과 돈을 들인다고 해도 부업으로 코딩 알바 하는 것에 비해서 훨씬 ROI가 높음

Slide 43

Slide 43 text

Chapter IV. 시니어 SW 엔지니어의 이직 고군 분투기(3)

Slide 44

Slide 44 text

Timeline (1) • 2019년 7월 이직 준비 시작 (IBM이 너무너무 좋았지만, 그래도 한 번 더 커리어 향상을 해보고 싶었음) • 10월 중순 구글 커리어 페이지에 마음에 드는 포지션이 올라옴 • 최종 준비 - 이력서 최종 수정, 백방으로 연락해서 추천해 줄 내부 직원 수배 • 11월 14일: 입사지원서 제출

Slide 45

Slide 45 text

준비 1: 이력서 • 세 번 완전히 고쳐 씀. 각 이력을 최대한 간결하게 적되, 업무에 서의 역할, 나의 중요도, (수치로 드러나는) 성과들을 명확히 표 현하도록.. • x팔림을 무릎 쓰고 여러 명의 사람에게 첨삭 부탁 • 영문 이력서는 1차로 뉴욕에서 MBA한 동생에게 리뷰 의뢰 - 신랄한 비판과 함께 첨삭 • 2차는 유료 리뷰어에게 의뢰. (역시나 신랄한 비판과 함께..)

Slide 46

Slide 46 text

다행히도 예전에 면접 봤을 때와는 달랐다! 그리고 어차피 채용 위원회에서는 반 드시 보게 되어 있음

Slide 47

Slide 47 text

준비 2: 코딩 인터뷰 • 이직을 결심한 시점에서 테스트까지 6개월 간 주당 10문제씩 • Android 관련 질문은 구글 신에게..

Slide 48

Slide 48 text

• 100개 이상의 면접 후기를 수집. 탈락자의 글에서는 소감은 무시하고 면접 내용과 포맷만 집중. 합격자는 반대로 소감 위주로 분석. • Tip: 거의 모든 실리콘밸리 회사는, 면접자가 향후 자 사의 팬이 되도록 하는 것이 인터뷰의 주요 목표 중 하나이기 때문에 탈락자의 소감에는 노이즈가 상당히 많음

Slide 49

Slide 49 text

• 왜 상당히 실력이 뛰어난 개발자들도 구글 면접에서 잘 떨어질까? (심지어 소감을 보면 대부분 상당히 잘 답변했다고 분위기도 아주 좋았다고 하는데..) • 왜 구글은 면접자에게 터무니 없는 질문들을 할까? (eg. 당신이 갑자기 난쟁이가 되서 믹서기에 갇혔다. 곧 타이머가 작동하는데 어떻게 탈출할까?) Big Questions

Slide 50

Slide 50 text

• 인터넷 1:1 서비스(129만원) • Cracking PM Interview를 기초로, 30개 정도의 예상 질문/답변과, 8개의 중요 경험을 다각도로 정리 영어 면접

Slide 51

Slide 51 text

• 1번의 phone screening • 1~2번의 phone interview • 1번의 직군 별 과제: 저의 경우 프리젠테이션 (영어 à 일어) • 4~5번의 코딩 인터뷰 (영어 à 일어) • 2번의 general question 면접 (영어) 면접 절차

Slide 52

Slide 52 text

• 2019년 11월 21일: 1차 phone screen • 2020년 1월 15일: 마지막 면접 • 1월 22일: 피드백 전달 및 “packet” 송부 • 각 면접관은 면접자의 주요 답변 등을 요약해서 보고서 제 출 à 면접에 참여하지 않은 시니어 멤버들로 구성된 위원 회에서 채용을 결정 • 1월 28일: Job Offer • 1월 31일: 최종 합격 Timeline (2)

Slide 53

Slide 53 text

Next Big Question? • “임종 자리에서 직장일에 더 많은 시간을 썼기를 바랄 사람이 몇이나 될까?” – 스티븐 코비 ご清聴ありがとうございました!