The Hitchhikers Guide to Open Source

The Hitchhikers Guide to Open Source

2018년 8월, 부산 IO 발표.

Presented in Busan IO in August 2018.

Slides: Korean. Presentation: Korean.

143f88e8c2b2a1123e87c81d9bbefa02?s=128

Lee Dongjin

August 18, 2018
Tweet

Transcript

  1. 오픈소스를 시작하려는 히치하이커를 위한 안내서 이동진 | dongjin@apache.org

  2. 이 발표는... • "저도 오픈소스 프로젝트에 참여해보고 싶은데 어떻게 시작해야

    할 지 모르겠어요." • "코드를 받긴 했는데 하나도 못 알아 보겠어요. 처음부터 절벽이에요." • … 이런 분들께 조금이나마 힌트를 드리고자 함. • 그래봤자 쪼렙에 듣보잡이라 별 도움은 안 되겠지만
  3. 자기소개 • Committer, Apache Software Foundation • Contributor ◦ Apache

    Spark ◦ Apache Kafka ◦ 기타 등등… • 실상은 그냥 쪼렙, 듣보잡 • 전혀 대단한 사람이 아닙니다.
  4. 오늘 이야기할 내용은... 1. 프로젝트 선택 ◦ 오픈소스 프로젝트라고 해서

    다 같은 오픈소스가 아니다. ◦ 초심자가 접근할 수 있는 프로젝트, 기여할 수 있는 프로젝트는 따로 있다. 2. 사전 지식 ◦ 어떤 프로젝트건 미리 알아 둘 것이 있다. 3. 함께 하기 ◦ 함께 하는 것이 대부분의 경우 좋다. 4. 기타 tip
  5. 프로젝트 선택 • 오픈소스라고 해서 다 같은 오픈소스가 아니다! •

    프로젝트를 분류하는 방법은 굉장히 많음. ◦ 언어? ◦ 라이센스? ◦ 기능? • 하지만 초심자 입장에서 중요한 것이라면… ◦ 접근하기 쉬운가? ◦ 기여(contribute)할 만한 여지가 있는가?
  6. 프로젝트 선택: 초심자를 위한 기준점들 1. 누가 이끌고 있는가? ◦

    기업(들) 혹은 전담 프로젝트 팀 vs. 개인 혹은 작은 팀. 2. 얼마나 성숙한 프로젝트인가? ◦ Active development vs. Maintenance. 3. 배경 지식을 얼마나 요구하는가? ◦ 병렬 처리? 기계 학습? 블록체인? 4. 가장 중요한 것: 얼마나 끌리는가?
  7. 프로젝트 선택: 결론 • 너무 거대하거나 성숙한 프로젝트는 피해라. ◦

    1도 못 알아보거나, 기여할 것이 없거나. • 배경 지식을 보유한 프로젝트를 골라라. • 관심이 가는 분야의 프로젝트를 골라라. ◦ 어떤 점에서는 ‘덕질’ ◦ 재미가 없으면 오래 못 함.
  8. 프로젝트 선택: 제 경우는요... • Hadoop 덕후로 시작 (2010). a.

    누가 이끌고 있는가? - Yahoo, Apache 재단을 중심으로 한 많은 기업들 (X) b. 얼마나 성숙한 프로젝트인가? - Active Development는 이미 끝. Maintenance Mode. (X) c. 배경 지식을 얼마나 요구하는가? - 병렬 처리에 대한 배경 지식 필요. (O) d. 얼마나 끌리는가? - 매우 많이. (O) • 안티패턴의 전형. a. 개고생… b. 착한 초심자는 따라하지 마세요.
  9. 프로젝트 선택: 초심자에게 추천 • "자주 써서 익숙한 것 중

    상대적으로 작은 프로젝트" ◦ Spring, Tomcat, Hadoop … 이런 거 말고. • 구체적으로는 ... ◦ Web API binding: Flickr, Tumblr, ... ◦ Unit Testing Library: s3mock, zookeeper-unit, ... ◦ 거의 모든 경우 초심자에게 추천할 만 함. ◦ 크기가 작고, 배경 지식이 많이 필요하지 않으며, 거의 항상 자잘한 뭔가가 필요함.
  10. 사전 지식 • 어떤 프로젝트건 미리 알아 둘 것이 있다!

    ◦ 언어 ◦ 툴 ◦ 이론적 배경 지식
  11. 사전 지식: 언어 • 달인일 필요는 없음. 하지만 너무 몰라서는

    곤란. ◦ 언어 그 자체: Python 2 vs 3? Java Reflection? Java 8 Lambda? ◦ 필수 라이브러리: Java Guava? Scala Scalaz? ◦ Unit Test: junit? hamcrest? Assertj? • 그냥 간단한 예제 하나 돌려 보는 것만으로도 충분. ◦ 나머지는 그냥 활동 하면서 자연스럽게 배울 수 있음.
  12. 사전 지식: 툴 • Git(hub) ◦ 어느 언어로 어떤 프로젝트를

    진행하든 무조건 쓰게 됨. ◦ 무조건 잘 알아야 함. • 기타 프로젝트 운영을 위해 필요한 툴들 ◦ 빌드: Maven? Gradle? sbt? ◦ 문서화: Javadoc? Sphinx? ◦ Code Formatting: Checkstyle? Scalafmt?
  13. 사전 지식: 이론적 배경 지식 • 배경 지식 없으면 아무

    것도 안 된다! ◦ OS 이론을 모르는 사람이 Linux를 들여다 볼 수는 없음. ◦ 병렬 처리 이론을 모르는 사람이 Hadoop이나 Spark를 들여다 볼 수는 없음. ◦ Zookeeper가 뭔지 모르는 사람이 Kafka를 들여다 볼 수는 없음. ◦ Dependency Injection이 뭔지 모르는 사람이 Spring을 들여다 볼 수는 없음. • 그래도 하고 싶으면? 공부해야지 뭐… ◦ 공식 Documentation ◦ Engineering Blog - ex) Databricks, Cloudera, Uber, ... ◦ 책(!) ◦ 논문(!!)
  14. 함께 하기: 사전지식 쌓기 • 대부분의 경우 혼자서 하는 것보다

    함께 하는 것이 낫다. ◦ 질문: 스터디 그룹 같은 게 필요한가요? ▪ 있으면 좋지만 굳이 필요하지는 않음. ▪ 그냥 관심사가 비슷한 사람들끼리 느슨하게 연결되어 있는 것만으로 충분. ▪ ex) Spark 사용자 모임, Kafka 사용자 모임, etc ... • 자료 읽기 먼저, 코드 분석은 나중에. ◦ Documentation은 모든 프로젝트의 기본. ◦ "관심이 가는 분야의 프로젝트를 골라라." (실제로 한 말)
  15. 함께 하기: 코드 분석 • 소스코드 분석하기 ◦ Bottom Up

    vs. Top Down ◦ 서로 장단점이 있음. ◦ 사람마다 스타일이 다름. • 스터디 그룹 요령 ◦ 두 스타일을 섞어서 하되, 약간 더 레벨이 높은 사람을 한 명 끼워서 팀을 만든다. ▪ 서로를 보완해 주면서 누군가가 리드를 할 수 있음. ◦ 돌려 가면서 발표하는 식의 스터디는 안 하는 게 나을지도…? ▪ 참고 1: 바쁜 직장인을 위한 스터디 비결 ▪ 참고 2: 스터디 모임 방법 몇 가지
  16. 기타 tip • 쫄지 마세요. (Don’t Panic!) • ‘초보자가 할

    일’은 언제나 있다! ◦ Newbie Issue, Dependency 관리, Testing, Documentation, Example, ... • Mailing List, Blog, Community ◦ 일단 익숙해져야 뭐라도 한다! • 영어, 영어, 영어 ◦ 슬프지만 현실.
  17. 질문…? • Slides: speakerdeck.com/dongjin