E D R , A S I H C RSS

Pair Programming For Group Study

선후배끼리 서로 세미나를 할 때 숙제 내주고 검사하는 식의 단선적인 것 말고 좀 더 적극적인 공부가 될 수 있는 방법을 소개합니다. 아주 짧은 시간 안에 많은 양의 학습(여기서 학습을 했다고 하는 것은 뭔가 할 수 있는 능력이 생겼다는 것)을 할 수 있습니다.


PairProgramming이란 ExtremeProgramming이라고 하는 새로운 소프트웨어 개발 방법론의 한가지 기법으로, 두명이 한 컴퓨터를 이용해서 같이 프로그래밍을 하는 것을 말합니다.

일견에는 인력(Man*hour)의 낭비일 것 같지만, 이제까지의 실증적 연구로는 "더 짧은 시간 내에" "더 나은 코드 (에러가 적은)"를 만들어 낼 수 있었습니다.

저는 여기서 PairProgramming의 교육적 효과와 이를 그룹 스터디나 프로젝트 팀 교육에 응용하는 방법을 간략히 서술하겠습니다.

지식관리의 세계적 학자 노나카 이쿠지로 교수는 지식에 형식지와 암묵지가 있다고 합니다. 형식지는 문서화, 규칙화, 수식화된 지식을 말하고, 암묵지는 그렇지 못한 것들을 말합니다. 그런데, 어떤 전문가가 가진 지식이라는 것은 거의 대부분이 암묵지입니다. 이제까지는 형식지의 전달에만 신경을 쏟았지 암묵지는 별 관심을 받지 못했고, 교육 모델에서도 중요하게 다뤄지지 못했습니다. (덕분에 유명한 인간문화재의 대가 끊기는 일이 빈번했죠.)

그런데 이런 암묵지는 전문가와 학생이 같은 공간을 점유하며 함께 일하고 생활하는 속에서 가장 효과적으로 학습됩니다. 도제식 수업(apprenticeship)을 일컫는 것이죠.

기존의 영웅적인 프로그래머들의 일화를 들어보면 자신들이 비약적인 발전을 했던 시기는 대부분 "훌륭한 프로그래머"와 함께 일을 할 수 있었던 때라고 입을 모읍니다.

이 방식을 소프트웨어 개발 업체에서 적용한 것은 Apprenticeship in a Software Studio라는 문서에 잘 나와 있습니다. http://www.rolemodelsoft.com/papers/ApprenticeshipInASoftwareStudio.htm (꼭 읽어보기를 권합니다. 설사 프로그래밍과는 관련없는 사람일지라도)

여기서는 단기간에 이런 PairProgramming을 통해서 팀 내에 지식이 확산되게 하거나, 그룹 스터디에 이용할 수 있는 방법을 보도록 하죠.

우리과 후배들이 하듯 개인별 숙제를 내주고 이를 검사하는 것도 좋지만 이러면 효과적인 학습이 잘 이뤄지지 않습니다. 같은 공간에서 함께 공부할 여유가 있다면 이런 개별 학습보다 공동 학습이 더 효과적입니다.

예를 들어, A, B, C, D, E, F, G, H라는 여덟 명이 한 팀을 이룬다고 가정합시다. 여기서, A와 B가 전문가이고 나머지는 비숙련자라고 하죠.

처음에 짝을 이런 식으로 짓습니다.

~cpp 
  A B C D
  E F G H

이렇게 되면 E와 F는 전문가인 A와 B와 직접 PairProgramming을 하고 나머지 네명은 자기들끼리 PairProgramming을 하게 되죠. 처음 pairing에서 C와 G, D와 H는 태스크를 완수해지 못해도 괜찮습니다 -- 대신 문제 영역을 탐색하는 동안 어느 정도의 학습은 발생하거든요.

이 상태에서는 A와 B는 ExpertRating이 0이고, E와 F는 1이 됩니다. 이 개념은 Erdos라는 수학자가 만든 것인데, Expert 자신은 0이 되고, 그 사람과 한번이라도 pairing을 했으면 1이 됩니다. 그리고, expert와 pairing한 사람과 pairing을 하면 2가 됩니다. expert는 사람들의 ExpertRating을 낮추는 식으로 짝짓기 스케쥴링을 맞춰갑니다. 물론 처음에는 C,D,G,H는 아무 점수도 없죠. 이럴 때는 "Infinite"이라고 합니다.

다음 단계에서는 예컨대,

~cpp 
  A B C D
  G H E F

이렇게 pairing을 할 수 있겠죠. 역시 아까와 동일한 태스크를 수행합니다. 대신 좀전 pairing에서 얻은 지식을 기반으로 좀 더 나은 프로그램을 새로 작성하는 겁니다. 각자 이전 경험이 다르므로(다른 사람과 짝짓기를 했으므로) 둘이 협력하면 서로 가르쳐 주고 배우면서 시너지 효과를 낼 수도 있습니다.

여기서는 각각의 ExpertRating은, C=2, D=2, E=1, F=1, G=1, H=1이 되겠죠. (A,B는 시원source이므로 여전히 0)

이런 식으로 같은 태스크를 짝을 바꿔가며 두 세 번만 반복하게 되면, 매 번 할 때 마다 아까보다는 좀 더 나은 작업을 할 수 있게 되고, "문제 발견 -> 해결"의 학습을 하게 됩니다. 나쁜 코드를 보고, 이게 좋은 코드로 바뀌는 그 과정을 직접 경험하는 것이죠.

--JuNe


너무나 좋은 글을 읽은 것 같습니다. 선배님이 써주신 PairProgramming에 관한 글을 순식간에 읽었습니다 ^^ 이런 방법이 스터디의 방법으로 자리잡는다면 초보자의 실력향상에 엄청난 도움이 되겠군요


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.2980 sec