[우아한테크코스] 페어프로그래밍 회고
페어프로그래밍 회고
우아한테크코스에서는 기본적으로 이러한 페어 프로그래밍을 실천한다. 처음에 매번 자주 페어가 바뀌는 것에 의문을 품었지만 사실을 페어프로그래밍 아이디어가 모든 구성원들과 동적으로 결성되는 방법론이라는 것을 깨닫고 그 이유를 알게 되었다.
페어프로그래밍이 뭐지?
페어 프로그래밍? "오 이런 세상에, 이런거면 너무 싫어"
페어 프로그래밍이 무엇인지 알아보자. 원론적인 내용은 Software Engineering 8th Edition의 페어 프로그래밍 챕터를 읽고 정리하였다.
소프트웨어 개발 방법론인 애자일 개발 방법론에서 익스트림 프로그래밍 (XP: extreme programming)이라는 것이 있다. 이 접근법은 반복적인 개발과 같이 인식된 좋은 실무관행과 고객의 참여를 극한 수준까지 밀고 나가는 방법이다.
그 익스트림 프로그래밍 실무 관행 중 페어 프로그래밍 이라는 것을 다루어 보려고 한다. 일명 짝 프로그래밍이라고 불리는 이것은 개발자들이 짝을 이루어작업을 하고 각자의 작업을 점검하고 항상 좋은 작업을 하도록 지원하는 것이다.
짝을 이룬 프로그래머는 실제로 동일한 워크스테이션에 함께 앉아서 소프트웨어를 개발한다. 동일한 사람들이 항상 짝을 이루어 개발 작업을 함께 하는 것은 아니다. 그보다는 개발 프로세스 동안 팀의 모든 구성원들이 다른 사람과 짝을 이루어 작업을 할 수 있도록 동적으로 결성되는 것이 페어 프로그래밍의 아이디어이다.
아주 이상적인 모습이죠?
페어 프로그래밍의 장점
1. 페어 프로그래밍은 시스템에 관한 공동 소유권과 공동 책임을 지는 아이디어를 지원한다. 이것은 소프트웨어가 전체적으로 팀이 소유권을 갖고 개인은 코드의 문제점에 대한 책임을 지지 않는 웨인버그(Weinberg, 1971)의 이타적 프로그래밍 (egoless programming)의 아이디어를 반영한다. 그 대신 팀은 이 문제점들을 해결하기 위한 공동의 책임을 진다.
2. 코드의 각 라인을 최소한 두 사람이 살표보기 떄문에 페어 프로그래밍은 비정형적인 검토 프로세스로 동작한다. 코드 검사와 코드 검토는 높은 비율의 소프트웨어 오류를 발견하는데 매우 성공적이다. 그러나 코드 검사와 코드 검토를 진행하는데 시간이 소모되어 일반적으로 개발 프로세스가 지연된다. 하지만 정형화된 프로그램 검사보다는 훨신 비용이 저렴한 검사 프로세스이다.
3. 페어 프로그래밍은 소프트웨어 개선 프로세스인 리팩토링을 지원한다. XP의 원리는 소프트웨어는 지속적으로 리팩토링 되어야 한다는 점이다. 페어 프로그래밍과 공동 소유권이 사용되는 곳에서 다른 사람들은 리팩토링을 통해 즉각적인 이익을 얻을 수 있다.
페어 프로그래밍이 과연 일의 효율성을 높이는가?
두 사람이 개별적으로 작업을 하는 것에 비해 페어프로그래밍은 그것의 절반 정도의 코드를 작성할 것으로 예상된다. 그러나 XP 개발에 관한 연구 의하면 이것이 입증되지 않았다. 페어 프로그래밍의 개발 생산성은 두 사람이 독립적으로 작업하는 것에 필적할 만한 것으로 보인다. 그 이유는 짝이 개발 전에 소프트웨어에 관해 토론하여 잘못된 시작과 재작업을 줄이고, 시험 프로세스 동안 발견된 버스를 수정하는데 시간이 덜 소모되기 때문이다.
페어 프로그래밍에서 해야될 것과 하지 말아야 할 것들
내가 페어프로그래밍을 해보면서 느낀 점 중 하지 말아야 할 것들을 정리해본다.
딴 짓하지 않기
페어가 일을 하고 있는데 다른 페어가 딴 짓을 하면 안 된다. 힘들면 쉬었다가 하자.
눈치주기 않기
정해진 시간동안 인내심 있게 기다려본다. 열심히 작업중인 페어에게 눈치를 주지 않는다.
편한 자리에서 하기
경험해본 결과 생각보다 에너지 소모가 큰 활동인것 같다. 그럴수록 앉아 있는 자리가 편해야 하는 것 같다.
그렇다고 이렇게 편해지면 안돼요
감정적으로 하지 않기
무엇보다 중요한 것은 감정적으로 하면 안된다는 것!
회고
지난 3주간 짝 프로그래밍에 대한 회고
첫 째주와 둘 째주는 짝 프로그래밍에 익숙해지는 기간 이었다. 우테코에와서 처음 진행해본 액티비티이기 때문에 처음에는 조금 서투른 부분이 있었다. 1,2 주 동안 의견제시와 의견수용을 어떻게 해야 짝 프로그래밍을 원활히 할 수 있을지 시도해보았다. 무조건 내 생각만 옳다고 주장하는것을 지양하고 무조건 상대방이 옳다고 생각하는 것도 지양해야 한다. 이 부분이 사실 굉장히 어려운 부분이기도 하다. 개인 차가 있기 때문에 매번 상대방에 맞춰서 의견제시, 수용 과정을 바꾸게 되면 내가 매우 힘들어진다. 1,2주간 내린 결론은 상대방을 존중하면서 자신의 스타일대로 하는 것이다. 서로 맞춰가는 과정에서 성숙해질 것이다.
결론: 제일 중요한 것은 바로 존중
내 생각이 중요한 만큼 상대방 생각도 중요하다는 것을 알아야 한다. 존중받고 싶으면 먼저 존중을 해보자. 그리고 개인의 목표가 아닌 팀의 목표 달성을 위한 행동인 만큼 책임감을 가지자.