E D R , A S I H C RSS

Pair Programming토론

from 동문서버 위키.

PairProgramming 자체에 대해 조금 설명을 드리자면, 우선 이건 Driver와 Observer로 역할 분담이 되는데 정해진 게 아니고, 계속 바뀝니다. 운전하는 사람이 있고, 옆에서 코치하는 사람이 있는 거죠. 실제로 타이핑을 하는 사람은 타이핑이란 작업에 몰두하느라 지력을 좀 빼앗깁니다. 대신 이걸 관찰하는 사람은 여유가 있으므로 이것 저것 객관적인 코치를 해줄 가능성이 높죠. 그런데, 예를 들어, Driver가 코딩을 하다가 Observer가 "그게 아냐 이렇게 하면 더 좋아"하면서 설명을 하는데 잘 이해를 못하겠다 싶으면 키보드를 밀어주며 "니가 해봐"라고 말합니다. 역할 바꾸기가 되는 거죠. 이게 아니더라도, 가능하면 두 사람이 지속적으로 역할 바꾸기를 하면 좋습니다. (ExtremeProgramming에선 타이머를 이용해서 정해진 시간이 되면 역할 바꾸기를 하는 예도 있습니다) 뭐 어찌되었건, 피곤하다 싶거나 지금 머리가 잘 안돌아간다 싶으면 옆 사람에게 키보드를 넘기면 되죠.

그리고 전문가와 비숙련자가 pairing을 해도, 전문가한테도 도움이 많이 됩니다. 예를 들어 변수이름 같은 것은 전문가도 실수할 수 있죠. 이걸 지켜보던 비숙련자가, "어라.. 아까는 PrinterStatus라고 치더니 지금은 PrintersStatus라고 치시네요..."라고 하면, '아차!'하는 거죠. 또 비숙련자가 코드를 이해를 못해서 설명을 해주게 되면, 전문가 스스로도 많은 공부를 하게 되고, 설령 그 사람이 그 설명을 이해를 못해도, "아 이런 부분은 이해를 잘 못하는구나. 앞으로 이건 더 쉽게 설명해야겠군"하고 잘못을 스스로에게 구하면서, 또 학습이 발생하죠.

PairProgramming 자체에 대해서는 http://www.pairprogramming.com 를 참조하시고, IEEE Software에 실렸던, 로리 윌리엄스 교수의 글을 읽어보세요 http://www.cs.utah.edu/~lwilliam/Papers/ieeeSoftware.PDF. 다음은 UncleBob과 Rob Koss의 실제 PairProgramming을 기록한 대본입니다. http://www.objectmentor.com/publications/xpepisode.htm

시간이 없어서 대충 간략하게 썼는데, 모르겠는 부분은 질문해 주세요.

--김창준

PP에 대해서는 체계적으로는 잘 모르겠지만.. (파고들려면 XP 에서부터 파고들어야 할 것 같아서요.) 그냥 여기저기 자료들 얻어서 읽어보고, 선배님 글도 읽어보면서 '효과적인 지식전달방법이 될 수 있겠구나.' 특히 1기 -> 2기 인수인계식으로 기존의 프로그램들을 이해시키는데에도 괜찮은 방법이라 느끼고 있습니다.

한편, 보통 숙련자/비숙련자 가 pairing 할때는 한쪽 방향으로 프로그래밍 스타일 등의 무게가 치우쳐지기 쉽다고 생각하는데요. 보통 비숙련자인 사람이 수동적인 입장을 취하는 경우가 많기 때문에.. 다른 한편, 숙련자인 사람이 마음의 벽을 넘지 못하는 우를 범할때에도 비숙련자인 사람이 '내가 저 사람보다 잘 모르니까...' 식으로 끌려가는 경우가 있을수 있다고 봅니다. (실제로 가끔 제가 '설명할 수 없는 부분은 혼란시켜라' 라는 말을 실천에 옮기는 경우가 종종 발생한다는.. -_-;;) -- 강석천

좀 시각을 넓힐 필요가 있을 겁니다. "전체 팀"과 "전체 개발 프로젝트"라는 관점이죠.

겉으로 보기엔, 왕초보/왕도사의 짝은 상당히 비효율적일 것 같지요. PairProgramming을 한다고 해도, 왕도사가 키보드를 거의 독차지하고, 왕초보가 간간히 던지는 멍청한 질문은 둘(정확히는 왕도사)의 프로그래밍 속도를 늦출 것이고요. 또, 아무것도 못하고 멍청히 지켜봐야만 하는 왕초보 역시 답답할 겁니다. 괜히 질문했다가는 핀잔받기 일수이고. 둘 다 짜증나는 상황이죠.

이런 상황에서는 SoloProgramming이 낫다는 말을 하고 싶을 겁니다. 왕초보는 왕초보대로 짜고, 왕도사는 또 자기 마음대로(full-speed로) 짜고. 하지만, 이건 기본적으로 잘못된 관점에서 오는 문제입니다. 제대로 된 PairProgramming은 전체 팀은 물론 각 개인에게도 모두 이득을 줍니다.

조금 장기적인 면에서 그리고 팀의 수준에서 생각해 보세요. 문제많은 코드만 만들어내는 사람과, 남들이 이해하기 힘든 코드만 만들어내는 사람이 각자 나름의 코드를 만들어내는 팀의 전체 효율과, 항상 왕도사의 코치를 받는 왕초보와, 왕초보의 이해도에 맞추기 위해 노력하는 왕도사로 이루어진 팀(왕초보/왕도사 모두 "뭔가 학습"하는 것이 있게되죠)의 전체 효율. 어떨까요? 더군다나, 그 둘이 PairProgramming을 하면 할 수록 왕초보는 왕도사 수준에 근접합니다 -- 엄청나게 빠른 성장을 목격할 수 있죠. 굳이 초기 단계의 비용이 있다고 쳐도, 그건 일종의 투자로 봐야 할 겁니다. --김창준


PairProgramming 을 위해 특별히 필요한 지식이 있는지 궁금합니다. (주로 자연스럽게 따라오는 것들이 XP 관련쪽 이야기여서.. XP에 대한 구체적인 지식이 필요한지 궁금합니다.)

XP 방법 중에서 가장 손쉽게, 곧바로 적용할 수 있는 것 중 하나가 PairProgramming입니다. 물론 여타의 XP 방법들과 마찬가지로 최고의 효과를 위해서는 다른 실행법을 함께 수행해야 합니다만, 이것 하나만이라도 제대로 하면 가시적인 차이를 느낄 것입니다. 특별히 어떤 지식보다는 마음 자세와 태도가 더 중요합니다. --김창준


Strengthening the Case for Pair-Programming(Laurie Williams, ...)만 읽어보고 쓰는 글입니다. 위에 있는 왕도사와 왕초보 사이에서 Pair-Programming을 하는 경우 생각만큼 좋은 성과를 거둘 수 없을 것이라고 생각합니다. 문서에서는 Pair-Programming에서 가장 중요한 것을 pair-analysis와 pair-design이라고 보고 말하고 있습니다.(좀 큰 프로젝트를 해 본 사람이라면 당연히 가장 중요하다고 느끼실 수 있을 것입니다.) 물론 pair-implementation도 중요하다고는 말하고 있으나 앞서 언급한 두가지에 비하면 택도 없지요. 그러니 왕도사와 왕초보와의 결합은 아주 미미한 수준의 이점만 있을뿐 실제 Pair-Programming이 주창하는 Performance는 낼 수 없다고 생각됩니다. 더군다가 이 경우는 왕도사의 Performance에 영향을 주어 Time dependent job의 경우 오히려 손실을 가져오지 않을까 생각이 됩니다. Performance보다는 왕초보를 왕도사로 만들기 위한 목적이라면 왕초보와 왕도사와의 Pair-Programming이 약간의 도움이 되기는 할 것 같습니다. 그러나 우리가 현재 하는 방식에 비해서 얼마나 효율이 있을까는 제고해봐야 할 것 같습니다. - 김수영


Pair 할때의 장점으로 저는 일할때의 집중도에 있다고 보고 있습니다. (물론 생각의 공유와 버그의 수정, 시각의 차이 등도 있겠지만요.) 왕도사/왕초보 Pair 시의 문제점은 왕도사가 초보자가 coding 때에 이미 해야 할 일을 이미 알고 있는 경우 집중도가 떨어지게 된다는 점에 있습니다. Pair 의 기간이 길어지면서 초보쪽이 중고급으로 올라가는 동안 그 문제들이 해결이 될 것 같은데, 아쉬운 점은 Pair 를 긴 기간을 두고 프로그래밍을 한 적이 없다는 점입니다. (하나의 프로젝트를 끝내본 역사가 거의 없다는.)

XP 를 할때 이야기되는 것중 하나가 XP 로 궤도에 올리는 기간에 관한 문제인데.. (아무래도 팀원들이 해당 지식들을 알아야 하니까..) 아직 이부분에 대해서는 저는 머리가 안굴러가네요. (아직 경험이.. 흐.) --석천
ps. 로코즌에선가.. XP를 적용하고 있다고 하는데, 어떻게 적용되고 있는지 궁금해지네요.

그냥 프로그래머 차원인 걸로 알고있습니다. (지금은 바뀌었나?) 로코즌 사람들하고 스터디도 해보고 했는데, 솔직히 말하면 그쪽 사람들은 대다수가 우선 자신의 그릇을 비우지 않은 경우가 많은 듯 해서 좀 안타깝습니다. 리팩토링이나 유닛테스트 등을 말하지만 제가 보기에는 XP적이지 못한 게 많아 실망을 하게 되더군요. 공부는 엄청나게 하신 분들이지만, 달보다 자신의 손가락에 치우치는 우를 범했지 않나 싶습니다. --김창준

왕도사와 왕초보 사이에서 Pair-Programming을 하는 경우 생각만큼 좋은 성과를 거둘 수 없을 것이라고 생각합니다.

이 세상에서 PairProgramming을 하면서 억지로 "왕도사 왕초보"짝을 맺으러 찾아다니는 사람은 그렇게 흔치 않습니다. 설령 그렇다고 해도 Team Learning, Building, Knowledge Propagation의 효과를 무시할 수 없습니다. 장기적이고 거시적인 안목이 필요합니다.

문서에서는 Pair-Programming에서 가장 중요한 것을 pair-analysis와 pair-design이라고 보고 말하고 있습니다.(좀 큰 프로젝트를 해 본 사람이라면 당연히 가장 중요하다고 느끼실 수 있을 것입니다.) 물론 pair-implementation도 중요하다고는 말하고 있으나 앞서 언급한 두가지에 비하면 택도 없지요.

이 말은 자칫하면 사람들을 호도할 수 있다고 봅니다. 할려면 정확하게 레퍼런스를 하고 인용부호를 달고 자신의 의견은 분리를 하세요. pair-implementation이 "앞서 언급한 두가지에 비하면 택도 없다"는 말은 어디에 나오는 말입니까? 그냥 자신의 생각입니까? 그리고, XP에서는 implementation time과 analysis, design time이 따로 분리되지 않는 경우가 많습니다. 코딩을 해나가면서 design해 나갑니다. Pair로 말이죠.

그러니 왕도사와 왕초보와의 결합은 아주 미미한 수준의 이점만 있을뿐 실제 Pair-Programming이 주창하는 Performance는 낼 수 없다고 생각됩니다. 더군다가 이 경우는 왕도사의 Performance에 영향을 주어 Time dependent job의 경우 오히려 손실을 가져오지 않을까 생각이 됩니다.

제가 여러번 강조했다시피 넓게 보는 안목이 필요합니다. 제가 쓴 http://c2.com/cgi/wiki?RecordYourCommunicationInTheCodehttp://c2.com/cgi/wiki?DialogueWhilePairProgramming 를 읽어보세요. 그리고 사실 정말 왕초보는 어떤 방법론, 어떤 프로젝트에도 팀에게 이득이 되지 않습니다. 하지만 이 왕초보를 쓰지 않으면 프로젝트가 망하는 (아주 희귀하고 괴로운) 상황에서 XP가 가장 효율적이 될 수 있다고 봅니다.

Performance보다는 왕초보를 왕도사로 만들기 위한 목적이라면 왕초보와 왕도사와의 Pair-Programming이 약간의 도움이 되기는 할 것 같습니다.

약간의 도움이라. 왕초보가 왕도사와 한번이라도 Pair를 해보면 그 경험은 경천동지할만 합니다. 어떤 자성적 깨달음을 얻기도 합니다. 무술의 고수가 파리 잡는 것을 보고도 깨달음을 얻는다는데 말이죠.

--김창준


이 말은 자칫하면 사람들을 호도할 수 있다고 봅니다. 할려면 정확하게 레퍼런스를 하고 인용부호를 달고 자신의 의견은 분리를 하세요. pair-implementation이 "앞서 언급한 두가지에 비하면 택도 없다"는 말은 어디에 나오는 말입니까? 그냥 자신의 생각입니까? 그리고, XP에서는 implementation time과 analysis, design time이 따로 분리되지 않는 경우가 많습니다. 코딩을 해나가면서 design해 나갑니다. Pair로 말이죠. (창준선배님이 쓴 글중)

pair-anaysis와 pair-design의 중요성을 문서에서는 "Unanimously, pair-programmers agree that pair-analysis and pair-design is critical for their pair success." 이와 같이 말하고 있습니다. 또 다시 보시면 아시겠지만.. 제가 쓴 문장은 "물론 pair-implementation도 중요하다고는 말하고 있으나 앞서 언급한 두가지에 비하면 택도 없지요."입니다. 택도 없다는 표현은 당연히 제 생각이라는 것이 나타나 있다고 생각되는데....

위의 글은 제가 쓴 글이 오해의 소지가 적다는 말을 하고 싶어서 쓴 것이구요..제 생각을 다시 적어 보겠습니다.


저는 PairProgramming의 희망을 왕도사와 왕도사가 같이 했을 때 정말 그 힘이 발휘될 것이라는 것에서 찾고 싶습니다. 형이 말하는 왕도사와 왕초보 그룹은 학교나 제자를 기르고 싶은 왕도사에게 해당하는 사항이 아닐까요? 실제 사회에서 왕도사와 왕초보 그룹이 얼마나 효용성이 있을까요?
안목을 넓혀서 본다고 해도 저는 큰 매력이 느껴지지 않습니다. 무협 영화를 보면 일반적으로 제자는 대부분 스승을 따르고 섬깁니다. 하지만 현대 사회에 와서는 이것은 극히 일부의 사람들에게만 해당하는 내용이고 대부분은 개인적인 성향이 훨씬 강합니다. 이런 상황에서 과연 왕도사가 미래를 내다보며 왕초보를 가르칠 것인가를 생각해봐야 할 것입니다. 물론 교육을 목표로 살아가는 왕도사라면 왕초보를 가르칠 수 있을지 모르나 그 효용 범위는 겨우 몇 왕초보에게만 주어지는 기회가 아닐까요? 다른쪽으로 빠질려구 하네요..
결국 제가 말하고 싶은 것은 PairProgramming은 왕도사와 왕도사 그룹이 할 수 있는 최상의 해법(제 생각입니다만)이라는 것입니다.. 모든 방법론이 모든 경우에 적합하지는 않은 것을 생각해본다면 PairProgramming이 왕도사와 왕초보 그룹이 아닌 왕도사와 왕도사 그룹에 가장 적합한 것이 아닐까 생각해봅니다.

-- 김수영

pair-implementation과 pair-design, analysis에 대해서는 원래 논문을 꼼꼼히 다시 읽어보길 바랍니다. 특히 각각이 구체적으로 무엇을 지칭하는가를 주의깊게 읽어주길 바랍니다. 또, XP에서처럼, 만약 세가지가 잘 구분이 되지 않고 별도의 design/analysis 세션이 없고, 코딩하는 자리에서 이 세가지가 동시에 벌어진다면 어떻게 될지 생각해 보세요.

왕도사와 왕초보를 어떻게 정의하느냐에 따라 좀 다를 수 있겠습니다. 제가 늘 말하듯이 "전문가"끼리의 PairProgramming은 일반적으로 성공적일 확률이 높습니다. 하지만 전문가일수록 자신의 프라이드와 에고가 강하기 때문에 PairProgramming의 장점을 충분히 이용 못하는 경우도 있습니다.

또한, 모든 분야에 있어 전문가는 존재하지 않습니다. 그렇다고 해서, 자신의 전문 영역만 일을 하면 그 프로젝트는 좌초하기 쉽습니다. (이 말이 이해가 되지 않으면 Pete McBreenSoftware Craftsmanship을 읽어보시길) 그 사람이 빠져나가 버리면 아무도 그 사람의 자리를 매꿔주기가 어렵기 때문입니다. 따라서 PairProgramming을 통해 지식 공유와 팀 빌딩을 합니다. 서로 배우는 것, 이것이 PairProgramming의 핵심입니다. 그런데 "배운다는 것"은 꼭 실력의 불균형 상태에서 상대적으로 "적게 아는 사람" 쪽에서만 발생하는 것이 아닙니다.

그리고 팀 내부에 상대적으로 실력이 부족한 사람이 있을 경우 XP에서는 이 사람을 내보낼 것인지 아니면 그대로 쓸 것인지 여러면(이득/비용)에서 판단을 합니다. 만약 그대로 써야하는 상황이라면 PairProgramming이 아주 핵심적인 요소가 됩니다.

만약 모든 분야에 왕초보라면 그런 사람은 업계에서 쓸 이유가 없습니다. 그런 사람을 팀 구성원 중 하나로 앉혀놓고 왕고수가 함께 PairProgramming을 해야할 상식적 이유가 전혀 없습니다. XP에서 이런 걸을 말하는 것이 아님을 상기해 주길 바랍니다.

--김창준


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