한때 개발을 접었던 창업자 출신 엔지니어를 구글로 인도해준 어떤 방법론

1ff3242c5f6acd42dcccecdbef78961f?s=47 Sa-ryong Kang
May 14, 2020
40

한때 개발을 접었던 창업자 출신 엔지니어를 구글로 인도해준 어떤 방법론

1ff3242c5f6acd42dcccecdbef78961f?s=128

Sa-ryong Kang

May 14, 2020
Tweet

Transcript

  1. 시니어 SW 엔지니어의 이직 고군분투기 (3) 한때 개발을 접었던 창업자

    출신 엔지니어를 구글로 인도해준 어떤 방법론 강사룡
  2. Who is this guy? • 박애주의자 선천성 선택 장애자: 모두

    사랑합니다~❤ • 엄마 vs 아빠 • 부먹 vs 찍먹 • 엔지니어링 vs 비즈니스 • 프론트엔드 vs 백엔드 • Android vs iOS • 역시 모두 사랑합니다~ • @ IBM iX Japan by 5/15 • @ Google Japan since 5/18
  3. 주의 사항 • 성급한 일반화의 오류 주의 • 어디까지나 개인적인

    경험과 의견입니다 • 누군가에게 옳았던 전략이라도 나에게는 맞지 않을 수 있습니다
  4. Chapter I. 문제편

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

    Zero to One
  6. I think I’ve found one good answer.

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

    one good answer:
  8. 예를 들어.. 취업준비생이라면,

  9. 기꺼이 시간을 쓸 수 있는 것 • TOEIC 고득점 받기

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

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

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

    맞는 커리어 패스, 가장 최적화된 취직 전략을 수립하는 데에는 단 몇 시간도 쓰지 않는다.
  13. 십수년 전부터 반복되는 비극..

  14. 평생 노력해서 얻은 퇴직금 + 추가 대출금을, 몇 번의 설명회만

    듣고 프랜차이즈에 부어넣기..ㅠㅠ
  15. 대체 이런 모자란 인간을 추종 하는 이유가 뭘까?

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

    된다”
  17. 사회인도 마찬가지..

  18. 부자 아빠 가난한 아빠 • “사람들이 가난한 이유는 돈이 없어서가

    아니라, 돈을 금기시하며 금융 지식을 멀리하는 사고와 문화 때문” • 어떤 카드가 포인트를 많이 주는지 같은, 지엽적인 문제에는 집중하면서, 정작 자 산을 어떻게 모을지, 어떻게 관리할지는 생각하고 싶어하지 않음
  19. 개발자는 어떨까요?

  20. 실제로 있었던 일.. • 개발 기간은 단 5개월, 그 안에

    쇼핑몰을 만들어야 한다! • 그런데, 기획이 아직 미완료 • 당연히, 디자인은 초안 수준
  21. 다들 우왕좌왕.. • 뭘해야 할 지 모르겠으니 업무 강도는 약

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

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

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

    노하우 – Entity(data schema)를 먼저 확립
  25. Entity(data schema)를 먼저 확립 • 간략한 ER Diagram 형태로 모든

    주요 엔티티를 도출
  26. • 자연스럽게 핵심 도메인 로직에 사용되는 데이터를 파악하게 된다 •

    모든 개발팀원들이 쉽게 시스템의 가장 중요한 요구 사항들을 파악할 수 있다 • 1주 정도의 설계 확립 후, 바로 코딩에 들어갈 수 있 다 • But, 비즈니스 로직을 완전히 파악하기엔 무리가 있 음 à 여러가지 부작용이 야기될 수..
  27. 2) 더 영리한 방법 – Domain-Driven Design: Biz Entity(domain model)를

    먼저 확 립
  28. DDD? • 비즈니스 전문가와 함께 공통의 언어, 공통의 그림을 그리고,

    이를 기반으로 설계
  29. • 프로젝트 최악의 리스크를 방지 – 실제 비즈니스 요 건과

    개발자와의 괴리 • 빠른 속도로 전체 내용을 가시화 가능. 개발자도 뭘 해야할 지 즉시 파악 가능 • 가장 변화 가능성이 적은 도메인 계층을 먼저 구현, 이후 데이터 계층 à 프리젠테이션 계층 순으로 구현 • 부가적으로, • 요구사항의 변경 가능성이 줄어듦 • 서버와 클라이언트가 거의 동일한 로직을 공유 가능: 슈퍼 셋과 서브셋에 가까운 형태로
  30. 3) 뇌를 혹사하지 않는 구현 방법 – Test-Driven Development

  31. TDD? • 기능을 구현하기 전에, 그 기능의 스펙을 먼저 작성하는

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

  33. 사실 이건 오래전부터 잘 알려진.. • First Things First! (가장

    중요한 일에 집중!) • 대부분의 사람은 급한 일 에 대부분의 시간을 사용 à 급하지 않지만 중요한 일 에 시간을 투자하라!
  34. 백만원 짜리 컴퓨터를 살 때도 여기저기 알아보고 사는데, 그보다 더

    중요한 문제를 풀려면, 얼른 결론 내고 해치우고 싶은 마음을 억 제하고, 최대한 많은 시간을 쏟아야 한다
  35. 예를 들면..

  36. 투자: 인생에 한 번밖에 없는 투자기회는 존재하지 않음 à 인내심을

    갖고 최 대한 많이 리서치 하기. 처음엔 작게 시작하며 스킬을 높여 나가기
  37. 창업: 왠만하면 하지 마세요..ㅠㅠ 하려면 최소한의 비용으로 최대한 빨 리

    실패하기 (eg 배민, 그루폰)
  38. 개발 커리어 향상: 나에게 주는 homework 풀기

  39. 나에게 숙제 내기? • 개발력은 제일 높일 수 있는 방법은

    역시 별도 프로 젝트를 해보는 것.. 하지만 많은 노력이 필요하고, 모 티베이션 유지가 쉽지 않음 • à 회사 업무 중에 접하는 모든 것에 호기심을 갖고 보기. 그리고 의문의 생기는 것은 적어놨다 나에게 숙 제주기
  40. • 이런 질문에 답변을 못하면 면접관에게 매우 나쁜 인상을 줌

    • iOS: bound와 frame의 차이는? • Android: Fragment의 onStart()와 onCreate()의 차이는? • Ruby on Rails: <%= csrf_meta_tags %> 혹은 protect_from_forgery with: :exception 은 어떻게 구현되어 있 나? • Back-end: msql의 인덱스는 어떤 원리로 동작하나?
  41. • 단편적인 지식을 묻는 문제가 아니라, 업무 중에 반드 시

    한 번쯤은 이런 건 왜 이렇지? 라고 생각하는 사람 인가 아닌가를 나누는 문제이므로 중요. • 경력은 길어도, 그냥 주어진 일만 수행해온 사람이라 는 인상을 줬을 때 합격점을 주는 면접관은 거의 없 음
  42. 그리고 이직! 이직 성공으로 인한 연봉 상승분을 생각하면, 준비에 상당한

    시간과 돈을 들인다고 해도 부업으로 코딩 알바 하는 것에 비해서 훨씬 ROI가 높음
  43. Chapter IV. 시니어 SW 엔지니어의 이직 고군 분투기(3)

  44. Timeline (1) • 2019년 7월 이직 준비 시작 (IBM이 너무너무

    좋았지만, 그래도 한 번 더 커리어 향상을 해보고 싶었음) • 10월 중순 구글 커리어 페이지에 마음에 드는 포지션이 올라옴 • 최종 준비 - 이력서 최종 수정, 백방으로 연락해서 추천해 줄 내부 직원 수배 • 11월 14일: 입사지원서 제출
  45. 준비 1: 이력서 • 세 번 완전히 고쳐 씀. 각

    이력을 최대한 간결하게 적되, 업무에 서의 역할, 나의 중요도, (수치로 드러나는) 성과들을 명확히 표 현하도록.. • x팔림을 무릎 쓰고 여러 명의 사람에게 첨삭 부탁 • 영문 이력서는 1차로 뉴욕에서 MBA한 동생에게 리뷰 의뢰 - 신랄한 비판과 함께 첨삭 • 2차는 유료 리뷰어에게 의뢰. (역시나 신랄한 비판과 함께..)
  46. 다행히도 예전에 면접 봤을 때와는 달랐다! 그리고 어차피 채용 위원회에서는

    반 드시 보게 되어 있음
  47. 준비 2: 코딩 인터뷰 • 이직을 결심한 시점에서 테스트까지 6개월

    간 주당 10문제씩 • Android 관련 질문은 구글 신에게..
  48. • 100개 이상의 면접 후기를 수집. 탈락자의 글에서는 소감은 무시하고

    면접 내용과 포맷만 집중. 합격자는 반대로 소감 위주로 분석. • Tip: 거의 모든 실리콘밸리 회사는, 면접자가 향후 자 사의 팬이 되도록 하는 것이 인터뷰의 주요 목표 중 하나이기 때문에 탈락자의 소감에는 노이즈가 상당히 많음
  49. • 왜 상당히 실력이 뛰어난 개발자들도 구글 면접에서 잘 떨어질까?

    (심지어 소감을 보면 대부분 상당히 잘 답변했다고 분위기도 아주 좋았다고 하는데..) • 왜 구글은 면접자에게 터무니 없는 질문들을 할까? (eg. 당신이 갑자기 난쟁이가 되서 믹서기에 갇혔다. 곧 타이머가 작동하는데 어떻게 탈출할까?) Big Questions
  50. • 인터넷 1:1 서비스(129만원) • Cracking PM Interview를 기초로, 30개

    정도의 예상 질문/답변과, 8개의 중요 경험을 다각도로 정리 영어 면접
  51. • 1번의 phone screening • 1~2번의 phone interview • 1번의

    직군 별 과제: 저의 경우 프리젠테이션 (영어 à 일어) • 4~5번의 코딩 인터뷰 (영어 à 일어) • 2번의 general question 면접 (영어) 면접 절차
  52. • 2019년 11월 21일: 1차 phone screen • 2020년 1월

    15일: 마지막 면접 • 1월 22일: 피드백 전달 및 “packet” 송부 • 각 면접관은 면접자의 주요 답변 등을 요약해서 보고서 제 출 à 면접에 참여하지 않은 시니어 멤버들로 구성된 위원 회에서 채용을 결정 • 1월 28일: Job Offer • 1월 31일: 최종 합격 Timeline (2)
  53. Next Big Question? • “임종 자리에서 직장일에 더 많은 시간을

    썼기를 바랄 사람이 몇이나 될까?” – 스티븐 코비 ご清聴ありがとうございました!