Wann funktioniert die Paarprogrammierung? Wann sollte man es vermeiden?

51

Anstatt die ganze Zeit sklavisch zu paaren, verwenden wir die Paarbildung selektiv in unserem Team. Ich denke, es funktioniert am besten unter folgenden Umständen:

  • Hochfahren brandneuer Teammitglieder für ein Projekt (anstatt sie alleine durch Dokumentation oder Code waten zu lassen).
  • Wenn Junior- und Senior-Leute zusammenarbeiten (dies hilft, einige der Fähigkeiten und Tricks der erfahreneren Entwickler zu zeigen, und es ermöglicht den alten Hunden, manchmal neue Tricks zu lernen).
  • Wenn jemand versucht, einen Defekt aufzuspüren, hilft es oft, ein Paar Augen zu verwenden.

Wann und warum sollte ein Pair-Programm verwendet werden?

Wann sollte eine Paarprogrammierung vermieden werden? Warum?

Paddyslacker
quelle
11
Der Versuch, den Wert und die Logik des Schließens dieser Frage drei Jahre nach ihrer objektiven Beantwortung unter Bezugnahme auf empirische Untersuchungen zu verstehen. Dies ist eine der am besten erforschten und dokumentierten Vorgehensweisen von Agile. Muss der Wortlaut der Frage in irgendeiner Weise geändert werden? Haben sich die Erwartungen / Standards in den drei Jahren seit der Veröffentlichung geändert?
Michael

Antworten:

44

Untersuchungen von Laurie Williams haben ergeben , dass die Paarprogrammierung in Industrieteams am besten funktioniert, wenn

  • Paare arbeiten an Spezifikation, Design und komplexen Programmieraufgaben - Experimente zeigen, dass keine Qualitätsverbesserung zu verzeichnen ist, wenn einfache Aufgaben zu zweit bearbeitet werden. Es kann jedoch zu Geschwindigkeitsverbesserungen kommen. Beachten Sie auch, dass das "Programmieren" von Paaren häufig andere Aktivitäten als das Schreiben von Code umfasst.
  • Jede Person in einer Paarung verfügt über ungefähr das gleiche Fachwissen. Während die Paarprogrammierung hervorragend für das Training geeignet ist, sind Paare am meisten engagiert, wenn sie ungefähr auf dem gleichen Niveau sind.
  • Regelmäßiges Drehen der Rollen - Durch regelmäßiges Drehen bleibt der aktuelle Copilot immer beschäftigt, da die meisten Personen dazu beitragen, wenn sie fahren oder spüren, dass sie fahren werden.
  • Die Paare drehen sich regelmäßig - die Teams haben sich darauf gefreut, die verschiedenen Teile des Systems zu kennen, das sie bauen. Paarrotation hilft beim Wissenstransfer, wodurch bestimmte Risiken im Projekt reduziert werden. In einem akademischen Umfeld werden häufig Paare zugewiesen, in der Industrie werden sie jedoch in der Regel häufig selbst zugewiesen. In beiden Fällen ist das Paar am effektivsten, wenn beide Personen willige Teilnehmer sind, die Wert in der Paarungsaktivität sehen.

Persönlich habe ich festgestellt, dass mein XP-Team durchschnittlich 60% unserer Entwicklungszeit für die Programmierung von Paaren verwendet. Der Rest der Zeit wird für die individuelle Entwicklung aufgewendet. Es ist nicht ungewöhnlich, sich zu paaren, um ein erstes Design zu erstellen, ein paar Stunden allein am Design zu arbeiten und dann wieder zusammen zu kommen, um knifflige oder schwierige Teile des Codes zu beenden.

Ich habe auch festgestellt, dass die Paarprogrammierung in Blöcken von ungefähr 1,5 bis 2,5 Stunden am effektivsten ist. Alles, was viel weniger ist, erfordert zu viel Overhead für die Einrichtung, während viel mehr und die Paare dazu neigen, mürrisch und müde zu werden. Cranky and tired bedeutet, dass Sie nicht gut kommunizieren und möglicherweise Fehler in das System eindringen.

Michael
quelle
Großartige Antwort, Michael. Akzeptiere dies aus vielen guten Antworten, da es die richtige Mischung aus persönlicher Erfahrung und einer großartigen Verbindung zur Forschung hat.
Paddyslacker
Obwohl, ironischerweise, während der Link funktionierte, als Sie Ihre Antwort veröffentlicht haben, ist es jetzt ein 404, doh!
Paddyslacker
Ich habe den Hyperlink in deiner Antwort Michael gefixt, damit alles wieder in Ordnung ist.
Paddyslacker
Der "komplexe" Teil ist sehr wichtig. Wenn Sie einfache Schreibarbeiten ausführen, wird es Ihrem Partner sehr schnell langweilig.
Dave O.
3
@ DaveO .: Ich kann nur einfache Dinge mit der Paarprogrammierung tun. Bei komplexen Aufgaben muss ich nachdenken, und Paarprogrammierung ist nur eine Ablenkungsquelle (siehe die Antwort von Will Sargent). Ich finde es immer noch sehr nützlich, komplexe Probleme mit Kollegen zu diskutieren, aber dies unterscheidet sich vom gemeinsamen Schreiben des gesamten Codes.
Giorgio
29

Pair-Programmierung hat bei mir in sehr, sehr wenigen Situationen funktioniert.

Wo die Pair-Programmierung für mich fehlschlägt

Die kurze Geschichte ist, dass die Paarprogrammierung für mich nicht die Hauptmethode für die Entwicklung von Software ist. Ich kann ein Programm für einen Tag oder eine Woche koppeln, besonders wenn wir uns auf ein bestimmtes Problem konzentrieren. Aber danach? Ich bin fertig. Toast. Ich möchte niemanden sehen, mit niemandem sprechen und ich brauche mindestens ein paar Tage in einer Höhle, bis ich wieder fit für die menschliche Gesellschaft bin.

Es ist eine traurige Geschichte, aber das Lustige ist, dass ich jetzt so viel glücklicher bin, wie es endete. Ich bin glücklich mit einem Vertrag beschäftigt, bei dem ich von zu Hause oder von einem Café aus arbeite, und ich habe neue Freunde gewonnen und mehr von San Francisco erkundet, als ich jemals für möglich gehalten hätte. Ich habe ein Fahrrad und einen Laptop, und solange ich meine Fristen einhalte und regelmäßig Code einchecke, ist meine Zeit meine eigene.

Ich werde die großen Probleme, die ich mit der Paarprogrammierung habe, im Vorfeld auflisten und Ihnen später die Details und Anekdoten geben.

  1. Fokus aufteilen.
  2. Kein Experimentieren.
  3. Keine hohen Noten.
  4. Kein Stolz auf Eigentum.
  5. Kein Entkommen...

... Ich habe meine Mitarbeiter gefragt, ob sie gesehen haben, was ich gesehen habe, ob mir etwas fehlt, irgendetwas - ich habe nicht gesehen, wie das funktionieren kann, wie die Leute das weitermachen können. Sie sagten, es gehe mir gut, dass es nur eine Weile gedauert habe, bis ich mich eingelebt und angepasst hatte. Dass es anfangs für alle schwer war.

Schließlich zog ich mich in mich zurück. Zwischen den blendenden Kopfschmerzen, der Schlaflosigkeit und dem hämmernden, unerfüllten Bedürfnis, Code zu schreiben, reagierte ich nicht mehr auf Eingaben. Ich konnte auf einen Bildschirm starren und nichts sehen. Jemand könnte unerwartet mit mir sprechen und ich würde sie nicht hören. Ich habe die Anforderungen meines Jobs erfüllt, aber ich war nicht da. Ich hatte alles aufgebraucht, was ich gerade für den Tag gesehen hatte. Ich habe mein iPhone überprüft, als mein anderer Partner tippte.

Schließlich - knapp drei Monate später und zum ersten Mal überhaupt - wurde ich entlassen, weil ich beim Programmieren von Paaren nicht teamfähig war.

Nicht alleine

Ich habe das nicht nur geschrieben, um es zu verstehen, sondern auch um darüber sprechen zu können. Es gibt die Vermutung, dass die Paarprogrammierung für die meisten Menschen funktioniert und viel einfacher und schneller ist als die Solo-Programmierung. Dies kann der Fall sein oder auch nicht, aber als langfristige Praxis funktioniert die Paarprogrammierung bei mir nicht. Es gibt viele andere Leute, bei denen die Paarprogrammierung ebenfalls nicht funktioniert. Wir sind auch wichtig ...

Will Sargent
quelle
2
Ich auch. Ziemlich nur bei der Fehlersuche und selbst dann ist es mehr Brainstorming und Philosophie als eigentliche Programmierung.
hplbsh
4
+1 Aufschlussreiche Antwort. Es scheint, als würden die Befürworter von Pair Programming uns Einzelgänger und Introvertierte manchmal vergessen. Und zufällig sind viele Programmierer auch introvertiert ...
Andres F.
6
@AndresF .: Neben Einzelgängern und Introvertierten gibt es auch Menschen, die unabhängig sind und nur ihren Platz brauchen, um ihre Gedanken zu ordnen. Um Wissen unter den Teammitgliedern zu verbreiten, sind Code Reviews mindestens so effektiv wie Paarprogrammierung.
Giorgio
2
@ Giorgio Einverstanden. Tatsächlich unterstütze ich die partielle Paarbildung: einige schwierige Probleme werden paarweise angegangen. Einige Befürworter sind jedoch der Meinung, dass es die meiste Zeit für die meisten Programmieraufgaben verwendet werden sollte, mit denen ich nicht einverstanden bin.
Andres F.
4
@AndresF .: Ich stimme dir zu. "Partial Pair Programming" oder, mit weniger modischen Worten, "gemeinsam schwierige Probleme besprechen" ist ein sehr vernünftiger Ansatz, der nicht nur für das Programmieren, sondern auch für das Lernen in der Schule usw. verwendet wird. Ich denke jedoch nicht über diese Praxis nach eine Silberkugel, die die ganze Zeit verwendet werden sollte.
Giorgio
10

Mein Team hat seit seiner Gründung, lange bevor ich dort gearbeitet habe, Pair-Programmierung im Rahmen eines meist "extremen Programmierens" durchgeführt. Die Paarprogrammierung ist der Standardzustand . Leute gehen nur dann wirklich singleton, wenn es eine ungerade Zahl gibt, oder gelegentlich für Ermittlungen, insbesondere wenn sie mit feindlichen Geräten herumspielen und versuchen, sie zum Laufen zu bringen.

"Junior / Senior" ist nicht der einzige Weg. "Intermediate / Junior" ist nützlich; Es hilft dem mittelschweren Mann, das Wissen, das er erlangt hat, zusammenzufassen, indem er ihn dazu zwingt, es jemand anderem mitzuteilen. "Intermediate / Intermediate" fordert zwei Personen heraus, die zusammenarbeiten, um ihr Wissen zu teilen, zu kommunizieren und als Teil eines Teams zu arbeiten. Und selbst wenn Sie zwei hochrangige Mitarbeiter haben, haben diese wahrscheinlich unterschiedliche Fachgebiete und können unterschiedliche Ansätze entwickeln. Die Aspekte des Wissensaustauschs enden nicht, wenn jemand ein Projekt nur vage "auf dem neuesten Stand" hält. Paarprogrammierung ist vielmehr der Inbegriff einer lernenden Organisation . Neue Techniken und Best Practices verbreiten sich schnell.

Paar Programmierung hilft auch , die Qualität des Codes (weniger Fehler) und die geistige Gesundheit des Codes zu halten (es ist nicht nur das tut , was er will, aber das tut , was es soll ... idealerweise ohne eine mehrwöchige Kaninchen- going down Loch, das das Falsche tut, oder zwei verschiedene richtige Dinge, die wild in Konflikt geraten). Das hilft den Programmierern, ihren Fokus zu behalten: Hier im Herzen des Silicon Valley, wo die 80-Stunden-Woche stattfindet, können wir nur 40 Stunden pro Woche arbeiten, weil wir acht Stunden pro Tag intensiv programmieren und die Dinge wechseln miteinander aus. (Wenn Sie länger Pair-Programmierung machen würden, würden Sie wahrscheinlich ausflippen. Oder zumindest ausbrennen.) Dies ist ideal für die Vereinbarkeit von Beruf und Familie und hilft Ihrem Unternehmen auch dann, wenn es auf eine schnelle Abwicklung ankommt (insbesondere bei geringer Latenz).

Es ist nicht alles, 100% Pfirsiche und Sahne; Ich stelle fest, dass die Paarprogrammierung gelegentlich ein Hindernis für die Anwendung intuitiver Gehirnprozesse darstellt, die bei bestimmten Problemen hilfreich sind. In letzter Zeit habe ich bei einer Memory-Leak-Aufgabe einige Zeit mit und ohne Paare verbracht. ohne eins fühlte ich mich freier, herumzuspielen und Experimente zu machen, ohne wirklich genau zu wissen, was ich gerade tat. Es gibt auch einige Vorteile, Singleton zu arbeiten, wenn man in der Lage ist, aus einer Laune heraus eine Tangente zu ziehen und bestimmte wilde Refactorings (die in der XP-Methodik geschätzt werden) durchzuführen.

Insgesamt überwiegen die Vorteile jedoch bei weitem die Kosten, und das Pairing hat sich für uns hervorragend bewährt: vom Start bis zur Akquisition durch ein größeres Unternehmen und unserer anschließenden Integration. (Apropos, die Paarprogrammierung hat uns geholfen, durch Expansion und trotz eines geringen Umsatzes eine Kontinuität der Kultur aufrechtzuerhalten.)

(Wir entwickeln eine Software-Appliance in Perl für einen Listenpreis von 4.000 bis 40.000 US-Dollar.)


quelle
4

Ich habe noch nie in einem "Pair Programming" -Aufbau gearbeitet und kann dennoch behaupten, Teil der drei von Ihnen aufgelisteten Umstände zu sein. Das erwähnte Szenario scheint eher "reguläres Programmieren" zu sein, mit Phasen der Hilfe / des Trainings. Haben wir das nicht alles getan, bevor "Paarprogrammieren" ins Leben gerufen wurde? Paarprogrammierung würde vermutlich einen engagierteren Ansatz erfordern, bei dem der Prozess des Teilens innerhalb eines Teams nicht aufhört, sobald Sie die unmittelbar bevorstehende Aufgabe oder das unmittelbar bevorstehende Problem angehen. Aber das ist es, was ich "denke" und nicht, was ich "weiß".

Persönlich für Pair Programming Ich würde gerne in einem Team arbeiten, in dem ich meine Kenntnisse lernen und teilen kann. Ein unausgewogenes Team, in dem jeder, mit dem Sie zusammenarbeiten, meilenweit vor Ihnen liegt oder weit unterdurchschnittlich ist, kann ziemlich schnell uninteressant werden. Außerdem würde ich Angst haben, mit Leuten zu arbeiten, die in ihren Glauben verstrickt und schwer zu überzeugen sind.

Preets
quelle
Sie haben Recht, wir könnten die genannten Umstände lösen, ohne ein Paar zu programmieren, aber wir verwenden die Paar-Programmiertechniken einer Person, die die andere fährt, und beobachten und schalten sie in regelmäßigen Abständen aus. Dies ist ein bisschen formeller als nur zu helfen / zu trainieren. Viele XP-Shops führen viel mehr Pairing-Programme durch als dies - ich frage mich, was die "richtige" Menge an Pairing für Leute war.
Paddyslacker
Ja, auch ich würde gerne von Leuten hören, die längere Zeit mit PP gearbeitet haben. Ich kann verstehen, wie Berater, die mit mehreren Unternehmen oder Teams zusammenarbeiten, von PP profitieren können, aber diese Aufgaben dauern in der Regel einige Monate. Es wäre interessant zu wissen, wie PP in einer typischen Softwarefirma funktioniert, in der Projekte in der Regel länger als ein Jahr dauern.
Preets
2

Wir haben in den letzten Monaten in unserem Team mit der Programmierung von Paaren experimentiert. Ich finde es ziemlich nützlich, wenn Sie an etwas Neuem arbeiten (neue Technologie, neue Funktion usw.), da Sie schnell Ideen mit einer anderen Person des Teams austauschen und validieren / ungültig machen können. Ein Peer Review nebeneinander hilft auch dabei, Fehler fernzuhalten.

Ein anderer Teamkollege hat versucht, eine Paarprogrammierung mit einem Test durchzuführen, um ATDD durchzuführen, und sie waren sehr zufrieden mit den Ergebnissen (nach seinen Berechnungen führte eine Erhöhung der Entwicklungskosten um 20% zu einer Verringerung der Testzeit um etwa 50%).

Amit Wadhwa
quelle
1

Gute Nacht

oft haben wir über Praktiken der extremen Programmierung und die Paarprogrammierung debattiert . Zurück in der Zeit können wir verstehen, dass das Programmieren eine Einzelaktivität ist, weil Programmierer Konzentration und Isolation benötigten. Die Programmierer befanden sich zu dieser Zeit in der Zone , einem mentalen Zustand, in dem sie sich effizient auf den Code konzentrieren und nette und kreative Entscheidungen treffen konnten.

Die Programmierung von Paaren scheint ebenfalls riskant zu sein, wenn Sie davon ausgehen, dass sich ein Programmierer gegenseitig unterbricht. Andererseits ist es schwieriger, zwei Programmierer, die zusammenarbeiten, zu unterbrechen. Bei der Solo-Programmierung zum Beispiel ist es einfacher, unterbrochen zu werden, so dass es für einen Solo-Programmierer fast unmöglich ist, in der "Zone" zu bleiben.

Die Codequalität ist eine andere, wenn die Deadline gleich um die Ecke ist. Die Leute werden es immer eilig haben, ein Paar Programmierer oder ein Solo Programmierer sein: Sie werden bestimmte Best Practices nicht anwenden und werden nur die Unit Tests vergessen.

Ich würde bei der Paarprogrammierung bleiben. Denn wenn es um Risiken geht und ein Programmierer weg ist, muss immer ein anderer den Prozess dokumentieren und allen anderen beibringen, wie er funktioniert.

Junior M
quelle
1

Die Arbeit an etwas nicht-trivialer Komplexität ist in der Regel ein guter Kandidat für die Paarprogrammierung, sodass mehrere Personen den Code verstehen und nicht nur ein Entwickler einen Teil der Codebasis kennt. Ein anderer Fall ist, wenn jemand einige Fähigkeiten übertragen möchte. Ein Beispiel hierfür könnte sein, dass jemand, der wirklich gut in Unit-Tests ist, mit jemandem zusammenarbeitet, der mit dem Konzept nicht ganz so vertraut ist, und so dazu beiträgt, sich an etwas zu gewöhnen.

Wenn Sie vermeiden möchten, dass Paare programmiert werden, teilen Sie die Arbeit in zwei Gruppen auf, und lassen Sie jeden Entwickler einen Teil der Arbeit separat erledigen, um die Arbeit zu erledigen. Einige Aufgaben erfordern nur ein wenig Tipparbeit, sind aber nicht so umfangreich, dass es sich lohnt, ein paar Stunden zu verbringen, um einen besseren Weg zu finden, wie es möglich wäre, wenn jeder Entwickler für ein paar einen Brute-Force-Ansatz verfolgt Std.

JB King
quelle