입사 후 처음으로 짝코딩을 경험하면서 좋았던 점과 아쉬웠던 점을 적어봤습니다.
입사 6개월 후, 프로젝트의 새로운 피쳐(Feature)를 개발하는 업무를 맡게 되었다. 업무를 맡기 전에는 전반적으로 프로젝트가 어떻게 구성되어있는지 구조를 혼자 그려보거나 문서로 정리해보는 형식으로 프로젝트를 파악하고 있는 상태였다.
당연히 혼자서 아무런 배경지식 없이 코드만 보고 큰 프로젝트의 구조와 의미를 파악한다는 것은 쉽지 않았고, 솔직히 봐도 잘 모르겠는 부분이 대부분이었다.
이때, 하늘에서 내려온 킹 갓 제네럴 시니어 개발자분께서 같이 페어 프로그래밍을 해보는 것이 어떻냐고 권유를 해주셨고 꽤 규모가 있는 피쳐(Feature)에 전반적으로 프로젝트의 핵심 부분들을 수정 및 추가할 기회였기 때문에 시작하게 되었다.
1. 큰 규모의 프로덕트 코드가 어떻게 동작하는지 전부 알고 있는 것은 거의 불가능에 가깝다.
직접 코드를 작성한 사람이 아니고서야 그 코드를 작성한 당시의 상황이나 히스토리 등을 알 방법이 없다.
물론 시간을 들여서 커밋 로그나 주석 혹은 작성된 코드를 보면서 그때 상황이나 히스토리 등을 유추 정도는 할 수는 있을 것이다. 하지만 이것마저 불가능한 경우가 있을 수 있고 굉장히 힘든 일이 될 수도 있다.
내가 작성한 코드를 팀원들과 공유하는 방법은 여러 가지가 될 수 있지만 짝코딩은 코드를 같이 작성하는 것이기 때문에 따로 시간을 들여서 설명하지 않아도 이미 배경이나 상황이 공유가 된 셈이다.
누군가 내가 작성한 코드에 대한 전반적인 지식을 갖고 있다는 이유 하나만으로도 힘이 될 때가 있다. 내가 작성한 코드에 결함이 있을 수 있고, 다른 팀원들이 작성한 부분에서 에러가 발생할 수 있다. 이럴 때, 히스토리를 알고 있는 팀원들과 같이 이야기하면서 수정을 할 수 있다면 코드를 고치는 데에 있어서 거부감이 줄어들 것이고 그 과정이 조금 더 수월해질 것이다.
2. 코드 베이스에 적합한 코드를 작성 할 수 있다.
짝코딩을 하고 난 뒤에는 설계에 적합한 코드를 작성할 수 있도록 신경을 많이 쓰게 되는 것 같다.
설계에 어긋나는 코드를 작성하게 되면 지금까지 코드를 작성하기 위해 투자한 시간과 설계에 적합한 코드를 재작성하는 시간이 소요된다.
이왕 작성하는 코드 설계에 적합한 코드를 작성하는 것이 좋겠지만, 혼자서는 많은 시간을 투자해야 하는 경우도 있다. 이런 상황에 누군가가 옆에서 설명해준다면?
프로덕트를 직접 설계하고 작성한 사람에게 히스토리를 듣고 코드를 보면 마치 내가 짠 것처럼 보이진 않아도 어느 정도 이해할 수 있는 수준이 되는 것 같다. 이처럼, 누군가 설계를 설명해주면서 동시에 이를 응용할 수 있는 코드를 작성하는 기회는 흔하지 않다.
이렇게 점진적으로 다른 팀원이 작성한 코드에 대한 공유가 잘되면 전반적으로 팀 전체 생산성도 좋아지는 것 같다.
코드를 작성하는 스킬 적인 부분과 더불어 전반적인 노하우들을 훔칠 수 있다.
알아두면 쓸데 있는 신박한 잡기술들을 기억해 두었다가 사용하자.
코드를 작성하는 데에 있어서 각자 자신들만의 스타일이 있고, 사용하는 도구들도 다양하지만, 옆에서보다 보면 가끔 허니팁 같은게 툭툭 하고 떨어진다.
실제로 코드를 작성하면서 알게 모르게 전수되는 허니팁이 꽤 생산성에 많은 도움이 되었던 것 같다. 작업하면서 자연스럽게 이루어지니 기억에도 오래 남는 것 같다.
팀 단위의 프로덕트가 견고하게 잘 만들어지려면 팀원 간에 소통이 굉장히 중요하다.
대부분의 개발팀 내부에서 짝코딩이나 코드리뷰와 같은 프로세스를 채택하는 이유도 프로덕트를 견고하게 잘 만들기 위한 방법일 것인데 이러한 방법들의 공통적인 부분이 바로 피드백이다.
짝코딩의 가장 큰 장점 중 하나는 피드백의 주기가 아주 짧다는 점이다. 즉각적인 피드백을 통해서 코드를 작성함과 동시에 Debugging, Linting 등을 같이 진행하게 되어 휴먼 에러를 방지하는 데 많은 도움이 된다.
알 수 없는 에러가 발생하기도 하고 수많은 이유로 인해서 코드를 작성하는 데 있어서 브레이킹이 걸리기 마련이다. 혼자서 코드를 작성할 때, 특히나 답이 정해지지 않은 문제 혹은 복잡하고 까다로운 작업을 할 때는 더욱더 터널 비전에 빠지기 쉽다. 말 그대로 시야가 좁아져 더 나은 솔루션을 위한 생각에 브레이킹이 걸리는 것이다.
짝코딩은 네비게이터와 드라이버가 의견을 주고받으며 코드를 작성하기 때문에 서로 터널 비전에 빠지지 않게 도움을 줄 수 있다.
오랜 시간 집중을 할 수 있는 것도 능력이다.
라는 말이 와닿는 경험이었다.
짝코딩 특성상 순간 상대방의 말을 놓치거나 딴생각을 하게 되면.. 이후에 작성되는 코드들을 이해할 때 더 많은 시간과 노력이 필요하게 된다. 그 때문에 엄청난 집중력을 필요로 한다.
처음에는 집중이 너무 안 돼서 힘들긴 했지만, 시간이 지나면서 집중할 수 있는 시간도 늘어가는 것 같다.
앞서 소개했던 노하우 훔치기와는 약간 다른 느낌이긴 하지만 맥락은 비슷하다.
전문성 훔치기는 하드 스킬에 대한 것들을 배우기 위해서 가장 가까이에 있는 전문가의 설명을 잘 끌어내야 하는데 이 부분이 많이 부족했던 것 같다.
물론 킹 갓 제네럴 시니어분께서 부가적인 설명을 해주실 때도 있긴 했지만 지금 와서 생각해보니 내가 조금 더 적극적으로 질문을 해야 했지 않나... 라는 아쉬움이 남는다.
시니어 : 이 부분은 이 클래스를 상속받아서 작성을 하는 것보다는 포함 관계로 해결하는 게 여러모로 좋을 것 같네요.
주니어 : (...그런가? 갸우뚱?) 아..
시니어 : 이 부분은 부모와 자식이 is-a 관계가 아니기 때문에 상속을 사용했을 때 ...(중략)... 리팩토링이 어려워지는 문제가 있어요.
주니어 : (아, 그런 문제가 발생할 수 있구나.) 아하.
코드를 작성하면서 깔끔하게 처리하지 못하고 애매하게 처리(Workaround)하거나 나중에 처리해야지 하고 넘어갔다가 까먹은 경우도 종종 있다.
개발자의 운명은 데드라인에 의해서 결정이 될 만큼 일정 산출은 나름 중요하다.
엑셀에 이슈별로 정리해서 이슈별 예상 시간을 짐작해보고 실제 개발에 걸린 시간과 얼마나 차이가 나는지 대략적으로라도 비교해보는 작업을 했었지만, 끝까지 관리를 잘하지 못해서 아쉬웠다.
생각보다 이 부분이 잘 지켜지지 않는 것 같다.
중간에 쉬는 시간과 함께 작업한 요소들에 대해 정리를 하는 시간은 별도로 가지는 것이 좋다.
지금까지 진행했던 작업에 대해 서로 싱크를 맞추고 앞으로 어떻게 진행할 것인지 대략 얘기할 수 있기 때문이다.
나라면 어떻게 했을 텐데
와 같이 비교를 통해서 결과물이 다를 때 짝에게 생각을 물어보는 것이 중요하다.
주니어 : 음.. 여기서 타입 불일치가 생겨서 문제가 생기네요. 어떻게 해결하면 좋을까요?
시니어 : 주니어는 어떻게 생각해요?
주니어 : 타입을 새로 정의하는 것이 좋을 것 같아요.
시니어 : 왜 그렇게 생각하셨나요?
주니어 : 이전에 사용하고 있는 타입을 수정하면 사이드 이펙트가 발생할 수 있을 것 같아서요.
시니어 : 아하, 저는 주니어가 말한 방법도 좋을 것 같긴 한데 (중략) ... 이렇기 때문에 이런 방향이 더 적절한 수정이지 않을까 싶네요.
주니어 : 흠칫. 두둠칫.
위의 예시로 든 대화가 적절하진 않을 수도 있지만 대체로 이러한 흐름의 대화는 주니어에게 문제의 근본적인 원인을 해결하기 위한 능력을 기를 수 있기 때문에 확실히 많은 도움이 되었던 것 같다.
짝코딩을 진행하면서 제일 많이 느꼈던 것 중 하나가 현재 내가 작성한 코드가 나의 아이디어가 아니라면 코드를 정확하게 이해하도록 노력해야 한다. 앞서 말했지만, 코드를 이해하는 것도 중요하지만 왜 이렇게 코드를 작성했는지에 대한 배경과 상황들도 같이 인지를 하고 있어야 한다.
같이 집중할 수 있는 시간은 얼마 되지 않고 이 시간 만큼은 효율적으로 사용해야 한다는 압박감 때문에 일단 코드가 정상 동작하니까 OK, 나중에 혼자 살펴봐야지 하고 나중에 이해한 뒤 질문해야 하는 경우도 종종 발생한다.
혹은 이런 기본적인 것도 몰라!?
라는 소리를 듣게 될까 봐 그렇다면 마음에 상처가 생길까 봐 두려워서 미루기도 했다.
중요한 건 서로에 대한 신뢰와 상태를 파악하는 것이 짝코딩의 시작이다. 두려움은 대부분 일어나지 않을 일에 대해서 미리 걱정하는 것 때문에 생기는 것이므로... 일단 모르면 지르고 봐야 한다. 그 후에 일어날 일들은 이후에 생각해도 늦지 않다.
짝코딩과 관련하여 구글링하던 도중 발견한 2010년에 작성된 글에 달린 댓글들이다.
밑줄 쫙 돼지 꼬리 달고 별 다섯개로도 부족한 부분인 것 같다.
상대방이 실수할 때 서로 거리낌 없이 지적해도 괜찮아야 합니다.
신뢰를 바탕으로 한 충돌이 거침없이 일어나야 합니다.
비난하거나 비꼬거나 한 수 가르치겠다는 생각이 아니라 생산적인 충돌이어야 합니다.
이러한 마음가짐을 가지고 있는 당신. 당장이라도 짝코딩을 시작해도 좋다.
짝코딩 선언문이라고 정하고 싶을 정도로 좋은 글이다.
만약 짝코딩 하고 있다면, 진행 하기 전에 한 번씩 가슴속으로 외치고 시작하자.
처음에 짝코딩했던 경험들을 잘 정리해둘걸.. 😇
여러 가지 공유할 방법을 고민하던 중에 개인 블로그에 올리면 아무도 보지 않을 것 같아서 velog에 쓰게 되었네요.
짝코딩을 경험하고 나서 꽤 시간이 지난 뒤에 글을 작성한 터라 기억을 더듬더듬하며 적은터라 많이 부족하겠지만, 제 경험이 다른 분들에게 조금이나마 도움이 되었으면 좋겠습니다.
쓰다 보니 좋았던 점도 많고 아쉬웠던 점도 많네요. 처음 시작할 때 기대 반 두려움 반이었는데, 지금은 다른 사람들에게 권유하고 싶은 생각이 들 정도로 만족하고 있습니다.
많은 개발자분이 건강하고 행복한 짝코딩을 경험하길 바라면서.. 피드백은 언제나 환영입니다!
감사합니다 🤗
생생한 경험담 감사합니다. 좋은 팀 문화가 있는 곳이네요!