Pair Programming

2019-06-21
Terminology

안녕하세요. 도미닉입니다.

오늘은 Pair Programming 에 대해서 알아보겠습니다.

Pair Programming 이란?

번역하면 짝코딩입니다.

짝코딩하면 조금 더 익숙한 느낌이 듭니다.

두 사람이 한 짝이 되어 프로그래밍(코딩)을 한다는 뜻입니다.

Pair Programming 로 진행하기 좋은 일은?

  • 두렵거나 지겹거나
  • 내가 못할 거 같은 느낌이 드는 작업
    • Pair Work를 통해 안정감 있게 할 수 있습니다.
  • 하기 귀찮아서 계속 미루는 작업
    • 둘이서 하면 재미있습니다.

즉, Pair Work를 도입하기 전에 두렵거나 지겨운 일이 무엇인지를 파악한 후 거기에 Pair Work를 도입합니다.

Pair Work 진행 방법은?

  1. 같이 Pair Work를 진행할 사람을 고릅니다.
  • 내가 편한 사람
  • 신뢰할 수 있는 사람
  1. 종이 한 장을 꺼냅니다.(바로 일을 시작하는 것이 아닙니다!)
  2. 우리의 목표을 적습니다.
  3. 브레인 스토밍을 통해 그 목표에 맞게 여러 task로 쪼갭니다.
  4. 어떤 task를 먼저 할지, 어떤 식으로 접근할지에 대해 얘기합니다.
  5. 알람을 맞추고 5분 간격으로 ‘운전자-항해사’가 되어 진행합니다.
  6. task를 완료하면 목록에서 지우고 필요한 task를 추가하거나 다시 새로운 task를 선택하여 진행합니다.
  7. 1시간 동안 6~7번 과정을 반복합니다. (1시간에 Pair Work로 6~7개 정도의 task를 수행합니다.)

Pair Programming 에서의 역할?

  • Driver(운전사)

    • 키보드를 잡은 사람
  • Navigator(항해사)

    • 옆에서 보고 있는 사람
  • 항해사

    • 항해사의 입장에서 운전사가 키보드를 치는 표면적인 모습을 보면서 머릿속으로 멍하니 보고만 있지는 않습니다.
    • 항해사는 운전자의 과정을 보면서 ‘추론’ 을 하게 됩니다.
    • 또한 ‘가설’ 이 생깁니다. (저렇게 하려고 지금 이렇게 하는가보다.)
  • 운전사

    • 추론, 가설했던 것을 가지고 직접 표현해봅니다.
    • 운전사는 혼자서 자신의 사고과정을 중얼거리면서 코딩하는 것을 권합니다.
    • 항해사가 그런 정보를 들으면서 추론할 수 있기 때문입니다.
    • 코딩을 하는 중에 의도(설명)를 말하라는 것이 아닙니다!
    • 정말로 혼자 중얼거리면서 생각의 과정을 읊는 것이 좋습니다.

즉, 모두에게 능동적인 학습이 됩니다.

내가 맞는가를 확인하고 직접 맞춰볼 수 있습니다.

상대의 사고 과정을 알 수 있습니다.

Pair Programming 의 효과는?

  1. 결함수가 적어진다
    혼자서 할 때 보다 둘이서 하면 실수가 줄어듭니다. 두명이 동시에 같이 소스를 확인하니까 당연히 실수가 줄겠죠?

  2. 통합 시간이 줄어든다! 둘이서 각자 기능을 만들어서 합치는데 예상치 못하게 시간이 많이 걸릴 수 있습니다. 최악의 상황에서는 서로 만든 것을 합치지 못하고 한 사람이 다시 만들어야 하는 상황이 발생할 수도 있습니다. Pair Programming은 만들 때부터 두 사람이 지식을 공유하면서 만들기 때문에 처음부터 통합을 고려하게 되므로 통합하는데 시간이 적게 걸립니다.

  3. 팀워크를 향상시킨다! 같이 오래 일해도 접촉이 없는 경우가 많습니다. Pair Programming을 통해 서로 간에 신뢰가 생기고 팀워크가 생깁니다. Pair Programming은 서로 피드백을 계속 주고 받기 때문에 협력의 기술이 늘어날 환경을 만듭니다.

Pair Work를 통해 배우는 것

  • 생각하는 과정을 배웁니다!
    • 보통 전문가의 결과(코드)만 배우고 전문가의 과정(사고의 과정)을 배우진 못한다.
    • Pair Work를 통해서는 사고방식을 배울 수 있습니다.
    • 암묵지(tacit knowledge) 를 배울 수 있습니다.
    • 암묵지: 학습과 경험을 통하여 습득함으로써 개인에게 체화되어 있지만 언어나 문자로 표현하기 어려운, 겉으로 드러나지 않는 지식을 의미합니다.
    • Pair Work을 통해 전문가의 암묵지를 배움으로써 전문성의 차이를 만드는 것을 알 수 있습니다.
  • 항해사가 운전사의 생각하는 과정을 보면서 계속해서 ‘추측’, ‘가설’을 하게 되고, 그 추측의 결과물(항해사가 추측한 내용)에 대해서 계속해서 피드백(운전자의 코딩 내용)을 받게 되므로 생각하는 과정을 배우게 되는 것입니다.
  • 나의 전문성을 키우려면 Pair Work를 도입하는 것이 좋습니다.

Pair Programming 의 주의사항은?

1. 컴퓨터가 정확히 가운데 있는 것이 왜 좋은가?

  • “주체 - 객체”의 형식이면 도움이 안됩니다.
    • 예를 들어, 강의 형태
    • 예를 들어, 내가 전문 분야인 코드를 내가 주로 계속 작성하고 옆에선 보기만 하는 형태
  • 서로 수평인 관계를 만들어야 한다. 즉, 관계를 평등하게!
    • 둘이 공평하게 한다는 느낌으로 해야 협력이 잘 일어납니다.
  • 앉아 있는 테이블의 위치에 따라 역학관계에 영향을 받습니다.
    • 따라서 누가 주인인 느낌이 들지 않게 컴퓨터를 정확히 가운데에 두고 앉는 것이 중요합니다.
    • 공동이 주인!

2. 왜 빈번하게 왔다 갔다 하는 것이 좋은가?

  • 데일리 스크럼이란에서 잠깐 언급했던 것처럼 추상과 구상을 왔다 갔다 하는 것이 중요합니다.
    왔다 갔다 하는 과정 안에서 ‘발견’이 있습니다.
    • Pair Programming을 통해서 키보드를 잡으면 문제를 구체적으로 보게 되고, 키보드를 넘기면 문제를 전체적으로 보게 됩니다.
      전체의 그림 확인 -> 구체적으로 진행 -> 다시 전체적인 그림을 확인
    • 위의 과정을 빈번하게 반복하는 것이 바로 피드백을 반복적으로 받는 것이고, 이 전환되는 과정에서 ‘통찰’이 생깁니다.
  • 빈번하게 왔다 갔다 하는 것이 서로에게 학습이 더 빨라집니다.
    • 애자일은 계획을 계속해서 수정해 나가는 것입니다.
    • 상대가 어떻게 하는지 보고 그 의도를 파악하고, 다음엔 내가 진행하면서 학습이 빨라지고, 계획을 빠르게 수정해 나갈 수 있는 것입니다.
  • 알람 을 권합니다.
    • 치던거 다 안쳤어도 시간이 지나면 바로 다른 사람에게 키보드를 넘기고 다른 사람이 진행합니다.

정리

오늘은 Pair Programming 에 대해서 알아봤습니다.

저도 Pair Programming 을 몇번 안해봤었습니다.

“함께 자라기” 책에서 업무의 레벨을 낮추는 방법으로 Pair Programming 을 추천하고 있었습니다.

또한 Pair Programming 을 통해 조금 더 잘하는 사람의 암묵지를 알 수 있습니다.

이러한 암묵지는 설명으로 이해할 수 없는 고수들의 습관을 의미하며 이런 것을 얻을 수 있는 기회는 흔치 않을 것입니다.

만약 실력이 늘고 싶거나 업무의 어려움을 겪고 있으면 나보다 조금 잘하는 분과 Pair Programming 을 한번 해보는 것은 어떨까요?

정말 좋은 자료가 있어서 참고하였습니다.

참고

https://gmlwjd9405.github.io/2018/07/02/agile-pair-programming.html