ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Pair programming
    Daily life/Think 2021. 4. 26. 01:42

    엔코아 영상 처리를 위한 인공지능(머신러닝/AI) SW개발자 양성 과정을 6개월간 수강하면서 정말 좋은 팀원들을 만나서 빠르게 성장할 수 있었습니다. 다양한 개발 방법론으로 프로젝트를 진행했지만 파이널 프로젝트 때 페어 프로그래밍으로 작업을 했었는데 작업의 생산성은 떨어지지만 한 번에 완성도 높은 코드가 나왔던 기억이 있어서 애자일 개발 방법론 중 하나인 페어 프로그래밍을 진행하면서 느낀 장단점에 대해서 그리고 페어 프로그래밍을 성공적으로 하려면 어떻게 하는 게 좋을지에 대해서 공유해봅니다. 

     

    Pair programming

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

    Source:  Tuple’s Pair Programming Guide

    파이널 프로젝트에서 보이스 분석 엔진을 구현할 때 서로 번갈아가면서 실시간으로 대화를 하면서 진행을 하였습니다. 

     

    페어 프로그래밍의 장점

    지식공유

    실제로 가장 좋은 장점으로 느꼈던 부분입니다.  웹서버 개발을 할 당시 웹에 대한 기본적인 이해가 없었는데 페어 덕분에 몰랐던 웹의 기초와 Django웹 프레임워크를 조금 더 빨리 배울 수 있었습니다.  또 페어가 모르는 부분을 제가 알려주면서 저도 다시 한번 공부할 수 있어서 복습의 효과도 있었습니다. 같이 페어 프로그래밍을 진행하면 서로가 다른 분야의 기술을 알고 있을 때 혹은 새로운 멤버가 들어올 때, 팀의 개발환경이나 해당 기술에 대해서 공유해 줄 수 있습니다. 
    이미 개발 문서로 팀의 개발환경이나 개발 스타일 등에 대한 문서를 전달하는 방식보다 빠르게 팀의 지식을 공유하기에 아주 좋은 방법인 것 같습니다. 

     

    심리적 안정감

    개발을 할 때, 간혹 어려운 문제가 있더라도 ‘페어가 있으니 해결할 수 있겠지?’ ‘페어가 해결해 주겠지?’ 등의 심리적으로 기댈 수 있습니다. 실제로 페어가 해결하기를 기다리는 것이 아니라 같이 고민을 하게 되는 것이지요
    생각해보면 새로운 언어나 프레임워크 등을 사용해야 하는 경우에도 혼자서는 중간에 포기하는 경우가 있는데, 페어와 함께 하다 보면 끝까지 도전을 하게 되기도 합니다. 

     

    업무에 대한 집중도 상승

    출근해서 퇴근할 때까지 페어로 짝과 함께 작업을 하다 보니 개발 외적으로 소비되는 시간이 많이 줄어들게 됩니다.
    메신저를 보거나 메일을 확인하는 시간이 페어를 하는 시간에는 불필요한 일이 되기 때문에 오로지 개발에만 집중을 하게 됩니다.
    실제로 페어 프로그래밍을 할 때는 개발에만 집중한 시간이 늘어납니다. 

     

    코드 리뷰 및 개발 방향의 지속

    페어 프로그래밍을 하다 보면 서로가 서로의 코드에 대해서 코드 리뷰를 실시간으로 할 수 있습니다. 타이핑 도중에 발생하는 작은 실수부터 설계 결함까지 소스코드에 대한 피드백을 가장 빠르게 받게 되고, 이를 통해 결함을 줄일 수 있어서 일정한 수준의 코드 품질을 유지할 수 있다. 실제로 저의 경우에는 오타가 많아서 휴먼에러가 많이 발생하는 편인데 페어 프로그래밍을 진행할 때는 페어 덕에 순조롭게 개발이 됐던 것 같습니다. 
    페어로 함께 개발을 하면 실시간 코드 리뷰와 함께 올바르게 설계를 하고 개발의 목적에 맞는 방향으로 가고 있는지에 대해서 팀원 간의 지속적인 대화를 통해서 확인이 가능합니다.

     

    집단적 코드소유

    개발자는 모두 자신의 담당업무가 있고 해당하는 업무에 대해서만 처리가 가능합니다.

    다른 팀원이 해당 업무를 처리하기는 쉽지 않지만 페어를 하게 되면 업무에 대한 담당자가 1명 이상이 되기 때문에, 누구라도 해당 업무를 처리할 수가 있게 됩니다. 그리고 팀으로서 해당 업무만이 아니라 전체 제품에 대해서 함께 고민하고 개발을 할 수 있습니다.

    특정한 팀원 만이 가능한 일이 줄어들게 되고 업무에 대한 병목을 줄일 수 있어 민첩한 대응이 가능합니다. 

     

    피어 리뷰(Peer Review)

    페어 프로그래밍을 진행하면서 모든 팀원들과 같이 일을 하고 많은 대화를 나누게 됨으로써 동료들의 장단점을 더 잘 알게 되고, 그 사람의 성장을 위한 진실된 피드백을 해줄 수 있었습니다. 그 결과 자연스럽게 팀워크도 더 좋아지게 된 계기가 되었습니다. 

     

    페어 프로그래밍의 단점

    생산성 저하

    많은 팀이 페어 프로그래밍을 하지 않는 가장 큰 이유라고 생각된다. 관리자 입장에서는 한 명이 할 일을 두 명이 하고 있으니, 생산성이 반으로 줄어든다고 생각하기 때문일 것입니다.
    확실히 1/2은 아니더라도 분명히 생산성이 두 명이 각자 개발하는 것에 비해서 많이 떨어진다는 지기는 합니다

    오래되긴 했지만 몇몇 논문에서 15% 시간이 더 걸리고, 15% 결함이 줄었다는 연구 결과도 있다고 합니다.

     

    키보드 정복자

    페어 프로그래밍을 하다 보면, 시니어와 주니어 개발자가 같이 하는 경우가 많다고 합니다. 드라이버와 네비게이터의 역할이 물 흐르듯 변경되어야 하지만 시니어 개발자는 5분, 10분 더 키보드를 잡고 있거나 중간에 절대반지처럼 키보드를 납치해서 코드를 완성시키고 싶은 욕망에 사로 잡히게 되고 결국 시니어 개발자는 생산성이 저하되는 것을 참지 못하고 아무 말 없이 코드를 완성해 나가고, 그걸 보고 있는 주니어 개발자는 어떤 기능이 완성되었는지 모르고 코드를 따라가기에 바쁩니다. 
    이렇게 반복되면 점차 대화는 줄어들고 기능은 완성되었지만 주니어 개발자는 더 이상 페어로 작업하는데 대한 흥미를 잃게 되고, 페어를 하지만 방관자가 되어서 개발이 끝나게 된다고 합니다. 제 경우에는 페어와 저와 실력이 비슷해서 이런 경우는 일어나지 않았지만 아무튼 이런 경우도 있다고 합니다. 

     

    감정 문제

    마음이 잘 맞는 사람과 함께 일을 하면 좋겠지만, 개발하는 스타일이 매우 다르거나 생각하는 바가 다른 사람과 함께 작업을 하다 보면 작업이 힘들어질 때가 있습니다. 이런 부분들은 페어 프로그래밍을 하면서 쉽게 바뀌거나 개선되지 않는 문제이기 때문에 해결하기 어려운 문제라고 합니다. 좋은 팀원들과 함께해서 이런 문제는 없었던 것 같네요!!

     

    피로도 상승

    페어를 함께 하루 종일 집중해서 하다 보면 개발에 대한 집중도는 증가하지만 피로도 또한 증가합니다. 하주 종일 끊임없이 대화를 하면서 많은 에너지를 소모하지 않도록 중간중간 쉬는 시간을 가지면서 체력적으로 힘들지 않게 해야 합니다. 저 같은 경우에는 중간에 간식타임을 항상 가지면서 쉬는 시간을 가졌습니다.  필요하다면 페어를 진행하지 않고 각자의 생각을 정리할 시간을 가지고 난 뒤, 서로의 생각을 이야기해보는 시간을 갖는 게 좋습니다.

     

     

    성공적인 페어 프로그래밍을 위해서 

    페어 프로그래밍을 성공적으로 이끌어가기 위한 중요한 방법은 많은 대화와 소통인 것 같습니다. 하나부터 열 가지 같이 고민하고 항상 화이트보드는 한 개에서 하되 팬은 두 명 다 잡으면서 서로의 의견을 적으면서 하는 것을 추천합니다. 그리고 머릿속에 있는 생각을 가감 없이 공유하고 꾸준히 생각해야 합니다. 생각이 멈추면 대화도 멈추기 때문에 성공적인 페어 프로그래밍을 위해서는 끊임없이 더 나은 방법을 위해 생각하고 소통해야 합니다 같이 빠르게 성장할 수 있는 방법을 경험할 수 있어서 정말 좋은 시간이 였던것 같습니다. 

     

Designed by Tistory.