커리어 스킬 : 완벽한 개발자 인생 로드맵 - 1

Untitled

저자 - 존 손메즈

출판 - 길벗

출간 - 2019.04.10

서평

완벽한 개발자 인생 로드맵이라는 부제목답게, 개발자의 시작하기부터 입사, 경력 쌓기, 소프트스킬까지 모든 것을 다루고있다. 각 부분은 개별적인 내용을 다루고 있으므로, 필요한 부분만 골라 읽기 좋은 책이다.

현재(대학교 3학년) 상황에 맞추어 2부-일자리 구하기의 일부와 4부-개발자로 일하기 부분은 제외하고 읽었다. 또한 아래 정리는 도서의 모든 부분을 포함하지 않고, 필요한 부분만을 정리한 것임을 명시한다.


1. 입문하기

학습→취업준비→취업 순서대로 계획해보자. 지금 당장 무엇을 하고 싶은지 보다는, 최종적으로 무엇을 하고싶은지 생각한 후 시작하라. 계획은 중요하다.

2. 당신이 배워야 하는 기술

  • 한 가지 언어 → 언어는 그저 도구이다.
  • 코드를 구조화 하는 법 → 주석 없이 코드만으로도 이해가 되게끔.
  • 객체 지향 설계 → 복잡성을 다루는 방법
  • 알고리즘 & 자료구조 → 기존의 훌륭한 해결책 학습
  • 개발 플랫폼 관련 기술 → OS별 생태계가 해당. 언어:플랫폼은 1:1 대응이 아니다.
  • 프레임 워크와 스택 → 애플리케이션 하나를 제대로 완성하는데 쓰이는 기술 세트가 스택이다.
  • DB 관련 기본 지식 → 코드를 사용해 데이터를 저장, 가져오기.
  • 소스제어 → 반드시! 능숙하게 사용해야한다.
  • 빌드 & 배포 → 작동 원리와 코드 배포 과정은 이해해야 한다.
  • 테스트
  • 디버깅 → 개발자의 작업시간은 대부분 디버깅에 사용. 효과적인 디버깅 방법을 알아두자.
  • 개발 방법론

3. 기술을 발전시키는 방법

개발자에게 마침표란 없다. 꾸준히 배워가는 것에 의의를 두라. 무언가를 배우기 위한 기본 순서는 아래와 같다.

  1. 무엇을 배울 것인가? 그 범위는 어떻게 되는가?
  2. 목표는 무엇인가? → 달성 여부를 확인하기 위함
  3. 학습 자료 수집 및 학습 계획
  4. 학습을 진행하며 떠오르는 질문에 대한 답 찾기 → 경험으로 배우라
  5. 배운 내용을 타인에게 가르쳐라

중요한 점은 스스로 경험해야 한다는 것이다. 문법만 가지고는 사용법을 알 수 없다! 책을 내려놓고 실습하는 시간을 가져야한다.

그리고 기술을 배우기 전, 그 기술이 정말 필요한지 먼저 생각하자. 한 번도 쓸일 없는 기술에 시간을 낭비하지 마라. 기술을 가르칠 때 알려주는 핵심 사항은 아래와 같다.

  • 큰 그림 - 이 기술로 무엇을 할 수 있는가?
    • 언어의 역사(왜 이런 방향으로 발전했는가)
    • 언어를 구성하는 모든 요소와 특징 - 고유의 독특한 부분
    • 사용되는 다양한 라이브러리
  • 시작하는 법
  • 최고의 효과를 거두기 위해 알아야 할 20퍼센트
    • 어떤 기술이든, 정말 핵심적인 20퍼센트가 중요하다.
  • 전문가가 쓴 글 읽기
  • 연습, 또 연습!

4. 프로그래밍 언어 학습 방법

아래의 과정을 거치면서도 항상 자신이 무엇을 공부하는지, 배운 내용이 어떻게 적용되는지 이해하도록 노력하자.

<1단계>

  • 잘 작동하는 애플리케이션 살펴보기

    오픈소스로, 인기있는 프로젝트의 코드를 살펴보라. 문법은 어떻게 생겼고 구조는 어떠한가?

  • Hello World 프로그램 만들기

    이는 해당 언어로 프로그램을 만들고 실행하는데 필요한 기본 요소들을 익히고 테스트할 수 있다.

<2단계>

  • 기본 문법 살펴보기
  • 기능과 라이브러리 구분하기

    실질적으로 언어 자체의 분량은 많지 않다! 현실에서는 언어의 통달보다 라이브러리와 프레임워크의 사용법을 아는 것이 더 중요하다.

  • 기존 코드 리뷰하고 한 줄씩 이해하기

<3단계>

  • 무엇이든 만들어보기!

    너무 복잡한 프로그램일 필요는 없다. 기본 문법과 표준 라이브러리의 활용에 중점을 둔 프로그램을 만들어보자.

  • 프로그래밍 언어를 특정 기술이나 플랫폼에 적용해보기

    예를 들어 JAVA를 학습중이라면 Spring을 배워보는 것이다. 취업하는데 유용한 전문 기술들을 발전시켜 나가는 단계이다.

  • 알고리즘 문제 해결하기

    “언어를 통달했다”는 느낌을 받을 수 있게끔. 정말 능숙하고, 그 언어가 편하게 느껴질 정도로.

5. 대학 vs 부트캠프 vs 독학

대학

  • 장점
    • 학위는 여전히 직장 선택의 폭을 넓혀준다.
    • 컴퓨터 공학 지식의 기본을 튼튼히 다질 수 있다.
    • 인턴쉽등의 기회가 제공된다.
  • 단점
    • 압도적인 시간 소모 - 개발만 배우는 것 또한 아니다.
    • 비싼 학비
    • 현업에 뒤쳐지는 구식 교육
  • 전략
    • 자신의 학습은 자신이 책임져라 - 학위만 따서 나오는건 낭비다. 배운 내용을 활용할 수 있어야 한다.
    • 사이드 프로젝트를 진행하라 - 어떻게든 실제 경험을 쌓으라
    • 인턴쉽에 참여하라

부트캠프

  • 장점
    • 단기간에 집중된 실전 지식 학습
    • 높은 취업률
    • 대학교보다 저렴한 비용
    • 열의에 찬 수강생들
  • 단점
    • 오로지 부트캠프에만 전념
    • 빠르고 높은 난이도
    • 형편없는 캠프들의 존재
    • 컴퓨터 공학 지식의 부재
  • 전략
    • 평판이 좋지 않은 캠프들은 거르라
    • 캠프 이후에도 살아갈 수 있는 돈을 저축해둘 것
    • 모든 일정을 비우고 전념하라
    • 인맥! 인맥을 만들어라!
    • 기본은 예습하고 가라

독학

  • 장점
    • 낮거나 없는 비용
    • 독학하는 기술은 중요한 소프트 스킬이다
    • 자유로운 진도, 일정의 조절
    • 원하는 주제를 원하는 만큼 파고들기 가능
  • 단점
    • 무엇을 할 지 결정하기 힘들다
    • 일자리는 스스로의 힘으로 찾아야한다
    • 의지를 잃기 쉽다
    • 사회적 고립
    • 지식의 빈틈이 생기기 쉽다
  • 전략
    • 계획을 세워라
    • 일정표를 만들고 반드시 지켜라
    • 인맥을 쌓아라, 제발!
    • 멘토를 찾으라. 질문이나 도움을 요청할 수 있는 사람이 필요하다
    • 사이드 프로젝트를 진행하라.

6. 경력 없는 상태에서 일자리 구하기

인턴쉽

인턴이란 참으로 애매한 존재이다. 실무자와 같은 업무를 시키기도, 인턴끼리 경쟁시키기도, 교육시키기도, 혹은 심부름꾼 취급하기도 한다. 확실한건 임시 일자리라는 것이다.

인턴쉽에서 보수는 매우 민감한 문제이다. 그러나 최중요 고려사항은 아니다. 인턴쉽의 목적은 돈을 버는 것이 아니라 경력에 도움이 되는 것이기 때문이다.

인턴 지원 경쟁은 치열하다. 정식 루트를 통해 들어가는 것도 좋지만, 원하는 회사가 있다면 미리 자료를 준비하여 인턴 문의를 해보자.

인턴은 무엇을 해야 하는가? 질문하고, 답을 얻으며 학습해야한다. 그러나 상사의 시간을 계속 뺏을 수는 없으므로, 최대한 스스로 알아내는 것이 중요하다. 다른 직원들의 업무를 관찰하며 무엇을 필요로 하는지 파악하자.

실력

당연히 중요하다. 면접관이 하는 중요한 업무중 하나가 코딩할 줄 모르는 사람을 걸러내는 것이다. 제대로 면접하면 전부 걸린다! 거짓말로 넘어가려 하지 말고 실력을 기르라. 일자리를 구하려는 사람은 업무 경력이 없는 것이지 실력이 없어서는 안된다.

온라인에 존재감 드러내기

자신의 실력을 온라인상에 널리 알려라. 구글 검색 결과에 자신의 이름이 뜨거나, 블로그가 잘 정리되어 있는 편이 좋다. 깃허브 프로필은 강한 인상을 남기며, 포트폴리오를 보여주기에도 좋다. 포트폴리오는 자신을 드러내는 최고의 수단이다.

인맥 만들기

앞에서도 계속 강조했다. 인맥이 최고다. 블로그를 통해 사람들에게 접근하거나, 컨퍼런스에 참여하거나, 개인적으로 연락을 취해보는 것도 좋다. 인맥은 정말 중요한 요소이다. 공고가 나오지 않는 일자리에 접근할 수 있는 효과적인 통로이다.

인맥 만들기에서 중요한 것은 많은 사람을 만나고, 그들에게 보탬이 되는 것이다. 개발자를 위한 모임이나 행사에서 발표자로 자원하는 것은 이를 효과적으로 수행하는 방법이다. 혹은 방금 강연을 마친 강연자에게 다가가서 좋은 발표에 대한 감사 인사 칭찬을 건네는 것 또한 좋다.

자격증 취득

사실 자격증만으로 지식을 증명하거나 일자리를 보장받기는 어렵다. 시간과 돈을 투자할 만한 가치가 있을까? 상황에 따라 다르다.

구직상황에서는 크게 도움이 되지 않지만, 컨설팅 회사에 지원할 때는 도움이 된다. 경험이 부족하거나 학위가 없는 경우에도 도움이 된다. 해당 분야에 대하여 조금 더 전문가다운 모습을 보이는데 도움이 된다.

전체적으로 보았을 때, 자격증을 취득하는 것 보다는 좋은 교육을 받는 것이 훨씬 도움이 된다.

특정 회사 겨냥하기

정말 입사하고 싶은 특정 회사가 있다면, 그 회사의 개발자들을 공략하는 것도 하나의 방법이다. 그들이 운영하는 블로그를 구독하고, 댓글을 남기며 친분을 쌓는 것이다. 그 회사가 개발자를 뽑으려 할 때, 여러 개발자에게서 추천을 받는 사람은 누구겠는가?

인바운드 마케팅하기

자신이 직장을 찾아다니는 것이 아닌, 다른 사람들이 나를 보고 찾아오게끔 하는 방식이다. 개인 블로그를 운영하거나, 유튜브 채널 개설, 책이나 기사 작성, 팟캐스트 참여 등의 활동을 통하여 자신의 평판을 높이면 된다. 잡다한 분야를 다룰 필요는 없다. 특정 분야의 전문가로 이름을 알려라.

경력이 부족하면 끈기라도 가져라. 진취적인 태도로 경험 부족을 보충해야 한다.

7. 이력서

이력서는 중요하면서도 쓸모없다. 면접관이 이력서를 몇 초나 살펴볼까? 그 몇 초 안에 본인의 취업 여부가 결정되는데!

그러니 이력서는 전문가에게 맡기자. 처음 입사하는 회사에서 제시받는 금액은 앞으로의 연봉을 크게 좌우한다. 첫 회사는 그만큼 중요한데, 그 회사에 들어가기 위한 이력서에 투자하는 것은 당연한 일이 아닐까? IT분야 이력서를 전문으로 하는 이력서 작성 전문가를 고용하라.

계약하기 전에 샘플을 확인하고 믿을만한 전문가를 고용했다면, 좋은 정보들을 제공하라.

  • 업무 경력의 정확한 날짜
  • 일자리에서의 직함과 직무 내용
  • 모든 학력
  • 각종 증명서와 수상 경력
  • 가장 중요하다고 생각하거나 가장 큰 관련이 있다고 생각하는 기술 목록
  • 자신이 하고싶은 직무에 관한 몇 가지 직무 샘플

자신이 원하는 것이 아니라 자신이 제공할 수 있는 가치를 설명하라. 해왔던 업무와 그 방법, 결과를 통해서 설득력을 올리자.

그리고 각 회사에 맞게 이력서를 수정하라. 이것도 당연한 말이지만, 수많은 회사에 지원하다보면 힘이들어 포기하는 사람들이 있다. 회사에 맞는 맞춤 이력서를 제출하자. 거짓을 말하라는 것이 아니라 특정 부분을 강조하거나 축소하라는 것이다.

8. 경력 발전시키기

좋은 개발자가 되려면 높은 기술력을 갖추는 것 이외에도 좋은 평판을 구축할 필요가 있다. 개인 브랜드를 만들고 마케팅 해야 하는 것이다. 일반적으로 고용되어 받는 돈보다 훨씬 많은 돈을 벌어들일 수 있다.

간혹 스스로를 마케팅 하는 것을 안좋게 보는 개발자들도 있지만, 마케팅은 중요한 항목이다.

개인 브랜드를 만들려면 무엇으로 유명해지고 싶은지부터 정해야 한다. 자신이 어떤 일을 하는지 명확하고 단순하고 간결한 메세지를 만드는 것이다.

그리고 가치를 얻는 것 보다, 가치를 제공한다고 생각하라. 블로그에 글을 올리고, 영상을 업로드하는 일은 하룻밤 안에 성과를 얻을 수 없다. 끈기있게 노력하며 타인에게 가치를 제공한다면, 사람들은 당신을 기억할 것이다.

9. 최신 기술 따라잡기

우선 자신이 부족한 부분부터 채워 나가야 한다. 소프트웨어 개발자 기술 평가서(검색했는데 이건가?)를 보며 자신이 강화해야 할 기술이 무엇인지 자가진단 해보자.

블로그 구독은 최신 기술을 따라잡는 좋은 방법이다. 스스로 정보를 수집하는 것 보다 훨씬 정제되고, 편리하게 정보를 얻을 수 있다.

기술 관련 서적 또한 훌륭하다. 스스로에게 영구적 가치를 가진 책을 선택하여 독서하자. 실무에 바로 적용할 수 있는 내용이나, 개발 방법론에 관련된 책 또한 좋은 선택이다.

다만, 절대 사용할 일 없는 기술은 배우지 마라. 경력 발전이나 목표 달성에 별 도움이 되지 않는다.

무언가를 읽는 것 이외에 행사에 참여하는 방법도 있다. 강연에 등장하는 기술 시연이나 코드 예제를 보면 빠르게 기술에 대한 내용을 파악할 수 있다. 무엇이 기본이고, 어떤점에서 새로운지 파악하자.

가장 중요한 것은 코딩을 멈추지 않는 것이다. 사이드 프로젝트를 쉬어서는 안된다!

10. 블로그 만들기

진입 장벽이 낮고, 효과가 좋은 것이 블로그이다. 자신의 생각을 정리하는 법을 배울 수 있고, 의사소통 능력 또한 발전된다.

블로그를 처음 만든다면 특정 테마에 집중하라. 최대한 좁히고 좁혀서 특정 주제에 대하여 포스팅 하는 것이다.

블로그를 운영하는데 있어서 가장 어려운 것은 글을 쓰는 것이다. 시간도 오래 걸리고 좋은 글을 쓰기도 어렵다. 그러니 어느정도 체계를 잡아두고 글을 쓰는 것을 권한다.

  • 무슨 내용을 쓸 것인지 생각하기
  • 사전 조사가 필요하다면 사전 조사 진행하기
  • 글을 쓰기 전에 개요 먼저 작성하기

그리고 일관성 있게 글을 업로드하라. 장기적으로 볼 때, 어떤 요소보다도 일관성이 중요하다. 쓰는 과정이 괴롭더라도 쓰고, 또 쓰고, 계속 써라.

11. 사이드프로젝트

사이드프로젝트를 완성하는 것, 그것은 매우 중요한 경험이다. 사이드 프로젝트는 어떻게 시작해야 할까?

우선 구체적인 목표를 잡아라. 처음에는 아주 작은 것으로 시작해서 반드시 “마칠 수 있는 것”을 선택하라. 기존 제품의 복제는 첫번째 사이드 프로젝트로 아주 적합하다.

작은 사이드프로젝트 몇 개를 완성했다면, 완성이 가능한 범위 내에서 규모를 키워보자.

하나의 사이드 프로젝트에서 많은 목적을 달성하는 것이 좋다. 하나의 프로젝트로 블로그 글도 쓰고, 포트폴리오도 채우고, 기술 연습도 하고, 관리법까지 학습하면 정말 좋지 않겠는가?