페어 프로그래밍의 가능한 단점은 무엇입니까? [닫은]


22

페어 프로그래밍은 오늘날 매우 유명합니다.

다음과 같은 몇 가지 장점이 있습니다.

  1. 버그가 적은 프로그램.
  2. 포스트 프로덕션 유지 관리 비용이 훨씬 적습니다.
  3. 확립 된 관행에 도전하여 새로운 아이디어가 등장합니다.
  4. 프로그래머들은 서로 배웁니다.
  5. 프로그래머는 부드러운 기술을 개발합니다.

그러나 페어 프로그래밍의 단점은 무엇입니까?


1
질문 제목의 "병렬"은 오타입니까?
5gon12eder

14
당신은 두 사람이 같은 (아마도 더 적은) 생산량을 생산한다는 사실 외에 다른 의미입니까?
Robert Harvey

4
@ ThorbjørnRavnAndersen 아마 적을 것입니다.
Robert Harvey

4
@ ThorbjørnRavnAndersen 수학에 문제가 있습니다. 기본적으로 말한 것은 끊임없이 피어 / 코드 검토에 있다는 것입니다. 그것이 얼마나 시간 경제적인지 상상하기 어렵습니다.
Robert Harvey

5
본격적인 페어 프로그래밍 배열을 방해하지 않고 쉽게 달성 할 수 있습니다. 이 용량으로 동료 소프트웨어 개발자와 필요에 따라 작업하십시오.
Robert Harvey

답변:


28

페어 프로그래밍은 상당한 명성을 얻었지만 몇 가지 함정도 있습니다.

그들 중 일부는 다음과 같습니다.

  1. 페어 프로그래밍에서는 앉아서 자신의 코드를 자체 평가할 수 없습니다.
  2. 쌍 중 하나가 적극적으로 참여하지 않을 수 있습니다.
  3. 운전자는 "소리내어 프로그래밍"해야합니다. 조용히 프로그래밍하면 이점이 줄어 듭니다.
  4. 동일한 기능을 생성하는 데 더 많은 시간이 소요됩니다. 코드 품질과 코딩 비용 증가간에 균형을 유지해야합니다.
  5. 숙련 된 프로그래머와 초보자가 짝을 이룰 때 "마스터 마스터"현상이 발생할 수 있습니다. 초보자 회원은 대부분의 코딩을 완료 한 경험있는 회원과 함께 관찰자가 될 수 있습니다.
  6. 두 명의 숙련 된 사용자가 짝을 이루면 "개발자의 자아"현상이 발생할 수 있으며 각 구성원은 자신의 아이디어를 추진하려고합니다.

4
2와 5는 핑퐁 페어링 (Ting-Pong Pairing)과 대응할 수 있습니다 (TDD주기와 함께 잠금 단계에서 드라이버와 네비게이터 간의 역할 전환이 매우 빠름 : Alice는 테스트 실패, Bob은 테스트 통과 코드 작성, Alice 리팩터링, Bob 쓰기 실패 테스트, Alice는 테스트 통과, Bob 리팩터링, Alice는 실패한 테스트 (...) 이렇게하면 드라이버와 네비게이터가 최신 (수십 초 정도)마다 2 분마다 역할을 전환하고 모든 구성원이 동등하게 크고 중요한 작업을 수행합니다.
Jörg W Mittag

5
4는 분명하게 들리지만 확실하지 않습니다. 예를 들어, 버그를 포착하고 피드백을 조기에 얻는 것은 실제로 두 배의 개발자 시간을 보충 할 수도 있고 그렇지 않을 수도 있습니다.
Jörg W Mittag

4
@ JörgWMittag (re : Ping-Pong pairing)는 매우 스트레스가 많은 근무일을위한 레시피처럼 들립니다.
Andres F.

4
탁구 프로그래밍은 관련된 두 가지가 본질적으로 상호 교환 가능해야합니다. 나는 현명한 페어 프로그래밍 조합이 그를 생각하고 타이핑하고 생각하는 동료가 있습니다. 그것은 그가 집중하고 내가 무슨 일이 일어나고 있는지 이해하는 데 도움이됩니다.
Thorbjørn Ravn Andersen

3
코드 검토에서는 중요한 부분에만 집중할 수 있지만 사소한 세부 사항을 논의하는 데 많은 시간이 낭비되고 있다고 언급 할 수도 있습니다.
Giorgio

24

모든 엔지니어에게 필수 프로세스로 롤아웃을 고려한 조직을 포함하여 페어 프로그래밍을 여러 번 시도했습니다 (아이디어가 얼마나 잘 전개되었는지 추측 할 수 있음). 개인적으로 나는 그것을 싫어했다.

아래에 열거 한 이유는 주관적인 경험 일 뿐이며 구체적인 용어로 그 영향을 '측정'할 수 없습니다. 그러나 여기 모두 동일합니다.

1- '네비게이터'와 '드라이버'를 갖는 것은 전자가 보컬이고 후자가 듣는 경우에만 도움이됩니다.

우리는 모두 이론적 관심사에 대해 고집이 세고 누군가가 문제를 제안 할 때 병리학 적으로 불가능한 (심리적으로) 오래된 작업을 '버릴'개발자를 만났습니다. 그리고 우리는 모두 개인이 너무 소심하거나 모호하여 우려를 제기하거나 모퉁이 사건을 제안 할 수 있음을 알고 있습니다.

이러한 종류의 개발자가 쌍을 이루면 네비게이터는 수동적 인 역할을 신속하게 수행하며, 결국 자동 코드 검토를 통해 단독 프로그래밍을 수행하게됩니다. 이것은 엄청난 자원 낭비입니다.

2-페어링은 창의성을 방해합니다.

이전에 '그룹 브레인 스토밍'의 가치에 대해 느꼈던 것과는 달리 요즘의 ​​합의는 창의적 지식 작업에는 독립성자율성이 필요하다는 것 입니다. 혼자 일할 때 미친 아이디어를 빨리 해킹하여 실제로 실현 가능한지 확인할 수 있습니다. 말도 없이 이상한 프로토 타입을 조립할 수 있으며, 실패하면 아무도 모르기 때문에 중요하지 않습니다 .

새로운 개념을 시도하고 싶을 때, 파트너를 설득하고, 단계별로 구현을 통해 이야기를 나누고, 그들이 실패하면 나를 판단하지 않기를 바랍니다. 그런 환경은 새로운 아이디어를 만드는 데 유독 합니다.

3-최저 공통 분모 설계.

위와 같이 한 쌍이 새로운 아이디어를 내놓지 못하거나 개인이 기능을 디자인해야하는 기본 원칙에 동의 할 수없는 경우, 타협하지 않는 디자인은 누구도 타협하지 않고 만족 시키려고합니다.

훌륭하고 웅장하며 기능적인 프로그래밍 추상화를 작성하는 개발자를 빠르고 더러운 성능 괴물과 결합하면, 함께 생성 할 코드는 일반적으로 매우 우아하거나 빠르지 않습니다.

4-자율성과 폭력적인 투명성 부족.

폭력적인 투명성 은 스크럼 방법론에 대해 적당히 유명한 (그리고 논란의 여지가 많은) 논쟁에서 뽑아 낸 문구입니다. 일부 조직이 개발자를 영 유화하고 비전문가 근로자를 위해 일반적으로 예약 된 의심으로 개발자를 대하는 방식을 설명합니다.

개발자의 작업을 완전히 투명하게 만드는 '유해'에 대해 어떻게 생각하든 (실제로 해롭다는 데 동의하지 않을 수도 있음) 많은 개인이 자율성과 혼자 일할 수있는 능력을 소중히 여깁니다. 그것은 중요한 심리적 요구이며 개발자가 (적어도 하나의 상점에서 일어난 것처럼) 페어링하도록 강요하면 직원들이 당황하고 화를 내고 소외됩니다.

5-일부 개발자는 쌍으로 멋지게 연주하지 않습니다.

일부 사람들은 페어링 된 환경에서 적절하게 행동하지 않거나 수행 할 수 없습니다. 그들은 나쁜 위생, 열악한 작업 습관, 거친 성격, '큰 소리'와 '강렬한'방식, 또는 개별 속성을 훌륭하게 만드는 다른 속성들, 그러나 열악한 쌍 프로그래머를 가질 수 있습니다.

이 문제를 해결할 수 있습니까? 실제로는 아닙니다. 개인적인 행동을 바꾸는 것은 어렵습니다. 페어 프로그래밍 샵은 고용에 대해 매우주의를 기울여야하고 누군가의 작동 방식과 동료들과 잘 어울릴 수 있는지에 많은 시간을 투자해야합니다. 그러나 성격에 대해 더 열심히 차별한다는 것은 기술과 전문 지식에 대한 기준을 완화하지 않는 한 고용이 더 오래 걸린다는 것을 의미합니다.


3
"폭력적인 투명성"이라는 문구가 마음에 들지만, 선호하는 방법론 (스크럼 / 민첩 또는보다 전통적인 것)이 개발자가 전문가처럼 취급되는지 여부와 관련이없는 것이 저의 경험이었습니다. 장애가있는 조직은 전문가가 Scrum이나 CMMI를 따르는 척 상관없이 아동처럼 취급합니다.
David

1
"페어링과 비교하기 : 새로운 개념을 시도하고 싶을 때 파트너를 설득하고, 단계별로 구현을 통해 이야기를 나누고, 그들이 실패하면 저를 판단하지 않기를 바랍니다. 환경은 새로운 아이디어를 만드는 데 유독합니다. ": 그것은 판단에 관한 것이 아니라 속도에 관한 것입니다. 생각이있을 때주의를 산만하게하고 싶지 않으며 흐름이 지속되는 한 최대한 많이 쓰려고합니다. 페어 프로그래밍은 적극적으로 수행하지 못하게합니다.
Giorgio

1
모든 아이디어를 기록한 후에는 다음 날 어쩌면 정리할 수 있으며, 그 후 동료가 검토 보드와 같은 도구를 통해 철저한 검토를 수행 할 수 있도록합니다. 완성 된 아이디어와 시간 압박없이 그것에 대해 생각하십시오. 페어 프로그래밍은 코딩 및 코드 검토를 하나의 활동으로 결합하려고하기 때문에이를 방지합니다.
Giorgio

2
@Jimmy : 5 점으로 1 개의 답변 대신 5 개의 답변을 작성하면 5 개의 공감대를받을 수 있습니다.
Giorgio

실험에는 조용하고 빠른 작업이 필요하다는 데 동의합니다. 페어링이 요구하는 것과 정반대입니다. 페어링은 유지 관리를 수행하거나 기존의 대규모 엔터프라이즈 시스템에 개별 기능을 추가하는 개발자에게 적합합니다. 그러나 어려운 제약 조건으로 작업하기 위해서는 발견, 새로운 기술, 독창성 또는 창의적인 방법이 필요한 작업에 전혀 쓸모가 없습니다.
지미 브렉-McKye

12

상황이나 관점에 따라 다릅니다.

페어 프로그래밍은 조직에 좋습니다. 그러나 개인에게 좋은가요?

결국 비용 절감 (조기 피드백) 및 생산성 방법입니다. 그것은 당신에 관한 것이 아니라 프로젝트, 제품, 회사 ($ $)입니다.

개인적인 혜택을 누릴 수 있지만 개발 방법론의 이유나 끝이 아닙니다. 예를 들어 (풀 타임) 페어 프로그래밍은 느슨해 짐, 서핑 등을 막아줍니다. 파트너에게 일시 중지를 정당화해야합니다.

당신의 (회전하는) 파트너는 최고의 감시 카메라가 될 것입니다 : 작업 강도 증가.

또는 지식을 배포함으로써 개인은 회사에 덜 위험하게되고 (예 : 필수 지식으로 회사를 떠날 수 없음) "협약 칩"이 줄어 듭니다.

관리자의 관점보다는 회사의 실제 상황 / 관점에서 긍정적 인 기사를 더 비판적으로 읽으면 더 많은 포인트를 찾을 수있을 것입니다.

거의 모든 방법론은 관리자의 관점에서 작성되었습니다.


회사를 소유하지 않는 한 코드 생성에 대한 돈이 제공됩니다. 고용주를 위해 더 나은 코드를 생산할 수있는 더 나은 코드-고용주에 대해 협상 칩을 얻는 방법에 대한 생각은 처음에 당신이 무엇을 가치있게하는지 이해하지 못하는 것입니다. 나는 PP가 너무 집중하여 하루 종일 할 수는 없지만 자동으로 휴식이 필요하다고 생각합니다.
Thorbjørn Ravn Andersen

7
어떤 사람들은 "고용주에게 귀중한 것"으로 생계를 꾸려야하기 때문에 미니언과 같은 고용주의 이익뿐만 아니라 자기 이익으로 계산해야합니다.
손님

1
@ ThorbjørnRavnAndersen 우리는 모든 사람들이 세금을 납부하고 모든 사람이 공로에 따라 보상을받는 이상적인 세상에 살고 있지 않습니다.
Den

1
@ ThorbjørnRavnAndersen 더 나은 코드는 고용주에게 더 ​​좋습니까? 나는 세상에서 그런 식으로 세상을 살았 으면 좋겠다. 내 세상에서 코드 품질이 절대적으로 필요한 것보다 더 이상 시간을 가져서는 안되는 중간의 부드러운 값인 기능을 가능한 한 빨리 생성하는 것이 중요하다. 버그는 괜찮습니다. 보통 심각하지 않고 쉽게 고칠 수 있습니다.
Alex

@Alex "보통 심각하지 않다" -나는 세상을
그리워한다

5
  1. 갑자기 화장실에 가거나 커피를 마시려고 할 때 누군가에게 말해야합니다. 최소한 허가를 요구할 필요는 없습니다.

  2. 다른 사람의 위생 기준에 대처해야합니다.


4

다른 답변 외에도 :

  1. 프로그래머가 랩톱으로 문제를 해결하기 위해 노력한 많은 회사 (고객 사이트를 기반으로-퇴근 후 집으로 가져 가면 장비를 안전하게 유지하고 집에서 VPN으로 이상한 일을 할 수있는 등) 수년 전 이미 다른 사람의 ( "드라이버") 랩톱 화면에서 어깨 서핑 관점에서 볼 수있는 문제가있었습니다. 나이가이를 개선 시키지는 않을 것입니다 (어떤 경우 든 이상적인 화면 각도 이상에서는 일부 화면을 읽기가 어려워집니다).

    따라서 페어 프로그래머에게는 충분히 큰 화면이 필요하므로 하드웨어 비용이 증가하고 위치에 대한 적응성이 제한됩니다. 어떤 경우에는 문제가되지 않을 수도 있고, 다른 경우에는 문제가 될 수도 있습니다.

  2. 또한 개인 충돌뿐만 아니라 개인 위생 선호도 (흡연, 식사 및 음주 포함)의 차이로 인해 생산성이 저하되는 것으로 나타났습니다. 두 명의 프로그래머에게 "빨리 빨아 들인다"는 말을하는 것은 쉬운 일이다. 종종 사람들은 수동적 인 공격적인 행동을 통해 입을 다물고 조용히 방해하여 서로의 분노를 분개하게한다.
  3. 소음. 나는 조용한 작업 환경을 좋아합니다. (페어링을 위해 대화해야 할 때) 일부 페어 프로그래머 그룹의 끊임없는 대화를 상상할 수 없습니다. 헤드폰의 성악조차도 내 집중력을 방해하는 경향이 있습니다 (사무실 청취를위한 평범한 악기). 유비쿼터스 개방형 사무실에서 전용 2 인실로 이동하면이 문제를 해결할 수 있지만 비용이 다시 증가 할 것입니다.

즐거움을위한 일화 :

  • 이전 고용주는 한 번 다른 국가에서 계약자를 확보했습니다 (유죄를 보호하기 위해 익명으로 유지해야 함). 고용주는 숙박 시설을 제공했지만 운송은 제공하지 않았습니다. 계약자가 일하기 위해 길을 따라 살았 기 때문에 나는 그를 데리러 다시 데려가도록 자원했다. 그의 개인 위생은 내가 익숙했던 것과 같은 표준에 있지 않았으며, 내가하지 않는 동안에도 그는 아주 많이 피 웠습니다 ( "가장 강합니다!"). 사무실로 15 분 동안 여행을 갔을 ​​때 나는 심지어 겨울에도 창문을 내린 채로 두 달간 담배를 피우지 않았다. 그러나 그는 나를 기다리는 동안했다).
  • 우리는 또한 페어 프로그래밍을하지 않았지만 회의 테이블에서 (한동안) 서로 옆에 앉았습니다. 약 한 달 후, 테이블의 인조 나무에는 동료의 마우스 손 위치 주변에 멋진 갈색 고리가있었습니다. 그 시점에서 나는 콜센터 오픈 플랜 영역 옆에 열린 책상을 얻었습니다. 헤드폰의 도움으로 선호했습니다.
  • 그리고 유비쿼터스 사무용 음료 인 커피가 있습니다. 나는 그것을 마시지 만 다른 동료들처럼 자주 마시지 않고 마시지 않습니다. 빈 거리의 머그잔 냄새와 비슷한 근거리 호흡은 매우 불쾌 할 수 있습니다. 향기를 "안개"라고 부르 자 ...

3

사회적 및 실제적인 이유로 쌍 프로그래밍이 실패한다고 생각합니다. 본질적으로 당신은 한 사람에게 끊임없는 감시하에 일하라고 요구하고 다른 한 사람은 구멍을 찌르기 만하면됩니다.

잠시 후 불가피하게 발생하는 일은 쌍이 '이메일 확인'또는 '실시간 문제에 대한 잘못된 점검 수행'등으로 분리 된 것입니다.

코드 출력을 개선하는 대신 볼륨이 줄어 듭니다. 실질적인 이유로 '저는 당신과 동기화되지 않은 점심 / 미팅으로 가야합니다'와 소셜은 '밥이 다시 페어링에 대해 묻기 전에 밥이 그 일을 마칠 때까지 기다릴 것입니다.

귀찮은 장점에 관해서는 더 간단하고 효과적인 방법으로 달성하는 많은 일반적인 관행이 있습니다.


2

두 명의 수석 개발자에게 자신이 일을 할 수 있다고 확신하는 경우 "통증 프로그래밍"을하도록 지시하는 것은 가장 큰 단점이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.