페어 프로그래밍이 뭐야 ??
7,8주차는 페어를 맺어서 페어프로그래밍으로 진행된다.
페어 프로그래밍이라는 단어도 처음 들어보고
누군가와 같이 프로그래밍을 해본적도 없어서 어떤식으로 진행되는지 굉장히 궁금했다.
페어 프로그래밍은 드라이버와 네비게이터로 나뉘며 네비게이터는 프로그래밍 방향을 제시하고
드라이버는 제시된 방향대로 프로그래밍 하는 것이라고 마스터께서 설명해주셨다.
또 네비게이터는 드라이버를 믿고 세세하게 지시하기보다는 큰틀을 지시하고
드라이버는 네비게이터가 지시한 내용의 완성도를 높이는 것에 초점을 맞추고
네비게이터와 드라이버의 역할은 주기적으로 돌아가면서 바꾸고
한번씩 역할을 바꾸었다면 휴식시간을 가지는 것을 강조하셨다.
페어 프로그래밍 경험하기
페어가 정해진 첫날인 월요일에 마스터께서 페어프로그래밍으로 구현하라고 미션을 주셨다.
둘 다 페어프로그래밍을 해본적이 없어서 우선 마스터께서 말씀하신대로 30분씩 교대로
역할을 바꿔가면서 진행해보기로 했다.
각자 개발한다면 빠르게 끝낼 수 있는 미션이였는데 페어프로그래밍으로 개발하니 생각보다
더욱 많은 시간과 체력이 소모되었다.
하지만 페어프로그래밍을 해보니 앞으로 어떻게 진행해야할지 감이 잡혔다.
페어프로그래밍을 직접 경험해보니 장단점을 명확히 느낄 수 있었다.
페어 룰 정하기
마스터가 제시해주신 미션을 끝내고 우리는 앞으로 남은 기간동안
어떻게 페어프로그래밍을 진행할지 두가지 룰 을 정했다.
첫째 - 우리는 코어타임내에만 개발을 하기
둘 다 챌린지를 통해 코어타임을 넘어가면서 개발한다고 해서 좋은것이 아니라는 것을 경험했고
일상생활과 휴식을 취하는것이 개발에 더 도움이 된다고 생각했기 때문이다.
둘째 - 오프라인으로 개발하기
첫째날에 온라인으로 페어프로그래밍을 했었는데 화면공유를 통해 페어프로그래밍을 진행했었다.
하지만 의도와 다르게 작성한 부분이나 사소한 오류 같은것들을 발견하면 몇번째줄 어느부분이 잘못되었다 라고
말을 해주었는데 바로바로 찾지못하거나 헤메는 경우가 있어서 생각보다 시간과 체력의 소모가 상당했다.
바로 찾지못하면 흐름이 끊기기도 하여 집중력이 떨어지기도 했다. 그래서 우리는 오프라인으로 만나서
페어프로그래밍을 진행하기로 했다.
페어프로그래밍의 장점
첫째 - 상대방의 지식을 배울 수 있다.
나와 페어가 각각 서로 다른 강점이 있었는데 바로 옆에서 그 부분을 배울 수 있었다.
내 페어는 ReatorKit과 Network에 대한 처리를 많이 경험해보아서 API나 DTO를 작성하는 노하우나
이벤트 처리를 위한 단방향 흐름을 빠르게 배울 수 있었다.
반대로 나는 Coordinator패턴과 Enum과 protocol을 활용하여 UseCase를 외부 라이브러리 없이
Clean Architecture로 구성하는법을 알려줄 수 있었다.
그 외에도 사소한 프로그래밍 습관이나 네이밍, 프로젝트 구조등 과 같은 것들이 서로 달랐는데
각자의 장점들만 취합해서 가독성이 더 좋은 코드를 작성할 수 있었다.
또 상대방의 생각을 더 잘 이해할 수 있게 되어서 각자 개발을 하고 난 뒤에 상대방의 코드를 읽을 때 어려움이 하나도 없었다.
둘째 - 아키텍쳐나 비지니스 로직의 구조가 엄청나게 좋아진다.
페어와 둘이서 개발을 하기 때문에 아키텍쳐나 비지니스 로직을 어떻게 할지 서로 아이디어를 주고받다 보면
상대방의 생각을 듣고 더 좋은 방법으로 발전시킬 수 있는 방법들이 정말 많이 떠올랐다.
혼자 개발을 하다보면 거의 첫번째 드는 아이디어로 구현을 하는 경우가 흔한데
페어를 통해 아이디어를 객관적으로 바라 볼 수 있게되고 해당 아이디어에 대한 장단점을 확인할 수 있었다.
페어프로그래밍의 단점
극심한 체력소모
서로가 상대방의 생각을 전부 다 알 수 없기 때문에 상대방이 말한것을 이해하고 구현해야하는데 이게 생각보다
많은 체력과 집중력을 필요로 했다.
주기적으로 역할을 바꾸고 휴식시간을 가졌지만 세네번 역할을 바꾸고 나면 집중하기가 정말 힘들었다.
생각보다 오래걸리는 코딩
혼자 개발하는 것이 아니고 상대방이 설명해주면 구현을 하고 역할이 바뀌면
상대방이 구현하던것을 이어받아서 구현을 하고 상대방이 생각하던것을 이어서 생각해서 설명해줘야 하기 때문에
전체적인 흐름을 계속해서 파악하고 있어야 했다.
혼자 코딩을 하면 흐름을 파악하는 것이 오래걸리지 않는데 페어 프로그래밍은 계속해서 역할을 바꿔가며
코딩을 하고 상대방에게 설명해주고 상대방의 말을 듣고 코딩을 하다보니
내가 코딩을 한 부분이여도 어떤 의도로 구현했는지
또 반대로 내가 설명한 부분이여도 상대방은 왜 이렇게 구현한것인지를 계속해서 상기해야 했기에 시간이 오래걸리게 되었다.
너무나 특별한 경험
사실 페어프로그래밍 첫날에는 서로에게 맞춰가느라 간단한것도 구현하는게 정말 오래걸렸는데
하루하루가 지날수록 점점 서로의 생각을 잘 알게되어서
상대방의 어떤 의도를 가지고 있는지 금방 이해할 수 있어서 구현하는 속도가 점점 빨라져갔다.
그리고 페어가 있다보니 혼자서는 도전하기 힘든 앱 구조들을 도전할 수 있어서
이 부분들을 같이 공부해나가고 적용해나가는 과정에서 많은것들을 배울 수 있어서 좋았다.
모르는 것이 나와도 각자 아는부분이 있어서 이해하는데도 오래걸리지 않았고 적용하는 것도 쉬웠다.
일주일의 시간동안 페어프로그래밍을 해보았는데 나와 페어 모두 일주일 전에 했던 프로젝트와
페어 프로그래밍으로 진행한 지금 프로젝트를 비교해보면 너무나 많은 발전을 했다는게 느껴져서 뿌듯했다.