10  오픈 소스 앱 클론

“어떻게 하면 실력을 키울 수 있습니까?”라는 질문을 늘 받습니다. 제가 가장 좋아하는 방법은 제 경험으로 만들기에는 조금 벅차 보이는 OSS를 하나 찾아서 (…) 직접 만들어 보는 것입니다. OSS 소스는 완전히 막혔을 때만 참고하십시오. - Ryan Florence

무언가를 배우고, 잘하면 포트폴리오에도 넣을 수 있도록 프로젝트를 만들어야 한다는 것은 이미 알고 계실 것입니다. 말콤 글래드웰의 책도 읽으셨으니, 1만 시간의 의도적인 연습이 필요하다는 것도 알고 계십니다. 이제 막 시작하는 단계라면, 다소 논란의 여지가 있는 제안을 하나 드리겠습니다: 새로운 것을 만들지 마십시오.

의사 결정 능력은 한정된 자원입니다. 여러분은 매일 가득 찬 연료 탱크로 하루를 시작하고, 하루 동안 결정을 내릴 때마다 연료는 조금씩 줄어듭니다. 한밤중을 훌쩍 넘긴 시간에 내린 결정이 얼마나 훌륭한지는 우리 모두 잘 압니다. 새 앱을 만들려면 앱이 무슨 일을 하는지부터 어떻게 보여야 하는지, 그리고 그 사이의 모든 것까지 수많은 작은 결정을 내려야 합니다. 지금 결정하십시오. 기술적 결정을 연습하고 싶습니까, 아니면 제품 결정을 연습하고 싶습니까?

자, 이제 코딩을 하고 있습니다. 제품 결정을 단 하나도 내릴 필요가 없는 일이 무엇인지 아십니까? 무언가를 클론하는 것입니다. 나만의 특별한 무언가를 만들고 싶은 충동은 (당분간) 참으십시오. 하지만 그러면 또 하나의 Hacker News 클론을 누가 쓰겠느냐고요? 알려 드릴 소식이 있습니다. 어차피 여러분이 만든 것은 아무도 쓰지 않았을 것입니다. 여러분은 스타트업을 만드는 것이 아니라 코딩을 연습하고 있는 것입니다. 기억하십니까?

먼저 스스로 클론을 만든 다음, 원본의 소스 코드를 확인하십시오. 이제 무언가를 구현하는 방법에 대한 예시가 두 가지나 생겼으니, 사람들이 수년의 경험을 쌓은 뒤에야 하게 되는 일까지 연습해 볼 수 있습니다. 바로 기술적 선택의 트레이드오프를 이해하는 일입니다!

여러분은 운이 좋습니다. 여러분은 기업이 자사 앱 전체를 오픈 소스로 공개하는 시대에 살고 있습니다.

그것들이 여러분이 클론하기에는 너~무 큰 앱으로 보인다면(실제로 정말 거대합니다), 여러분 멘토들의 사이드 프로젝트를 찾아보십시오. 예를 들어, 프런트엔드 개발자라면 다음과 같습니다.

클론을 만든 다음, 그들에게 보여 주십시오! 무료로 피드백을 받는 것은 거의 확실합니다. 꼭 유명한 사람일 필요는 없습니다. 클론의 클론을 만들어 볼 수도 있습니다:

꼭 앱을 만들 필요도 없습니다. 원한다면 인기 있는 라이브러리와 프레임워크의 클론을 직접 만들어 볼 수도 있습니다. 도움이 필요하다면 Daniel Stefanovic의 Build Your Own X 저장소에 이를 위한 튜토리얼이 보물 창고처럼 가득합니다.

“예술/디자인 커뮤니티에는 이를 가리키는 말이 있습니다. 바로”필사“입니다… 기존의 것을 따라 만들면 좋은 점이 많습니다. 인터랙션이 어떻게 동작해야 할지 고민할 필요가 없고(그냥 따라 하면 됩니다), 한 번에 하나씩 배우는 데 집중할 수 있으며, 난이도도 스스로 정할 수 있습니다.” - Dave Ceddia

전문 분야로 삼을 기술을 이미 골랐다면(장 12): 그 기술로 앱을 클론하면서 어떤 점이 더 나은지 보여 주고, 부족한 점은 고쳐 보십시오. 평범하게 들릴 수 있지만, 인터넷의 빈틈 메우기(Plugging Holes In The Internet)는 빠르게 친구를 사귀고 막역한 친구를 만드는 확실한 전략입니다. react-router는 Ember의 예전 라우터를 그리워하던 React의 얼리 어답터들이 만들었으며, 이렇게 그들은 React 생태계의 그 빈틈을 메웠습니다. 그리고 그 덕분에 명성을 얻었습니다.

시간제한을 두십시오. 마감 기한은 놀라운 효과를 발휘합니다. 또한 여러분은 여러분보다 훨씬 경험이 많은 사람들이 팀을 이루어 만든 것을 픽셀 하나까지 똑같이 복제하려는 것이 아닙니다. 정해진 시간을 두고, 흥미로운 기능을 최대한 많이 구현한 다음, 출시하십시오. 이렇게 하면 다음 클론, 또 그다음 클론에 몰두할 여유가 반드시 생깁니다. 프로젝트마다 다른 라이브러리와 스택을 시도해 보고, 그 안에서 자신이 무엇을 좋아하는지 알아낼 수 있습니다. 또한 소프트웨어 엔지니어링에서 가장 어려운 기술 중 하나인 프로젝트 추정(Project Estimation)을 연습할 수 있습니다. 시간을 정해 두고 무언가를 만드는 연습을 의도적으로 하는 것이므로, 정해진 시간 안에 무엇을 할 수 있는지 확인할 기회를 스스로에게 아주 많이 만들어 주게 됩니다. 게다가 그 시간 중 어느 것도 제품 결정에 빼앗기지 않습니다!

실수를 찾으십시오. 멘토를 우러러보며 그들이 하는 모든 일이 완벽하고 흠잡을 데 없다고 여기고 싶어질 것입니다. 실제로는 대부분의 사람이 결함을 발견할 만큼 그들의 작업을 자세히 들여다본 적조차 없습니다. Allen Hemberger와 Alinea 요리책에 얽힌 흥미로운 이야기는 많은 것을 알려 줍니다. 결국 여러분은 멘토의 실수를 발견하고 고치게 될 것이며, 멘토는 여러분을 동료로 여기게 될 것입니다. 자신감을 가지고 가장자리에서 실험하며 발견한 결함을 해결하고, 그 해결책을 공개적으로 공유하십시오.

충분히 해 보았고 지루함을 느끼기 시작했다면, 이제 마음껏 개성을 드러낼 때입니다. 다른 사람의 앱을 만들어 보았으니, 이제 여러분은 자신만의 앱을 만들 자격을 얻었습니다. 여러분은 무엇에 어떤 비용이 드는지 알고 있으며, 그곳에 도달할 만큼 도구를 충분히 잘 다루어 보았습니다. 그래도 여러분은 여전히 공개적으로 배우고 있습니다! 여러분의 경험을 정리하여 발표로 만드십시오. 코딩하는 모습을 라이브 스트리밍하십시오. 여러분의 실행 계획에 대해 블로그에 글을 쓰고, 그 계획을 실행하면서 또 글을 쓰십시오. 공개적으로 일할 수 있는 개발자는 그렇지 못한 개발자보다 훨씬 더 많은 수요가 있습니다.

참고: 사이드 프로젝트를 시작하고 관리하는 방법에 대한 더 자세한 내용은 사이드 프로젝트 장(장 37)을 참조하십시오.