도장은 극동 무술의 훈련 장소로 일본어로 알려져 있습니다. 소위 카타(katas)라고 불리는 동작 시퀀스는 종종 사원과 비슷하고 매우 영적인 성격을 지닌 이 건물에서 훈련됩니다. 극동 무술의 영성과 소프트웨어 개발의 공통점은 이 글에서 자세히 살펴보는 것이다.
소프트웨어 개발자는 전문가입니다. 그들은 알고리즘을 설계하고 적용하고 코드의 형태로 제공함으로써 문제를 해결하는 생계를 유지합니다. 개발자가 사용할 수 있는 도구의 범위는 너무 크고 빠르게 움직이기 때문에 “평생 학습”이라는 좋은 구호는 특히 소프트웨어 산업에 적용할 수 있습니다.
위대한 일의 기초가 되는 도장에서의 기본 수련
개발자가 이 빠른 속도와 끝이 없어 보이는 기술 스택의 스펙트럼을 어떻게 관리할 수 있는지에 대한 의문이 생깁니다. 이 질문에 답하는 한 가지 측면이 빠르게 떠오릅니다. 불가능합니다. 많은 기술, 프레임워크 및 프로그래밍 언어는 일부는 더 빨리, 일부는 나중에 오고 갑니다. 그러나 끊임없는 “공에 머무르는 것”은 개발자에게 도전이 되고 교육 시간을 소모하는 반면, 기술 독립적인 기본 기술, 패러다임 및 알고리즘의 교육은 중도 하차하게 됩니다.
음악가가 악기를 들지 않고 끊임없이 새로운 곡을 배우거나, 축구 선수가 공을 차지도 않은 채 전술과 경로에 대해 끊임없이 이론을 세우는 것과 같을 것입니다.
그리고 소프트웨어 개발에서도 분명히 나타나는 문제가 바로 이 문제입니다. 얼마나 많은 선임 개발자가 그것을 읽지 않고 감히 빠른 검색 알고리즘을 구현하겠습니까? 최신 IDE, 코드 완성, 테스트 범위, 품질 게이트 등의 지원 없이 고품질 테스트 도구 모음을 “핸즈프리”로 코딩할 수 있는 사람이 어디 있겠습니까? 얼마나 많은 개발자가 추상 공장을 “자유롭게” 구현할 수 있습니까? 몇 년 안에 타사 개발자가 자신의 코드를 이해하고 확장하고 테스트해야 한다는 사실을 모든 사람이 기억하고 있습니까?
여기서 원은 극동 무술에 가깝습니다. 소프트웨어 개발의 세계에서 도장은 자신의 기술과 기본 기술을 연습하고 궁극적으로 마스터할 수 있는 장소입니다. 일상적인 프로젝트 생활과는 거리가 먼 코딩 도장에서 연습하는 “katas”는 개발자를 미세 조정하는 역할을 합니다. 또한 코딩 카타를 함께 연습하면 개발 팀의 지식 이전이 촉진되고 개별 개발자가 고정관념에서 벗어나 생각할 수 있습니다. 이런 식으로 동료들은 당신이 스스로 생각해 본 적이 없을 수도 있는 솔루션과 접근 방식을 보여줍니다.
TDD 없이는 코딩 도조가 없습니다.
Dojo는 일반적으로 TDD(Test Driven Development)를 사용하여 수행됩니다. “Red-Green-Refactor” 만트라는 코딩 도장의 “에티켓”과 같은 것입니다. TDD의 사용은 전략적 프로그래밍, 즉 오래 지속되고 고품질이며 영구적으로 유지 가능한 코드의 전략을 촉진합니다.
코딩 도조의 초점은 TDD를 연습하거나 소프트웨어 개발의 다른 측면(레거시 코드 리팩토링, 요구 사항 분석, 객체 지향 설계, 알고리즘 등)일 수 있습니다.
코딩 도장 조직
구현 형태는 다양하며 상상의 한계가 없습니다. 각각 동일한 작업(카타)을 가진 여러 팀의 구성이 입증되었습니다. 팀당 3명 이상이면 안 됩니다. 그렇지 않으면 모든 팀원의 적극적인 참여가 어려워집니다.
도장의 실기시간은 2~3시간이며 가용시간과 원하는 범위에 따라 상한은 없다. 난이도에 따라 카타는 2시간 이내에 꽤 잘 익힐 수 있습니다. 더 많은 일을 하고 싶다면 그에 따라 더 많은 시간을 계획해야 합니다. 생산적인 일이 너무 뒷전으로 밀려나지 않게 하려면 도장을 비교적 엄격한 시간 상자로 미리 설정해 두는 것이 좋습니다.
도장에서 작업할 카타의 선택은 끝이 없습니다. 한편으로 인터넷은 정렬 및 검색 알고리즘을 통해 “문자열 계산기”를 구현하는 것과 같은 고전적인 작업부터 시작하여 여러 도장에 걸쳐 확장될 수 있는 복잡한 카타에 이르기까지 예제로 가득 차 있습니다. 한편, 고객 프로젝트의 구체적인 하위 문제도 사용할 수 있으며, 이는 카타 역할을 하거나 그에 상응하는 도전적인 가상 프로젝트의 창의적인 사용자 스토리를 고려할 수 있습니다.
도장에서 입증된 또 다른 요소는 도장 2시간마다 20분 정도의 복습을 계획하는 짧은 복습 형식의 결론입니다. 모든 팀은 카타를 작업할 때 발생한 솔루션 접근 방식, 어려움 및 개인적 인상에 대해 보고합니다.
올바른 질문을 하십시오
코딩 도장은 개별 개발자에게 어떤 영향을 미칩니까? 이 질문은 주관적으로만 답할 수 있습니다. 그러나 각각의 새로운 도장에서 참가자들이 질문을 하기 시작한다는 것을 관찰할 수 있습니다. 이 질문은 코딩 사고 방식, 코딩 전략 및 궁극적으로 코드에 간접적으로 영향을 미칩니다. 내 테스트가 모든 엣지 케이스를 포함합니까? 내 모듈의 더 간단한 아키텍처가 있습니까? 클래스 설계가 향후 확장 가능하고 테스트 가능합니까?
도장에서 지속적으로 TDD를 따르는 것은 특히 마음가짐과 관련하여 매우 효과적입니다. 이전에는 “어쨌든 이것은 내 수업에서 비공개 메서드가 될 것이며 이에 대한 테스트가 필요하지 않을 것”이라는 의견만 있던 개발자가 갑자기 TDD 주기를 사용하기 시작하고 관련 테스트 전에 단위 테스트 형식으로 요구 사항을 지정합니다. 프로덕션 코드가 구현됩니다. 이는 언제든지 쉽게 테스트할 수 있는 코드로 이어지며 유지 관리할 수 없는 레거시 코드의 운명을 충족하지 못할 것입니다.
코딩 도조와 부가 가치
언급한 장점 외에도 코딩 도장에는 많은 긍정적인 부작용이 있습니다. 구체적인 문제를 기반으로 새로운 프로그래밍 언어를 배우는 데 이상적입니다. 그러나 궁극적으로 정신적인 측면도 있습니다. 일상적인 프로젝트 작업에서 때때로 개발 팀이 원치 않는 유휴 시간, 까다로운 기능, 비정상적인 파이프라인 등의 어려운 상황에 처할 수 있습니다. 이러한 상황에서 Coding Dojo는 필수 사항에 다시 집중하고 유휴 시간을 효율적으로 사용하십시오.
다시 스포츠에서 은유를 사용하면: 축구 팀이 개인 및 팀 기술을 향상시키기 위해 챔피언십 밖에서 지속적으로 훈련해야 하는 것처럼 개발자도 기술을 유지하고 향상할 수 있도록 프로젝트에서 멀리 떨어진 훈련 환경이 필요합니다. 궁극적으로 참여하는 개발자만이 혜택을 받는 것이 아니라 고객과 그들의 프로젝트도 마찬가지입니다.