페어 프로그래밍 어떻게 하면 잘할 수 있을까?

황준승·2023년 2월 13일
14

본 회고는 첫 페어프로그래밍을 하면서 느꼈던 점과 다음엔 어떻게 페어프로그래밍을 효과적으로 잘할 수 있을까에 대해 생각하며 쓴 글입니다.

🤔 어쩌다 페어 프로그래밍...?

우아한 테크코스 레벨 1 - 자동차 경주 게임을 페어프로그래밍으로 이틀만에 완성시키는 것이 우테코에서 첫번째 미션이었기 때문이다.

우테코 첫 날에, 처음 보는 페어와, 처음 만나는 미션... 많이 두렵기도 했지만 본격적으로 우테코에서 소프트 스킬을 배울 생각에 너무 설레기도 했다.

⛳️ 페어 프로그래밍 진행 방식

페어 프로그래밍에는 여러가지 방식이 있지만 그 중에서 저희는 드라이버 & 네비게이터 방식을 사용했습니다.

페어프로그래밍 여러가지 방식 관련 링크

정석적인 드라이버 & 네비게이터 ( 네비게이터가 시키는 대로 드라이버가 작성하는 방식 )의 경우 시간이 너무 오래 걸리겠다고 판단해서 드라이버가 자신이 생각나는 대로 코딩을 하고 네비게이터가 훈수?를 두는 식으로 진행을 하였습니다.

한 명이서 드라이버의 역할을 너무 오래 해버리면 각자의 참여도가 다르다고 판단하여 드라이버와 네비게이터의 30분에 한 번씩 역할을 돌아가면서 작업하였습니다.

💬 페어 프로그래밍 간단 후기

아래 후기 글은 라잇(페어)와 같이 작성해본 페어프로그래밍 후기 글입니다.

좋았던 점

1) 오타를 쉽게 찾을 수 있다. ㅋㅋㅋㅋㅋ
2) 서로 코드를 작성하고 그 코드에 대한 질문과 대답을 하면서 이유있는 코드를 짤 수 있어서 되게 좋았다.
3) 평소에 사용하지 않았던 메서드나 꿀팁들을 알 수 있었다.
4) 평소하지 않았던 방식에 대해서 알 수 있어서 좋았다.
5) 세세한 걸 상대방과 같이 이야기 할 수 있어서 좋았다.
6) 페어와 금방 친해질 수 있었고 최종 구현했을 때의 성취감은 너무 짜릿했다. 폼 미춌다!!👍👍

안 좋았던 점 (힘들었던 점)

1) 혼자서 짜는 것이 아니라 상대방을 이해하고 설득시키면서 코드를 짜기 때문에 시간이 정말 오래 걸렸다.
2) 서로 대략적으로 알고 있는 부분에 대해서 설명하고 설득하는 부분에서 많은 시간을 소모했다. (ex) MVC 패턴)
3) 머릿 속에 있는 생각들을 말로 표현하기가 힘들었다.
4) 각자 완강하게 이야기했던 부분들을 맞춰가는 것들이 힘들었다. (ex) 코드 스타일 적인 부분)

아쉬웠던 점

1) 문서화의 중요성

  • 코드 스타일이나 객체 설계적인 부분, 기능 구현 목록에 대해서 페어끼리 정확히 합을 맞추고 진행하였으면 좀 더 작업이 수월하였을 거 같앗다.
    개발을 진행하는 과정에서도 서로 생각하는 진행방향이 달라 이를 맞추고 가는게 너무나도 어려웠다ㅜㅜ

2) 비판적인 태도

  • 서로 이유있는 코드를 짜고 싶다보니 계속해서 질문하다보니 진행시간이 너무나 늦춰졌고 그로 인해 체력소모도 너무 심했다.
    나 혼자 코드를 짤 때 저는 자기비판을 많이 하는 편이에요. "더 좋은 코드는 없을까? 이것밖에 안되나??"라는 생각을 하면서 짜는 편인데 그게 페어프로그래밍하면서 이런 생각이 페어에게 많은 영향을 끼치게 되었고 그래서 이런 피드백이 나온거 같아요 ㅜㅜ 페어분께서 칭찬도 많이 해달라고 ㅜㅜ

♻️ 어떻게 하면 페어 프로그래밍을 잘할 수 있을까?

페어 프로그래밍이 끝나고 어떻게 하면 페어 프로그래밍을 할 때 서로 효과적으로 코드를 짜고 빠르게 짤 수 있을까 고민을 하고 우테코 크루원들과 잡답을 하다가

쵸파(프론트 크루)가 5일 만에 기획에서 개발까지 한 테오의 스프린트 경험을 저에게 들려주었습니다.

테오의 스프린트는 테오님이 하시는 구글 스프린트 방식의 팀프로젝트를 의미한다.

테오의 스프린트 관련 링크
구글 스프린트 관련 링크

테오의 스프린트를 요약하자면

  1. 팀원들 각각 자신이 만들고자 하는 앱에 필요한 키워드, 기능들을 생각나는 대로 적는다.
  2. 공통된 키워드, 자주 나온 기능들을 바탕으로 자신이 만들고자 하는 앱에 필요한 기능을 정리하단다. (앱의 목적과 기획이 모두 끝)
  3. 팀원들 각각 자신이 만들고자 하는 앱에 와이어 프레임을 만들어본다.
  4. 팀원들 각자 만든 와이어 프레임에 공통된 컴포넌트와 페이지들을 조합하여 디자인 한다.
  5. 만들어진 와이어 프레임에 1,2에 종합된 기능들과 키워드를 적합한 페이지에 넣는다.
  6. 최종 와이어프레임 완성(기획 끝)

테오의 스프린트를 토대로 페어 프로그래밍을 진행해보면 어떨까라는 생각이 들었다.

💡 내가 생각하는 이상적인 페어 프로그래밍 방식

1. 순서도 그리기

페어들끼리 각자 서로 프로그램이 돌아가는 순서도를 그려본다.
만들어진 순서도들을 조합, 프로젝트를 진행할 최종 순서도를 결정한다.

2. 기능 구현 목록 작성

순서도와 기능 요구사항을 바탕으로 기능 구현 목록들을 작성해본다. 각자 만든 기능 구현 목록들을 조합, 기능 구현 목록을 결정한다.

3. 메서드 정하기

프로그래밍할 때 필요한 메서드(구현할 기능)들을 각자 생각나는 대로 작성해보자. (네이밍이 다를 경우 합의를 보고 불필요한 기능일 경우 삭제)

4. 패턴 정하기

개발 시 필요한 패턴이나 객체 구조 등을 결정하자.
페어 각자 원하는 객체 구조나 패턴을 정하고
비슷한 구조와 객체가 있을 경우 (공통분모)를 통합하는 식으로 객체 구조를 짜자.

( 패턴의 경우 서로 이해하는 바가 다를 수 있으므로 공통 레퍼런스를 같이 공부하고 적용해보자. )

5. 패턴에 메서드 집어넣기

페어와 최종으로 짠 객체 구조(패턴)에 우리가 정한 메서드들을 올바르다고 생각하는 위치에 넣자.

6. 개발 시작

기능 구현 목록, 객체 구조가 모두 완성되었으니 바로 개발을 시작하자.

( 그 전에 각자 코드 스타일이나 컨벤션은 모두 맞추고 가자... )

etc

  1. 상대방이 다 말할 때까지 기다리고 말하기

  2. 이건 아니야, 이건 맞아 이런 태도보다는 이건 어때?, 이건 어떻게 생각해?라고 말하기

  3. 두괄식, 수미상관 구조로 말하기

  • 확실한 정보전달을 위해서 내가 말하고자하는 큰 틀을 먼저 이야기하고 그 다음 세부사항을 전달해 정보전달을 좀 더 잘할 수 있게 노력하자.
  1. 코딩 스타일에 큰 시간을 쏟지말자.
  • 사실 큰 의미없으니 간단하게 이유만 묻고 넘어가자 ㅎㅎ
  1. 비판적인 태도도 중요하지만 칭찬도 많이 해주기 ❤️

끝으로

사실 이번이 제 개발인생에서 첫 협업이자 첫 페어프로그래밍이었습니다. 생각보다 훨씬 재미있었고 페어와 금방 친해질 수 있어서 너무나 좋았습니다.

하지만 그 과정에서 힘든 부분도 있었고 이를 개선해서 재미있게 페어 프로그래밍하고 개발했으면 좋겠다.

profile
다른 사람들이 이해하기 쉽게 기록하고 공유하자!!

6개의 댓글

comment-user-thumbnail
2023년 2월 13일

라잇이라는 분..대단하네요..

1개의 답글
comment-user-thumbnail
2023년 2월 21일

푸만능 멋있네요.. 많이 배워가요!🔥

1개의 답글
comment-user-thumbnail
2023년 4월 16일

저도 우테코와서 처음으로 페어 프로그래밍을 해봤는데 많이 어렵더라구요.. 그래도 덕분에 제 생각을 상대방에게 말하는 방법, 상대방의 말을 경청하는 방법에 대해서 조금씩 배워가는 것 같아 좋은 것 같습니다!

1개의 답글