Programming Language/Language

About Pair Programming

HJChung 2020. 4. 10. 02:35

1. Pair Programming이란 

페어 프로그래밍이란 애자일 개발 방법론 중의 하나로 하나의 개발 가능한 PC 에서 두 명의 개발자가 함께 작업하는 것을 말한다. 네비게이터(navigator)가 전략을 제시하고 드라이버(driver)가 실제 코드를 작성하며, 이 열할을 각자 번갈아가며 수행한다. 짝 프로그래밍이라고도 한다.

Pair programming is an agile software development technique in which two programmers work together at one workstation. One, the driver, writes code while the other, the observer or navigator, reviews each line of code as it is typed in. The two programmers switch roles frequently. - wikipedia -

 

페어 프로그래밍에는 Navigatior와 Driver로 역할을 나누어 진행할 수도 있고, 이 역할은 적절한 비율로 변경해가며 진행하면 더욱 풍성한 경험이 된다. 

 

1) Navigator란, 

문제 해결 방법을 논리적으로 생각하고, 그 과정을 상대에게 말로 설명하는 역할이다. 이때 코드를 전부 보여주거나(말해주거나), 직접 키보드를 잡아서는 안된다. 이 역할의 핵심은 '어떤 식으로 문제를 해결할 수 있는지 명확히 설명하는 것'이다. 

2) Driver란, 

Navigator가 설명한 논리적 방식대로 실제 코드를 작성하는 역할을 한다. 이때 주의하여야 하는 것은 '수동적으로  Navigator가 말해주는 것만 정답이라고 생각하지 않는 것이다.  먼저  Navigator의 가이드를 이해하려고 노력하고, 그 다음에는 더 나은 방법이 없을까 비판적으로 사고하며, 자유롭게 의견을 피력하는 것이 좋다. 

 

2. Pair Programming 경험

나의 첫 페어 프로그래밍은 오프라인 이었다. 사내 개발자 분께 평소 궁금했던 문제를 질문하면서 답을 찾아가는 법, 콘솔 창 이용법 등을  생생하고 매우 순조로운 페어 프로그래밍이 진행되었다.  오프라인 페어 프로그래밍에 아쉬운 점이 있었다면, 내가 Driver의 역할에 충실하기가 어려워지고, 그 당시의 모든 비언어적표현(눈빛, 손짓, 표정) 등을 통해 대충 짐작하고, 70%정도만 이해하고 넘어가는 상황이 반복된다는 점이었다.

 

이후 진행한 두 번의 온라인 페어 프로그래밍에서는 처음에 가졌던 부담감과 달리 

너무나 편안한 분위기 속에서

그 어떠한 편견도 없이

오로지 프로그래밍에만 집중 할 수 있고

페어분과 시간만 맞다면 공간 제약이 없고

링크를 통한 수많은 학습자료의 손쉬운 공유

자연스럽게 기록에 남는 고민 흔적

들이 있었다. 

 

그리고 회사에서 바라보기만 했던 개발자 분들의 코드리뷰, 개발이슈 공유 등의 시간을 맛보기로(?) 경험할 수 있었던 것 같아 뿌듯하기도 했다. 

 

처음하는 페어 프로그래밍은 정말 부담스럽고 어렵고 걱정되지만 막상 해보면 정말 재밌고, 유익하고, 몰입해서 많은 것을 배울 수 있는 과정이다. 무엇이든 '어럽고/쉽고'의 차이가 아니라 '익숙하지 않고/익숙하고'의 이슈인 것 같다. 

 

3. Pair Programming의 장단점

1) 장점

- 오늘 개발자 분과 나눈 대화에서 너무나 공감됐던 말이 있다. 새로운 것은 계속 나오는데, 익숙한 것에 관성처럼 이끌리다보면 처음엔 괜찮겠지 아직은 귀찮아라고 미루다가 언젠간 터지는 날이 있다고.. 페어 프로그래밍을 하면 익숙한(그리고 더러운) 내 코드, 내 알고리즘 설계만 전부이게 된다.  페어를 하게되면 이전 방식이 아닌 새롭고 더 개선 된 방식에 대해 함께 고민하고, 배우고, 시도하게 된다. 

 

- Navigator는 절대 정답을 알려주지 않는다. 티칭이 아니라 코칭을 한다고 생각한다. 그래서 Driver로서의 나는 

1. 새로운 문제 접근법을 배우고,

2. 이를 문제에게 적용하려고 노력하면서 효율적으로 문제 해결 능력을 기르게 되고,

3. 자유롭게 질문하면서 비판적인 사고력을 기를 수 있다. 

 

- Navigator로서의 나는 

1. 논리적으로 생각하는 방법을 연습하고

2. 생각을 말로 설명하여 구체화시키는 방법을 연습할 수 있다. 이것이 곧 커뮤니케이션 능력으로 이어진다.

 

2) 단점

- 시간을 맞추기가 쉽지 않다. 

- 역할이 적절한 비율로 변경해가며 진행되지 않을 경우, 페어 프로그래밍의 장점은 서서히 사라진다. 

- 페어 프로그래밍의 단점은 대부분 '배려심 부족' 등 페어 프로그래밍에 필요한 가이드라인을 따르지 않았을 때 발생하는 것 같다. 즉,  내가 먼저 바른 태도를 가지고 준비된 사람이 되면 단점의 반은 없는 것과 마찬가지라는 것이다. 

 

4. Pair Programming을 잘하기 위해서 

1) 태도

이것들은 학습 중 배운 페어 프로그래밍시 주의할 점이다. 

- 멍 때리지 않는다.

- 상대의 말에 끝까지 경청한다.

- 모르는 것은 솔직하게 이야기한다.

- 나보다 빠르거나, 느린 페어를 배려한다.

- 아는 것을 정확하게 공유한다.

- 잘 모르는 것은 함께 찾아본다.

 

2) 코드 리뷰를 잘하면/잘받으면..

출처: https://github.com/ridi/style-guide/blob/master/Review.md

3) 준비성

함께 페어를 진행할 주제에 대해서 얼마나 사전 준비를 하느냐에 따라서 너무나 많은 것들이 달라진다. 

 

Reference

https://gmlwjd9405.github.io/2018/07/02/agile-pair-programming.html