성장의 갈증을 채우기 위한 방법

승톨·2022년 1월 9일
1
post-thumbnail

이 글은 2021년 10월에 진행한 탈잉의 '월간 코드리뷰 ver_0.1 : 커리어 성장 CODE' 라이브 강의를 정리한 글입니다.

강의 링크 : https://taling.me/Talent/Detail/38586

박미정님 강의(개발자 성장)

성장하는데 많은 사람들이 주로 하는 것들

  • 스터디 모임
  • 블로그 글 쓰기
  • 컨퍼런스 발표
  • 오픈소스 기여
  • 집필

근데 구체적 목표 없이는 곤란하다. 나만의 방법을 세우자.

나는 보통 공부할 때 이런 고민을 한다.

  1. 나 지금 이거 할 시간이 있어?
  2. 왜 하는건데?
  3. 그래서 결과물이 뭐야?
  4. 그럼 어떻게 할까?

박미정님의 공부 목적

  • 업무를 더 잘하기 위해.
  • 기존의 것을 더 정확히 이해하기

스케쥴

  • 업무 계획을 세울 때 공부 계획도 함께 세우는 편
  • 예를 들어 다음주에 로그시스템 개발을 시작해야 할 것 같으면
    • ELK 개념 공부
    • 개발 환경의 로그를 Kibana 시스템에서 확인

블로그 작성

  • 박미정님 블로그
  • 실제로 겪은 문제해결과정 위주로 작성함.
  • 문제 해결을 통해 깨달은 것을 온전히 내 것으로 만들기 위함.
  • 어떤 문제를 접했는데, 실제로 결론은 이렇게 도달함. 근데 그 결론에 도달했던 건 이렇게 사고해서 그렇다.
  • 내가 겪은 문제 상황을 자세하게 작성함.
  • 2주에 한번 돌아보고 문제 키워드 선정 후 작성
  • 문제 상황에 대한 설명 → 해결책 → 그 해결책을 선택한 이유

책 집필

  • 이타적으로 필요하다고 판단한 것으로 정해야함.
  • 평소에 왜 없지? 라고 생각한 주제 리스트업
  • 내가 그 주제를 경험했거나, 곧 경험할 예정인지 판단
  • 필요성, 차별화, 목차 작성 후 출판사에 제안.
  • 집필 시간 계획은 별도로 짜야함. 박미정님의 경우 매일 2시간씩 짬내서 썼다고 함.

발표

  • 하드 스킬 => 동기부여가 필요할 때 함.
    • 2017년에 아이오라는 스타트업에 있을 때 데이터 분석을 학습할 수 밖에 없는 환경이었고, 파이콘 스피커 모집하는걸 봐서 한 달 동안 공부를 했다.
  • 소프트 스킬 => 개발문화에 기여하고자 할 때
    • 회사 안팎으로 개발 문화에 기여하기 위함
  • 외부발표든 사내발표든 데드라인 공표
    • 뭔가 발표할거면 못박고 하자.

중요한건 명확하고 구체적인 목표 → 결과물 상상 → 공유를 통한 피드백 수집

스스로 '왜?'라는 질문에 답할 수 있다면 공유할 수 있으리라 생각한다.

  • 모든 것의 시작은 객관적으로 필요성/현실성 판단
  • 모든 것의 마무리는 공유가 아닌 피드백 수집

아웃사이더님 세션(오픈 소스로 성장하기)

  • 개발자에게 필요한 능력
    • 업무 태도
    • 커뮤니케이션
    • 협업
    • 업무 파악
    • 문제 해결

코딩 능력을 키우는 방법은 다양함.

  • 좋은 사수, 좋은 동료
  • 오픈소스로 개인 프로젝트를 작성한다
    • (좋은 코드든 나쁜 코드든) 코드를 많이 작성한다.
    • 많이 작성 & 고민은 같이 가야함. → 조금씩 시도 & 개선
    • 공부할 기술을 활용해 볼 소프트웨어를 만든다.
    • 첫 고객은 자기 자신
    • 프로그램 짠거는 Open Source 라이센스로 공개한다.
  • 기존 소프트웨어를 다시 만든다.
    • 아이디어 고민을 하지 않아도 되는 장점
    • 똑같은 프로그램을 직접 만들어본다.
      예시:
      • 웹서버

      • random word generator

      • uuid generator

      • http client

      • grpc client

      • 날짜/시간 관련

        등등

        장점 : 참고할 소스코드가 있다. 내부 구조를 이해할 수 있다.

    • 오픈소스 프로젝트의 코드를 읽는다.
      • 많이 읽어볼 수록 더 빨리 잘 읽을 수 있다.
      • 읽어보기 위한 명분
        • 자주 사용하는 프로젝트의 코드를 본다.

        • 버그나 이슈가 있을 때 코드를 본다.

        • 문서가 잘 이해 안 될 때 코드를 본다.

        • 내부동작이 궁금해지면 코드를 본다.

          ⇒ 클론 받아서 돌려볼 수 있지않나..

      • 처음부터 큰 프로젝트 보기 보다는 작은 프로젝트부터 보자.
        • 프로젝트가 크다면 0.1 버전을 본다.
      • 더 적은 정보로 협업해야 한다.
      • 메인테이너 입장에서 생각하기
        • 어떤 이슈가 이해하기가 좋은지, 어떤 이슈가 문제 파악이 쉬운지, 어떤 이슈가 처리가 안되는지 등
      • 그냥 계속 고민해보는 과정이 중요할듯. 계속 찾아보고.

서지연님 세션(발표 하는법)

  • 과거보다 개발 생태계에서 협업이 복잡해지면서 나만의 강점을 가지는게 중요해졌다.
  • 이런 세계에서 내가 주목을 받으려면 어떻게 표현해야 할까?
    서지연님의 강점 : 이야기 하기 좋은 사람
  • 발표기회를 만드는 방법
    • 발표는 내 견해/관점을 공유하는 것
    • 내가 경험한 것을 나의 관점에서 얘기하는게 중요하다.
    • 평소에 발표할 생각으로 정리해두기
    • 노션에 짧게짧게 정리하는 편이라고 함
    • 발표 할 토픽이 이미 과포화 상태인지 볼때 구글링 해서 한글 자료 검색 겨로가가 한 페이지 이내이면 '이거 발표 해볼만함!'
    • 똑같은거 다른 컨퍼런스에서 우려먹어도 됨! 조금씩 나아지지않을까?
    • 발표할 곳은 가까운데서부터 시작하자!
      • 오프라인 코드 리뷰

      • 스크럼

      • 주간 회의

        이런 것도 발표일 수 있음. 조금 더 확장하면

      • 스터디 리딩

      • 지식 공유

      • 커뮤니티 밋업 참여

        자신감 생기면 테크회사 컨퍼런스에서 스피커로 참여. 우선 지르자!

      • 발표 실력을 키우려면 발표를 많이 해봐야한다.(out of comfort zone)

      • 짧게 핵심 전달! ⇒ 한 장표 당 하나의 메세지

      • 장표 집중 보단 연사자가 발표하는 얘기에 집중하게 해보자.

      • 화면이 빠르게 넘어가면 속도감이 증가!

      • 발표가 어려운거 = 안 익숙한거

  • 가장 학습 효율성이 좋은건 서로 설명하는 것
    • 그냥 듣는 것보다 읽는것보다 설명하는게 최고!
    • 공유의 즐거움!

옥창호님 세션(오픈소스 프로젝트 키우기)

  • 씨 뿌려서 수확하는 개념을 오픈소스에 빗대어서 설명해보겠다.
  • 주로 오픈소스 했던 프로젝트 :
    • 하스스톤 시뮬레이터(하스스톤 강화학습)

    • 1년 정도 작업해보니까 파이콘 코리아에 나갈 수준이 됐었음.

    • 실제로 파이콘에서 오픈소스 컨트리뷰션 논의를 많이 할 수 있었음.

    • 또 1년 뒤에는 같은 프로젝트로 NDC에 나가게 되었음.

    • 2020년에는 오픈소스 컨트리뷰톤에 나가서 또 기여할 수 있는 사람들을 많이 만날 수 있었음.

      ⇒ 4년 정도 같은 프로젝트를 성장시키는게 인상깊다.

파종(어떤 프로젝트를 만들까?)

  • 많은 요소들을 고려하게 됨.
    • 잘하는 분야 ↔ 좋아하는 분야

    • 잘하는 언어 ↔ 좋아하는 언어

    • 검증된 기술 ↔ 새로운 기술

      근데 위의 것들은 생각보다 중요하진 않음.

      제일 중요한건 내가 하고싶은걸 하는게 중요함.(열정을 가지고 꾸준히 진행할 수 있는거)
      일단 시작하는게 중요!

  • 목표를 설정하자
    • 꿈은 크고 넓게
    • 발걸음은 작고 짧게
  • 일단 기본 문법만 빠르게 보고 뭔가를 만들어보자.

발아(프로젝트 프로토타입 만들기)

  • 프로토타입을 만들 때 고려해야 할 사항
    • 미니멀리즘
    • 일단 정말 필요한 것만 만들어야 한다.
    • 시간이 지나면 동기부여가 낮아진다. 이 하락을 막으려면 중간중간 성취감이 있어야 함.

써레질(빌드/배포 자동화, 툴 설치)

  • 유명한 오픈소스 프로젝트를 보면 공통점이 발견됨.
    • status badge들이 있다는 것.
    • 대중적인 badge 개념들을 하나씩 살펴보자.
  • CI/CD
    • 다양한 도구를 사용하게 됨. (Github actions, travis ci, circleCI, jenkins 등)
  • 코드 커버리지
    • 테스트 시 코드가 얼마나 실행되었는지 지표
    • Cobertura, locv, Coverage.py 등이 있음.
  • 정적 코드 분석
    • 코드 내에서 발견 될 수 있는 결함, 위험 등을 찾는 과정
    • CodeClimage, Codacy, CodeFactor 등

모내기(협업을 위한 준비, 홍보)

  • 다른 개발자가 내 프로젝트에 어떻게 기여할 수 있을까?
    • 프로젝트 설치 및 사용 방법 알려주기
    • 프로젝트 코드 및 문서 구조화하기
      • 나 같은 경우 기여하는 방법을 스텝 별로 정리해서 문서로 남겨준다.
    • 기여 방법 단계별로 알려주기
      • 내가 프로젝트 개발 하는 규칙을 다른 사람에게 알려주려면 단계별로 알려줘야 한다.
    • 도움이 필요한 부분 등록하기
    • 질문/답변을 할 수 있는 창구 만들기
    • 모든 준비가 끝나면 오픈 소스 프로젝트 알리기
      • FB, Twitter, Reddit 등
    • 오픈소스 할 때 필요한 체크 리스트 : https://opensource.guide/ko/starting-a-project/

제초(이슈 및 코드 리뷰 대응)

  • 새로운 이슈가 들어올 때 잘 대응하는게 중요하다.

다른 사람들을 위해

  • 이슈 템플릿 작성하기
  • PR 템플릿 작성하기

⇒ 템플릿 예시 : https://github.com/utilForever/RosettaStone/issues/new?assignees=&labels=&template=bug_report.md&title=

추수(다음 단계를 위한 준비)

  • 여기까지 오느라 참 고생이 많았을 것.👏
    • 이정도 단계까지 오면 선택지가 생긴다. 본인이 하고싶은 것으로 확장하면 될듯.
      • 새로운 기능 추가
      • 코드 리팩토링
      • 성능 개선
      • 새로운 프로젝트 도전

Q.학습 목적의 오픈소스 프로젝트를 선택할 때 고려해야할 기준은?

  • A.내가 이걸 통해 얼마나 배우고싶은가 를 파악하는게 중요
profile
소프트웨어 엔지니어링을 연마하고자 합니다.

0개의 댓글