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?RecordYourCommunicationInTheCode 나 http://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 McBreen� Software Craftsmanship� �어보시길) 그 사람� 빠져나가 버리면 아무� 그 사람� �리를 매꿔주기가 어렵기 때문입니다. 따�서 PairProgramming� 통해 지� 공유와 팀 빌딩� 합니다. 서로 배우는 것, �것� PairProgramming� 핵심입니다. 그런� "배운다는 것"� 꼭 실력� 불균형 �태�서 �대�으로 "�게 아는 사람" 쪽�서만 발�하는 것� 아닙니다.

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

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

--김창준


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:59
Processing time 0.0101 sec