회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
AWS 이용 중이라면 최대 700만 원 지원받으세요
개발자로 살다 보면 한 번쯤 ‘페어 프로그래밍’을 하게 된다. 페어 프로그래밍은 두 사람이 파트너가 되어 함께 의논하면서 코드를 작성하는 활동이다. 계속 대화하는 것도 쉽지 않은 일인데 말하면서 코드 작성까지 해야 하는 건 분명 체력적, 정신적으로 에너지가 많이 쓰이는 일이다.
회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!
확인
개발자로 살다 보면 한 번쯤 ‘페어 프로그래밍’을 하게 된다. 페어 프로그래밍은 두 사람이 파트너가 되어 함께 의논하면서 코드를 작성하는 활동이다. 계속 대화하는 것도 쉽지 않은 일인데 말하면서 코드 작성까지 해야 하는 건 분명 체력적, 정신적으로 에너지가 많이 쓰이는 일이다.
그런데 페어 프로그래밍에 대해 검색하면 장점을 얘기하는 사람들이 정말 많다. 실제로 만나본 개발자 중에서도 페어 프로그래밍을 싫다고 하는 사람을 보지 못했다. 오히려, 어렵지만 꼭 해야 하는 일이라고 다들 말했다. 도대체 페어 프로그래밍이 무엇이길래, 그리고 어떤 장점이 있기에 좋아하는 걸까?
페어 프로그래밍은 애자일 개발 방법론 중의 하나로 하나의 컴퓨터에서 두 사람의 프로그래머가 작업하는 방법이다. 한 사람은 내비게이터가 되어 프로그래밍의 방향을 설명하고, 다른 한 사람은 드라이버가 되어 지시대로 코드를 작성한다. 그리고 보통 5분에서 10분 간격으로 역할을 바꾼다. 코드를 완성하는 것이 중요하지만, 대화를 많이 해서 서로의 지식을 공유하는 것도 매우 중요한 목적이다. 특히 자신이 아는 것을 상대에게 잘 설명하기 위해, 그리고 상대방은 설명을 이해하기 위해 높은 집중력을 발휘해야 한다.
이 집중력이 무의식적인 코딩을 방지해준다. 숙련된 개발자가 되기 위해서는 반복을 통해 작업에 능숙해져야 하는데, 혼자서 반복을 하다 보면 자칫 나쁜 습관이 생길 수 있다. 하지만 페어 프로그래밍을 하면 코드를 작성한 의도를 상대방에게 설명하면서 코딩을 하게 되기 때문에 맹점을 줄이고 나쁜 습관을 교정할 수 있다.
피드백이 오고 간다는 점에서 페어 프로그래밍은 코드리뷰와 비슷한 면이 있다. 하지만 코드의 결과에 대해 피드백을 하는 코드리뷰와 달리 페어 프로그래밍에서는 함께 시행착오를 겪고 서로의 사고 과정을 실시간으로 지켜보며 조언해줄 수 있다는 차이가 있다.
가장 이상적인 페어는 실력이 비슷한 페어이다. 하지만 짝을 이룬 두 사람이 실력 차이가 나더라도 한사람이 일방적으로 강의하는 방식은 권장되지 않는다. 가능한 한 번갈아 주도권을 가지고 눈높이를 맞추려고 노력하는 과정에서 두 사람 모두에게 의미 있는 성장이 이루어진다. 물론 그만큼 이 활동은 두 사람 모두에게 굉장히 어렵다.
개발하다 보면 가끔 실력이 도약하는 순간이 있다. 되돌아보면 성장의 순간에는 항상 페어 프로그래밍을 열심히 하고 있었다. 그중 가장 기억에 남는 것은 입사 후 맨 처음 경험했던 페어 프로그래밍이다. 중간중간 다소 악몽 같은(?) 순간들도 있었지만, 페어 분의 좋은 개발습관을 배울 수 있는 경험이었다. 그 덕분에 훈련이 된 좋은 습관에는 다음과 같은 것들이 있다.
앞서 말했듯 페어 프로그래밍은 내비게이터와 드라이버 역할이 있고, 두 명이 이를 번갈아 수행한다. 실력이 상대적으로 낮은 입장에서는 지시를 수행하는 드라이버일 때보다 주도권을 잡는 내비게이터일 때가 훨씬 곤혹스럽다.
사실 실력 차이가 있어도 페어 프로그래밍이라는 활동에 익숙해지면 이를 크게 의식하지 않고 자유롭게 대화할 수 있다. 하지만 아직 익숙하지 않을 때는 실력 차이를 의식하고 주눅이 들기 때문에 소통에 문제가 생긴다. ‘오답을 말하면 안 된다’는 강박과 ‘정답을 모른다’는 답답함이 어우러져 말문이 막히는 것이다. 여기에서 오는 부담감을 이겨내고 솔직하게 무엇을 모르는지, 어떤 설명이 더 필요한지 요청할 수 있다면 비로소 순조로운 협업이 가능해진다.
상대적으로 실력이 좋은 입장이더라도 페어 프로그래밍에서 얻을 수 있는 것이 있다. 일단 일을 계속 같이 할 팀 동료라면 코딩 스타일을 빨리 맞출수록 좋기 때문에 큰 도움이 된다. 이때 같이 공유한 암묵적인 지식이 함께 일하면서 논의할 사항들을 줄여준다. 또한 페어에게 설명하는 과정을 통해 본인의 지식을 점검하는 계기로 삼을 수 있다. 상대가 쉽게 이해할 수 있도록 자신의 지식을 다시 한번 살펴보기 때문이다.
가령 최근에 스터디에서 진행한 페어 프로그래밍에서는 개발을 시작한지 얼마되지 않은 분과 페어로 만났다. 상대보다 경험이 조금 더 있는 상태에서 페어 프로그래밍을 하는 경험은 굉장히 생소했다. 당시 인풋과 버튼에 이벤트 리스너를 등록시키는 것이 핵심이었는데, 설명하기 위해 생각을 정리하는 과정에서 html 태그들의 속성과 DOM트리가 그려지는 과정에 대해 복기하면서 조금 더 명확하게 알 수 있는 계기가 되었다. 또한 이러한 지식적인 측면 외에도 다음과 같은 태도를 훈련할 수 있었다.
업무에 조금 여유 있는 동료라면 괜찮을지 몰라도, 개발에 한창 바쁜 동료에게 페어 역할을 부탁하는 일은 조금 망설여지기 마련이다. 한창 몰입하고 있을 때 말을 걸기에도 미안하고, 페어 프로그래밍 자체가 시간이 오래 걸리는 활동이라서 실제로 동료의 시간을 길게 뺏을 수도 있기 때문이다. 그러므로 개발 이슈에 대응해 즉흥적으로 요청하는 것보다 페어 프로그래밍을 위해 미리 일정을 조정하고 진행하는 편이 좋다. 가령 프로젝트를 시작할 때, 한 주의 시작, 일과를 시작하는 오전 등 여유 있게 대화를 나눌 수 있는 시간을 정해 미리 상대와 약속을 잡는 것이다.
또한 페어 프로그래밍은 프로젝트 초반에 진행하면 좋다. 코드 설계 단계는 전체 기간 중 가장 여유로운 시간이기도 하고, 이때 미리 개발 스타일을 맞춰 두면 나중에 작업 방향이 충돌할 일도 적어진다. 무엇보다 두 사람이 함께 설계를 위해 이야기를 나누다 보면 설계할 때 미처 놓치는 부분을 발견하고 보완해줄 수 있다. 이는 결과적으로 버그 발생 가능성을 낮추어 준다.
한창 기능을 개발하는 도중 막히는 경우에도 페어 프로그래밍을 통해 구체적인 도움을 받을 수 있다. 문제 상황을 말로만 전달하고 조언을 구하면 해결책이 추상적일 수밖에 없다. 그리고 조언을 잘못 이해하고 다른 방향으로 작업할 위험도 있다. 이럴 때 페어가 되어 같이 코딩하면 문제를 면밀하게 살펴볼 수 있고, 혹시 연관된 다른 문제가 있는지 함께 살펴볼 수도 있다. 이렇게 찾아낸 해결책은 매우 구체적이고, 잠재적인 이슈까지 해결해줄 수 있다.
개발은 혼자서 하는 것이 아니다. 여기에는 작업 범위를 분담한다는 의미도 있지만, 한 줄의 코드가 나 혼자가 아닌 팀 전체의 결정이라는 의미도 담겨있다. 아무리 혼자 일을 잘하는 개발자라도 동료가 만든 모듈을 사용하고, 동료의 코드를 리뷰하는 이상 은연 중에 영향을 받기 마련이다. 따라서 본인이 만든 기능도 결코 혼자만의 지식이라고 볼 수 없다. 무엇보다 팀이 되어 일하면 혼자서 모든 일을 할 때보다 효율도 늘어나고 실수도 줄어든다는 장점이 있다. 그렇기 때문에 같은 팀 동료에게 코드 리뷰나 페어 프로그래밍을 (상황과 타이밍에 맞춰) 요청하는 것은 미안한 일이 아니다.
페어 프로그래밍은 힘든 점도 있지만 하다 보면 재미도 있다. 동료와 케미가 잘 맞는다면 페어 프로그래밍 시간은 일상적인 대화보다 훨씬 흥미롭고 밀도 있는 시간이 된다. 공통의 관심사와 목적을 가지고 아이디어를 제안하고, 같이 만들어보고, 테스트하는 일은 꽤나 재미있다. 여기에서 다진 팀워크와 공유한 지식은 훗날 팀의 소중한 자산이 된다.
때로는 페어 프로그래밍이 솔로 프로그래밍보다 느리고 답답하게 느껴질 수 있다. 하지만 프로젝트를 함께 하는 동료에게 답답함을 느끼는 것은 피할 수 있는 것이 아니라 한번은 극복해야 하는 문제이다. 따라서 빨리 해결하는 편이 낫다. 답답함은 주로 프로젝트에 대한 의견이나 지식수준이 서로 다른 데서 오는데, 이를 묵혀 두고 각자 작업하면 어느 시점에는 반드시 충돌이 발생하기 때문이다. 대화나 회의를 통해 논의하는 것도 좋지만, 페어 프로그래밍을 통해 개발 시야를 일치하는 것이 큰 도움이 된다.
페어 프로그래밍의 효과를 가장 크게 누리려면 정답을 모른다고 초조해 하지 않고, 정답을 안다고 빨리 진행하려고 하지 말아야 한다. 즉, 페이스 조절을 잘 해야 한다. 둘 중 한 사람이라도 침착함을 잃는 순간 페어 프로그래밍은 일방적이고 지루한 시간이 된다. 이해가 되지 않는다면 이해하기 위해 많이 질문해야 하고, 상대에게 설명하는 것이 어렵다면 본인의 생각이 논리적으로 정돈되어 있는지 스스로 파악해야 한다. 이런 태도를 가지고 임할 때, 페어 프로그래밍을 통해 실력도 팀워크도 한 단계 도약할 수 있다.
요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.