/code-kata

Practice, practice, practice to write better code.

Primary LanguageJavaMIT LicenseMIT

코드카타(Code Kata)

Continuous Integration Java_17 Kotlin_1.6 GitHub license GitHub stars GitHub issues GitHub forks

경험만이 유일한 스승이다

어떻게 해야 훌륭한 음악가나 스포츠 선수가 될 수 있을까요?

우선, 음악의 이론을 알면 악기의 역학을 이해하는등의 음악적인 역량을 키우는데 분명한 도움이 됩니다. 하지만 궁극적으로 훌륭한 연주실력은 이론만 안다고 얻어지는 것이 아니며, 이는 오로지 지속적이고 반복적인 훈련끝에 체득된다는 것을 깨달아야만 합니다.

신체 스펙과 같은 선천적인 재능들은 스포츠 선수에게 분명히 큰 도움이 됩니다. 그러나 이러한 선천적인 재능과 별개로 세상의 모든 위대한 스포츠 선수들은 사람들의 눈에 보이지 않는 곳에서 매일 긴 시간 동안의 피나는 훈련을 했음도 알아야 합니다.

즉, 관련된 이론을 학습하며 이를 반복적인 훈련에 적용하고, 얻어낸 결과에 대한 피드백을 한다면 역량이 계속해서 증대될 것입니다.

우리는 소프트웨어 산업현장에서 단지 이론만 훈련받은 개발자들을 데려와 프로젝트에 투입시키면서 프로젝트가 잘 돌아가길 원합니다. 이것은 마치 건강한 아이들을 모으면 워싱턴 커맨더스를 이길 수 있다고 말하는 것과 다르지 않습니다.

즉, 이론은 알지만(혹은 이론조차 모르거나...) 실제적인 코딩 능력이 함께 훈련되지는 않은 개발자들은 아이들과 크게 다를 바 없습니다.

우리는 직장에서 훈련을 하고 있습니다.

이것이 실무 프로젝트 환경에서 계속 실수하면서, 생각보다 크게 성장하기 어려운 이유입니다. 따라서, 우리는 업무와 훈련을 철저하게 분리하고 지속적으로 훈련하며 업무 능력을 향상시켜야만 합니다.

카타란 무엇인가?

카타는 한 형태를 여러 번 반복하면서 조금씩 개선되는 가라데의 훈련입니다. 즉, 코드 카타는 단순히 짧은 주기의 반복 훈련입니다.

코드 카타, 어떻게 해야 하는가?

  • 누구에게도 방해받지 않고 몰입할 수 있는 시간이 필요합니다.
  • 아주 가볍게, 재밌게 시도해보고 싶은 단순한 주제가 필요합니다.
  • 스스로 만족스러울때까지 계속해서 쉽게 재시도할 수 있어야 합니다. (백지상태에서 무언가를 만들어 내라고 하면 당신은 막막한가요? 막막하지 않은가요?)
  • 결과물이 완벽하지 않아도 됩니다. 실수와 실패를 하는 것이 두렵지 않고 편안해야만 합니다.
  • 훈련의 결과를 개선할 수 있도록 매번 피드백을 얻어야만 합니다. 스스로 피드백을 얻는게 힘들다면 주변에 도움을 청하세요.

카타를 처음하면 같은 주제를 계속해서 반복하는것이 지루할수도 있습니다. 하지만 계속 반복할수록 자신의 코딩 실력이 점점 더 향상되는 것을 느끼게 될 것이기 때문에 하면 할수록 이 훈련이 아주 좋다는 것을 스스로 인정하게 될 것입니다. 결과적으로 스스로가 지속해서 성장한다는 것을 직접적으로 느낄 수 있기 때문에 카타는 개발에 재미를 붙이는 데에도 큰 도움이 됩니다.

누군가는 카타를 하며 단순히 코딩하는 것을 떠나 설계까지 고려 할 것입니다. 또, 누군가는 카타를 진행하며 컴퓨터 과학적인, 단순한 코딩이면의 문제에 대한 고민을 할 겁니다. (알고리즘, 최적화와 같은...) 즉, 스스로 향상시키길 원하는 능력에 시간을 투자하고 훈련하면 됩니다. 그리고 카타의 또 다른 중요한 점은 카타에는 정답이 없다는 것이며, 설령 정답이 있다고 하더라도 그 정답이 중요하지 않을 것이라는 점입니다. 왜냐하면 카타를 할 때 중요한 것은 결과가 아닌 카타를 진행하며 고민하는(스스로 사고하는) 과정 그 자체이기 때문입니다.