SW장인 시리즈④ 개발자를 위한 끊임 없는 훈련 '소프트웨어 카타'

일본 고유의 훈련방법 카타

그런데, 그 중에서 일본의 도제시스템은 유독 ‘카타(Kata, 型)’라는 것을 매우 중요시 했습니다. 직역하자면 ‘품세’라고 할 수 있는데, 이것은 태권도의 ‘태극 1장’과 같이 기본 동작을 반복 연마하는 것과 비슷한 개념입니다. 원래 ‘카타’는 실제 기술을 적용하는 방법을 배우기 위해 혼자 훈련하기 위한 방법들을 모아 놓은 것을 말합니다. 이는 가면극, 도예 등을 비롯한 일본 문화 전반에서 나타나지만, 대표적으로 ‘카타’가 활용된 분야는 일본 무술, 가라데 입니다. 가라데에서 ‘카타’는 기술을 습득하는 것뿐만 아니라, 오랜 깨달음을 압축한 ‘카타’를 반복 연마함으로써 무의식 중에도 호흡을 유지하여, 상대를 무너뜨리는 기술을 체득하는 것이라 여기고 있습니다. 그래야, 혼란스러운 전장이나 대결에서 몸에 베어있는 절제된 동작과 수련된 기술을 제대로 발휘할 수 있을 것이라고 생각했던 것이죠.

물론, 서양에서도 ‘카타’와 같은 방법이 기초적인 규칙과 정해진 기술을 훈련함으로써 무술의 원리를 체득하는데 사용될 수 있다고 보고 있습니다. 하지만, 더 중요한 것은 그 기술을 활용해 변형, 개선하고 실전과 같은 스파링을 통해 실력을 향상시키는 것이라 여기고 있습니다.

그런 면에서, 일본의 ‘카타’와 서양의 ‘카타’는 서로 이해하고 접근하는 방식에 있어 다소 차이가 있습니다.

카타 이미지

그렇지만, 엄청난 시간 동안 반복된 훈련은 무의식 중에도 그 기술을 사용할 수 있도록 사람의 뇌를 바꾸어 놓는다는 사실에는 변함이 없습니다. 예를 들어, 서울에서 부산까지 장시간 운전을 했던 경험을 떠올려 봅시다. 운전하는 동안, 우리는 얼마나 많은 의사결정과 고민을 반복하며 긴장을 해야 했을까요? 그렇지만, 지나고 보면 우리는 무의식 중에 안전하게 운전을 마무리했고, 그 와중에 대화도 했으며, 다른 문제를 두고 고민을 하기도 했을 겁니다. 그리고 지금도 우리는 운전할 때마다, 기어를 중립에 놓아야 하고, 시동을 걸 때는 브레이크를 밟은 상태로 해야 하며, 전방을 항상 주시해야 한다는 등의 내용을 체크하지는 않습니다. 이게 바로 ‘카타’의 힘입니다.

개발자를 위한 끊임 없는 훈련, “소프트웨어 카타”

이런 ‘카타’를 적극적으로 활용하기 좋은 분야는 가라데 뿐만이 아닙니다. 바로 ‘코딩’이죠. 품질이 좋은 코드를 능수능란하게 만들고 싶다면 이 또한 훈련이 필요합니다.

그래서, 개발자들의 기본 품세 훈련으로 ‘소프트웨어 카타’라는 것이 있습니다. 이 카타는 작은 훈련용 코딩 문제들을 의미하는데요. ‘틱택토 게임’이나 ‘숫자 야구 게임’과 같은 단순한 문제를 해결하는 것을 통해서, 새로운 테크닉과 구현 방법, 익숙하지 못했던 테스트 주도 개발과 언어, 프레임워크 들에 대해 배울 수 있습니다. 사실 이 문제들은 아주 간단해 보이지만, 해결하는데 몇 시간씩 소요되기도 합니다.

이러한 훈련을 통해 새로운 실행 관례와 기술들을 배우게 되면, 자동차 운전 실력이 나도 모르게 향상되는 것과 같은 효과가 나타납니다. 예전과 달리 엄청난 에너지 소비와 시간 투자, 집중을 하지 않아도, 별다른 노력 없이 쉽게 코딩을 할 수 있고, 기술적인 문제 보다 문제를 해결하는 방법 자체를 고민하는데 시간을 더 투자할 수 있게 되는 것이죠.

여기엔 두 가지 방법이 있습니다. 한 가지 문제 해결을 반복적으로 훈련하는 ‘일본식 카타’와, 같은 코딩 ‘카타’를 반복하더라도 다른 패턴과 다른 언어, 다른 접근 방법을 사용해 해결하는 ‘서양식 카타’. 이 두 가지를 병행한다면 효과를 극대화 할 수 있습니다.

그런 의미에서 팀원들과 함께 반복적으로 같이 해결해 볼 카타 문제를 만들어보고, 해결 방법을 같이 토론해 보면 어떨까요? 힘들기만 했던 개발 규칙을 만들고, 비효율을 제거하는 일들이 좀 더 수월해질 수도 있습니다.

다양한 소프트웨어 카타를 체험해 볼 수 있는 웹사이트들을 소개합니다.
http://www.codekatas.org/    코드 카타 문제 해결을 영상을 통해 배워볼 수 있습니다. (강추!)
http://codekata.pragprog.com    KATA가 어떻게 시작되었는지, 다양한 문제와 함께 살펴 볼 수 있습니다.

‘카타’가 지루하다면, ‘펫 프로젝트’를!

반복되는 문제 해결이 지루해졌다면, 또 다른 자가 훈련 방법으로 ‘펫(Pet) 프로젝트’를 추천합니다. ‘펫 프로젝트’는 한 마디로 ‘내 맘대로 만들어보는 작은 IT서비스’라고 할 수 있습니다. 납기가 정해져 있는 것도 아니고, 돈을 벌 필요도 없습니다. 딱히 어떤 사용자의 문제를 해결해 준다거나, 편리함을 제공해야 하는 것도 아닙니다. 단지, 내가 만들고 싶은 것을 만들어보는 프로젝트에 지나지 않습니다. 실제로 회사에서 사용되는 ‘Pet Project’란 용어는 ‘회사의 비즈니스와 상관없이 그저 좋아서 진행하는 프로젝트’를 의미합니다.

펫 프로젝트 이미지

비즈니스와도 관련이 없고, 망할 염려가 있는 것도 아니기 때문에 ‘펫 프로젝트’는 단순한 코딩 중심의 반복훈련에서 벗어나, 프로젝트 아이디어에서 사용자 스토리, 설계와 기술요건, 아키텍쳐를 비롯한 테스트, 배포와 운영, 마케팅과 사업관리까지 본인이 ‘사장’이자 ‘최종 결정권자’로서 모든 것을 경험해볼 수 있습니다.

그래서 ‘펫 프로젝트’를 하는 데는 가장 중요한 원칙이 하나 있습니다. 바로 ‘재미있어야 한다’는 겁니다. 다른 사람이 시키거나, 돈을 벌기 위해 하는 것이 아니라, 열정을 바쳐서 할 수 있는 것을 골라야 합니다. 언젠가 다른 사람의 문제를 해결해주기 좋아했던 누군가가 “회사 화장실에 변기가 부족해서 줄을 서는 일이 많아. 그래서, 난 비어있는 변기를 표시해주는 앱을 만드는 것을 내 ‘펫 프로젝트’로 정했어.”라고 말한 적이 있습니다. 그렇습니다. ‘펫 프로젝트’는 이렇게 자신이 재미있어하고 좋아하는 일이라야 실제 구현까지 끝까지 완주하여, 성과를 만들어 내는 것이 가능해집니다.

또, ‘펫 프로젝트’는 개발자 스스로 상품기획자, 마케터, PM 등의 다양한 역할을 수행하게 함으로써 협업에 임하는 기본 자세를 배울 수 있도록 해주기도 합니다. 더구나, ‘펫 프로젝트’의 성공이 비즈니스 기회로 이어진 경우도 많기 때문에, 여러 개발자들이 팀을 이루어 도전하는 것도 권장해 볼 만한 일입니다.

다음 이 시간에는 ‘오픈 소스 세상에 기여하기’라는 내용으로 찾아오겠습니다.



▶   해당 콘텐츠는 저작권법에 의하여 보호받는 저작물로 기고자에게 저작권이 있습니다.
▶   해당 콘텐츠는 사전 동의없이 2차 가공 및 영리적인 이용을 금하고 있습니다.

이 글이 좋으셨다면 구독&좋아요

여러분의 “구독”과 “좋아요”는
저자에게 큰 힘이 됩니다.

subscribe

조남호
조남호 IT테크놀로지 전문가

삼성SDS 개발실

개발역량강화TF로 활동하며 개발역량강화를 위한 정보를 신속하게 공유하고, 개발강화를 위한 다양한 활동을 하였습니다. 현재는 개발실에서 개발환경 개선 및 커뮤니케이션 담당하고 있습니다.