2022 Masters Course/Web Backend Course

2022 마스터즈 코스(백엔드) 33일차 회고(2022. 2. 23.) - "페어 프로그래밍 vs 개인 프로그래밍"

ikjo 2022. 2. 23. 21:40

해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)

 

수강 회고

오늘은 페어 프로그래밍 미션을 시작한지 3일차가 되는 날이다. 페어와 나는 미션 1일차 시 "비효율적"이더라도 설계, 구현 등 하나하나 협의를 통해 결정해가면서 "함께" 프로그래밍을 하기로 했다. 즉, 나는 이번 미션에서의 마음가짐은 빠른 작업(프로그래밍) 보다는 팀원과 "함께" 프로그래밍을 구현하는 것 자체에 초점을 맞추기로 했었다. 이는 의사 결정을 함에 있어 합의를 하는 시간이 빈번하게 일어나기에 프로그램을 개발하는데 매우 오래 걸리고 투자 시간 대비 많은 성과를 낼 수 없는 단점이 있었다.

 

하지만 프로그램을 구현함에 있어서 누군가가(페어와 나 모두) 어떤 부분에 있어서 소외되지 않고 "함께" 결과물을 만들어냈다는 희열감을 느낄 수 있었다. 아울러 효율성있는 작업을 하지는 못했을 지라도 페어와의 팀워크(일종의 협동심)를 기를 수 있었고 무엇보다 함께 프로그램을 구현할 수 있다는 페어에 대한 신뢰 관계를 쌓을 수 있었다는 점이 가장 많이 남았던 것 같다.

 

만일 나와 페어 중에서 한 사람이 주도하여 프로그래밍을 하고 나머지 한 사람은 그 프로그래밍에 소외되는 일이 있었다면 페어와의 팀워크를 기를 수 없었을 것이라고 생각한다. 하지만 이러한 팀워크 활동 시간이 쌓이고 쌓인다면 "아직은" 비효율적인 페어 프로그래밍이 "지금은" 효율적인 혼자서 프로그래밍 하는 것 보다 더 나은 성과를 낼 수 있을 것이라고 생각한다. 

 

아직 나와 페어의 현재 페어 프로그래밍은 명목상으로는 네비게이터와 드라이버 역할이 구분되어있으나 실상은 역할이 모호하고 양측 모두 드라이버 역할을 하고 있는 실정이다. 하지만 이러한 페어 프로그래밍(함께하는 프로그래밍) 경험이 많아지면 많아질수록 각자가 잘하는 부분을 알아가게 되고 이는 각자의 역할과 책임을 보다 명확하게 해줄 것이라고 생각한다. 실제 모든 조직(기업 등)에서는 예산, 회계, 계약, 홍보, 사업, 운영 등 각 팀마다의 역할과 책임이 있고 이를 위주로 업무를 수행하고 있다는 것이 앞서 생각한 것에 대한 방증이다.

 

물론 이제 페어 프로그래밍 미션을 한지 3일이 지났는데 고작 이 3일만에 충분한 팀워크를 기를 수 있다고는 생각하지 않는다. 아울러 이번 페어 프로그래밍 미션은 1주일이라는 시간 동안만 주어지는 것이기 때문에 애초에 페어와 팀워크를 기르기에는 충분하지 않을지도 모른다. 하지만 짧은 시간이었지만 이번 페어 프로그래밍 미션을 하면서 "누군가와 협력한다는 것은 무엇을 의미하는 것일까?"라는 생각에 대해 고찰해볼 수 있었고 "협력"에 임할 때의 마음가짐과 태도(배려, 존중, 인내 등) 그리고 "협력 경험"을 얻을 수 있었다.

 

 

학습 회고

  • 자바 프로그래밍(클린 코드) 관련 미션 과제 풀이(페어 프로그래밍)
    • 페어(선을로님)와 디스코드에서 학습

 

페어이신 선을로님과 페어 프로그래밍을 할 때는 나름의 하루 스케줄이 있다. 우선 각자 소그룹 스크럼(10:00 ~ 10:30)이 끝나고 10:30분에 만나 금일 주어진 미션 과제는 무엇이고 어제까지 했었던 과제의 현재 상태를 점검한 후 오늘 해야할 부분들을 확인한다.

 

이후 프로그래밍을 진행하는데 우리 팀 같은 경우에는 하루를 기준으로 네베게이터와 드라이버 역할을 교대로 수행한다. 특정 팀에서는 30분 단위, 1시간 단위로 번갈아 가면서 하는 경우도 있었는데 우리 팀의 경우에는 각각의 역할에 충분한 적응을 하기 위해서는 하루라는 시간을 온전히 투자하는 것이 맞다고 생각했기 때문이다.

 

물론 지난 1일차, 2일차에서의 실상은 둘 다 드라이버와 네비게이터 역할이 섞인 중구난방의 역할 형태로 페어 프로그래밍이 진행되었던 것 같다. 1일차 때 내게 주어진 역할은 네비게이터 였으나, 드라이버가 로직을 구현하는데 네비게이터인 내가 그 로직을 어떻게 잘 짤 수 있을지 고민하고 있었다. 반대로 2일차 때 내게 주어진 역할은 드라이버 였으나, 로직을 구현하면서도 다음에는 무엇을 할지 고민하고 있었다.

 

하지만 오늘은 내게 주어진 역할에 좀 더 집중하고자 노력했었다. 네비게이터 였던 나는 먼저 드라이버에게 어떤 작업 요청을 한 후에 드라이버가 작성하고 있는 로직에 집중하지 않고 다음 작업(Next Step)에 대해 생각하고 있었다. 또한 다시 다음에 어떤 작업을 요청할 때는 그 작업뿐만 아니라 그 다음 작업까지 생각하면서 작업을 요청했었다. 즉, 드라이버가 로직을 구현하는 것을 온전히 믿고 네비게이터인 나는 프로그램의 클래스 구조와 이벤트 흐름도에 집중하고자 했었다. 물론 드라이버가 로직을 구현함에 있어서 아에 개입을 하지 않은 건 아니었지만 비중을 큰 그림을 보는데 많이 두었다.

 

이후 페어 프로그래밍을 모두 마친 후에는 각자 오늘 느꼈었던 점 예를 들어, 행여나 자신이 말 실수를 했는지, 주어진 역할을 수행하는 데 있어 어떤 어려움이 있었는지, 어떤 점이 개선되었으면 좋은지 등을 나누는 시간을 가졌다. 이는 오늘 하루 있었던 일을 회고하고 보다 더 나은 페어 프로그래밍을 하는데 도움을 주었다.

 

HTTP에 대한 표준 규격이 나와 있는 RFC처럼, Java API에 대한 표준 규격이 나와 있는 Oracle Java Docs처럼, 페어 프로그래밍 시 네비게이터와 드라이버의 역할과 책임에 대한 Practice는 있어도 Standard는 없다. 즉, 각각의 팀(페어)별로 역할과 책임은 모두 다를 수 있다. 이는 오직 팀원 간의 "협의와 약속"이다. 이러한 "협의와 약속"은 대화로 결정될 수 있으며 서로에 대한 "배려"와 "이해"가 바탕에 있어야 원활하게 결정될 수 있을 것이다. 따라서 페어 프로그래밍 시 중요한 것은 무엇보다 "팀원 간의 의사소통(커뮤니케이션)"이라는 생각이 들었다.

 

 

좋았던 점

  • 페어이신 선을로님과 대화를 나누며 페어 프로그래밍이란 무엇인가에 대해 조금은 알게 된 것 같습니다.

 

 

아쉬웠던 점

  • 어제 오늘 수면시간이 부족해 학습에 집중하기가 힘들었습니다. 💦 오늘 하루는 충분한 휴식을 취해야겠습니다.