1일 1커밋에 대한 개인적인 생각

주관적인 생각 듬뿍 담겼음에 주의

1일 1커밋이란?

말 그대로 하루에 하루에 커밋 한개를 한다는 뜻으로, 매일 코딩하는 습관을 들이자는 것이다.

한국어로 1일 1커밋 이라는 단어는, 2015년에 아웃사이더님의 블로그로 시작된것으로 보인다.

GitHub Streak

블로그 작성 기준 92 streak으로, 나도 열심히 진행중이다!

왜 1일 1커밋인가

아웃사이더님의 1일 1커밋에 대한 블로그를 읽고 있으면, John Resig의 Writce Code Everyday 라는 글로 가게 된다.

이 글에 1일 1커밋을 주장하는 바는 다음과 같다.

a week between working on some code is a long time, it’s very easy to forget what you were working on or what you left off on 즉 한 코드 작업을 하다, 다른 작업을 하다 오면 공백이 생기고 길을 잃게 된다는 뜻이다.

컴퓨터 공학도 답게 context switching 비용이 든다고 적혀있다 ㅋㅋ

그리고 포스트를 읽다보면 John Resig의 Write Code Everyday 전략은Jennifer Dewlt 의 180일 Blog Challenge(하루에 한 웹사이트씩 180일동안 180개를 만드는 사이드 프로젝트)를 모티브로 따왔다고 한다.

1일 1커밋 규칙

그리고 완성된 Write Code Everyday는 다음과 같은 임의의 규칙이 존재한다고 알려줬다.

  1. 매일 코드를 작성해야 되며, 문서, 블로그 게시물 또는 기타 항목을 작성할 수 있지만 이는 내가 작성하는 코드에 추가되어야 합니다.
  2. 유용한 코드여야 합니다. 들여쓰기 조정, 코드 재포맷, 가능하다면 리팩토링도 없습니다.
  3. 모든 코드는 자정 전에 작성해야 합니다.
  4. 코드는 오픈 소스여야 하고 Github에 있어야 합니다.

여기에 꼭 commit을 해야된다는 규칙은 의외로 없지만, 한국에 넘어오며 잔디밭 심는것으로 넘어오며 1일 1커밋으로 말이 고정된 것 같다.

그리고 아웃사이더님의 블로그의 1일 1커밋 규칙은 다음과 같다.

  1. 의미 없는 커밋은 하지 않는다. 평소에도 할만한 커밋만을 작성한다. 나는 평소에도 커밋을 좀 잘게 쪼개서 하는 편이라서 이 규칙에 모호함이 있긴 하지만 스스로 양심에 맡기는 수밖에 없다.
  2. 치팅은 하지만 어뷰징은 하지 않는다. 이 규칙도 약간 애매한 구석이 있기는 하다. 예를 들어 package.json에 새로운 라이브러리를 추가하고 이를 커밋하는 경우가 많은데 작업하다 보니 나는 평소에도 이렇게 했나 아니면 일일 커밋을 하기 위해서 하나 하는 고민을 종종 하게 됐다. 컴퓨터 시간을 어제로 바꿔서 커밋한다거나 하는 등의 어뷰징은 하지 않겠다는 의미이다.
  3. 사이드 프로젝트 외에도 오픈 소스에 대한 공헌을 늘려간다. 이는 일일 커밋을 하는 목표이기도 하므로 개인 프로젝트에만 몰두하지 않고 틈나는 대로 다른 오픈 소스 프로젝트의 공헌하는 기회도 늘려간다. 장기적으로 특정 오픈 소스 프로젝트에 지속해서 참여하는 것이 목표이기도 하다.
  4. 아무리 바빠도 일일 커밋을 최대한 한다. 바쁠 때는 안 하고 안 바쁠 때만 일일 커밋을 하게 되면 이전과 다를 바가 없으므로 바쁘고 안 바쁘고의 상관없이 진행한다.
  5. 공개 저장소에 커밋하는 내용을 기준으로 한다. 현재 회사에서도 Github을 사용하기는 하지만 공개저장소에 올리는 커밋만을 기준으로 한다. 즉, Github의 공개 컨트리뷰션 그래프에 그려지는 것을 기준으로 한다.

John Resig와 유사하지만, 조금 더 구체적으로 작성해주신것 같다.

1일 1커밋 효과

John Resig가 느낀 매일 코드를 작성하면 느낀바는 다음과 같다.

  • 실행 가능한 최소 코드 작성
  • 코딩하는 습관 형성
  • Context Switching

등이 있었지만, 의외로 장점만 있었던 것은 아니다.

흔히 말하는 워라밸이 붕괴가 된다거나, 항상 생각해야되기 때문에 불안해진다는 점도 말을 해주었다.

내 생각

사실 나는 1일 1커밋이라는것이 꼭 프로그래밍 관점에서만 발생한다고 생각하지 않는다. 헬스를 매일매일 하는것이나, 더 단순하게 게임에서 일일 퀘스트를 깨는것도 비슷하다고 생각한다.

숙제

예전에 메이플스토리라는 게임을 한참 할 때 일일 퀘스트라는것이 존재했다. 매일매일 과제처럼 해야 캐릭터가 성장하고 보상을 받는 시스템으로 되어 있었다. 하루에 적어도 30분은 투자해야됐고, 누적되다 보면 정말 심리적으로 압박감이 오게된다. 실제로 게임 커뮤니티에서는 이걸 숙제 라고 부르기도 했었다. 그리고 나도 처음에는 캐릭터가 성장한다는 성취감에 매일매일 퀘스트를 달성했지만, 3달정도 진행을 하다 끊게 되었다.

캐릭터가 성장하는것은 즐겁지만, 데이트를 하던, 친구들과 술을 마시던, 계속 오늘 우르스를 했었나? 혹은 일퀘 깼나? 라는 생각이 들었었다. 이게 계속 쌓이다 보니 심리적으로 압박이 되고, 집착이 됐었던것 같다. 그리고 스트레스를 해소하기 위해 시작했던 게임인데, 오히려 불안함과 스트레스를 주게되어 접게 되었던 것 같다.

1일 1커밋도 마찬가지라고 생각한다. 꼭 하루에 한번쯤으 프로그래밍적으로 생각하게 만들고, 코드를 치게 함으로써 성장시켜준다는 관점, 더 나아가 오픈소스 컨트리뷰트를 하며 프로그래밍 생태계에 기여한다는 것 자체가 너무 좋은 취지라고 생각하지만, 이게 나를 불안하게 만들고 스트레스를 준다면 오히려 집착하지 않는것이 더 좋다고 생각한다.

나만의 규칙

나는 1일 1커밋을 몇년 째 해오는 사람도 아니고, 집착을 가진 사람도 아니다. 그리고 최대한 내가 스트레스를 받지 않고, 꾸준히 성장하기 위해 나만의 규칙을 정해보았다.

  1. 의미없는 커밋은 하지 않기 (docs 스페이스 만들었다 지우는 정도)
  2. 시간 조작하지 않기 (amend 금지!)

나에게는 딱 이정도가 좋다고 생각한다.

물론 아웃사이더님이나 John Resig가 언급한 정도로 매일 꾸준히 코딩을 할 수 있다면 너무 좋겠지만 나는 나를 알고 있기에 저런 빡빡한 규칙속에서는 금방 지쳐 쓰러질 것이다.

얇고 길게 코딩하자

화이팅👻