it-swarm-eu.dev

Wann funktioniert die Paarprogrammierung? Wann sollte man es vermeiden?

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

  • Rampen Sie brandneue Teammitglieder für ein Projekt auf (anstatt sie selbst durch Dokumentation oder Code waten zu lassen).
  • Die Zusammenarbeit von Junioren und Senioren (hilft dabei, 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, sich mit neuen Augen zu paaren.

Wann und warum?

Wann sollte eine Paarprogrammierung vermieden werden? Warum?

55
Paddyslacker

von Laurie Williams zusammengestellte Studie zeigt, dass die Paarprogrammierung in Industrieteams am besten funktioniert, wenn

  • Paare arbeiten an Spezifikation, Design und komplex Programmieraufgaben - Experimente zeigen, dass bei der Arbeit an einfachen Aufgaben in einem Paar aber keine Qualitätsverbesserung gezeigt wird Es kann zu Geschwindigkeitsverbesserungen kommen. Beachten Sie auch, dass die "Programmierung" von Paaren häufig andere Aktivitäten als das Schreiben von Code umfasst.
  • Jede Person in einer Paarung hat ungefähr das gleiche Maß an Fachwissen - während die Paarprogrammierung für das Training großartig ist, sind Paare am engagiertesten, wenn sie ungefähr auf der gleichen Stufe sind.
  • Rollen drehen sich regelmäßig - Regelmäßiges Drehen hilft dabei, den aktuellen Copiloten in Bewegung zu halten, da Personen dazu neigen, am meisten beizutragen, wenn sie fahren oder das Gefühl haben, fahren zu wollen.
  • Paare wechseln regelmäßig - Teams haben sich wohl gefühlt, wenn sie über verschiedene Teile des Systems Bescheid wissen, das sie bauen. Die 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 im Stand-up-Modus 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.

In meiner persönlichen Erfahrung habe ich festgestellt, dass mein XP Team durchschnittlich etwa 60% unserer Entwicklungszeitpaar-Programmierung verbringt. Der Rest der Zeit wird für die individuelle Entwicklung aufgewendet. Dies ist nicht ungewöhnlich Verbinden Sie sich, um ein erstes Design zu erstellen, arbeiten Sie einige Stunden allein am Design und kommen Sie dann wieder zusammen, um knifflige oder schwierige Teile des Codes fertigzustellen.

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, um es einzurichten, während viel mehr und die Paare dazu neigen, mürrisch und müde zu werden. Verschroben und müde bedeutet, dass Sie nicht gut kommunizieren und möglicherweise Fehler in das System gelangen lassen.

47
Michael

Die Paarprogrammierung hat bei mir in sehr, sehr wenigen Situationen funktioniert.

Wo die Paarprogrammierung für mich fehlschlägt

Die Kurzgeschichte ist, dass die Paarprogrammierung für mich nicht die Hauptmethode für die Entwicklung von Software ist. Ich kann das Programm für einen Tag oder vielleicht eine Woche koppeln, insbesondere 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 menschliche Gesellschaft bin.

Es ist eine traurige Geschichte, aber das Lustige ist, dass ich jetzt so viel glücklicher bin, wie sie endete. Ich bin glücklich mit einem Vertrag beschäftigt, bei dem ich von zu Hause oder in einem Café aus arbeite. Ich habe neue Freunde gefunden 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 bei der Paarprogrammierung habe, im Voraus auflisten und Ihnen später die Details und Anekdoten geben.

  1. Geteilter Fokus.
  2. Kein Experimentieren.
  3. Keine hohen Töne.
  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 könnte, wie die Leute das weiter machen könnten. Sie sagten, es gehe mir gut, es brauchte nur Zeit, um sich einzuleben und anzupassen. 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 pochenden, 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 roten Anforderungen meines Jobs erfüllt, war aber nicht da. Ich hatte alles aufgebraucht, was ich gerade für diesen Tag aufgetaucht war. Ich begann mein iPhone zu überprüfen, als mein anderer Partner tippte.

Schließlich - nur knapp drei Monate später und zum ersten Mal überhaupt - wurde ich entlassen, weil ich bei der Paarprogrammierung 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 wurde vermutet, 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 auch nicht funktioniert. Wir sind auch wichtig ...

34
Will Sargent

Mein Team hat seit seiner Gründung, lange bevor ich dort gearbeitet habe, Paarprogrammierung durchgeführt, als Teil eines meist "extrem programmierenden" Shops. Paarprogrammierung ist der Standardzustand ; Leute gehen nur dann wirklich Singleton, wenn es eine ungerade Zahl gibt, oder gelegentlich für Ermittlungen, insbesondere wenn es darum geht, mit feindlichen Geräten herumzuspielen und zu versuchen, sie zum Laufen zu bringen.

"Junior/Senior" ist nicht der einzige Weg. "Intermediate/Junior" ist nützlich; Es hilft dem fortgeschrittenen Mann, das Wissen, das er erlangt hat, zu synthetisieren, indem er ihn 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 wirklich ältere Leute haben, haben sie wahrscheinlich unterschiedliche Fachgebiete und können unterschiedliche Ansätze entwickeln. Die Aspekte des Wissensaustauschs enden nicht, wenn jemand ein Projekt vage "auf dem neuesten Stand" hält. Paarprogrammierung ist vielmehr der Inbegriff einer lernenden Organisation . Neue Techniken und Best Practices verbreiten sich schnell.

Die Paarprogrammierung trägt auch dazu bei, die Qualität des Codes (weniger Fehler) und die Vernunft des Codes zu erhalten (sie tut nicht nur das, was sie beabsichtigt, sondern auch das, was sie sollte ... im Idealfall ohne in ein mehrwöchiges Kaninchenloch zu gehen und das Falsche zu tun oder zwei verschiedene richtige Dinge, die wild in Konflikt geraten). Dies hilft den Programmierern, ihren Fokus aufrechtzuerhalten: Hier im Herzen des Silicon Valley, der Heimat der 80-Stunden-Woche, können wir nur 40 Stunden pro Woche arbeiten, da wir acht Stunden am Tag intensiv programmieren und die Dinge wechseln miteinander aus. (Wenn Sie länger mit der Paarprogrammierung arbeiten würden, würden Sie wahrscheinlich ausflippen. Oder zumindest ausbrennen.) Dies ist ideal für die Vereinbarkeit von Beruf und Privatleben und hilft Ihrer Organisation auch, wenn Es ist wichtig, einen schnellen Turnaround zu haben (insbesondere einen Turnaround mit geringer Latenz).

Es ist nicht alles 100% Pfirsiche und Sahne; Ich finde, dass die Paarprogrammierung gelegentlich ein Hindernis für meine Anwendung intuitiver Gehirnprozesse darstellt, die bei bestimmten Problemen nützlich sind. Zuletzt habe ich bei einer Speicherverlustaufgabe einige Zeit mit und ohne Paare verbracht. Ohne einen fühlte ich mich freier, herumzuspielen und Experimente zu versuchen, ohne wirklich genau zu wissen, wie ich erklären sollte, was ich in einem Moment tat. Es gibt auch einige Vorteile bei der Arbeit mit Singleton, wenn man aus einer Laune heraus auf eine Tangente losgeht und bestimmte wilde Refactorings durchführt (bewertet in der XP -Methode).

Insgesamt überwiegen die Vorteile bei weitem die Kosten, und das Pairing hat für uns spektakulär gut funktioniert: von der Startphase über die Übernahme durch ein größeres Unternehmen bis hin zur anschließenden Integration. (Apropos, die Paarprogrammierung hat uns dabei geholfen, durch Expansion und trotz eines geringen Umsatzes eine Kontinuität der Kultur aufrechtzuerhalten.).

(Wir entwickeln eine Software-Appliance in Perl mit einem Listenpreis von ~ 4.000 bis 40.000 US-Dollar.)

10
user2348

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

Persönlich für die Paarprogrammierung möchte ich in einem Team arbeiten, in dem ich die Möglichkeit habe, mein Wissen zu lernen und zu teilen. Ein unausgeglichenes Team, in dem jeder, mit dem Sie arbeiten, meilenweit vor Ihnen liegt oder dann weit unter dem Durchschnitt liegt, kann ziemlich schnell ziemlich uninteressant werden. Außerdem hätte ich Angst, mit Menschen zusammenzuarbeiten, die in ihren Überzeugungen verankert und schwer zu überzeugen sind.

4
Preets

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

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

2
Amit Wadhwa

Gute Nacht

viele Male haben wir über Praktiken der extremen Programmierung und der Paarprogrammierung diskutiert. In der Vergangenheit können wir verstehen, dass Programmieren eine Soloaktivität ist, weil Programmierer Konzentration und Isolation brauchten. 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 Paarprogrammierung scheint auch riskant zu sein, wenn Sie davon ausgehen, dass sich ein Programmierer gegenseitig unterbricht. Andererseits ist es schwieriger, zwei zusammen arbeitende Programmierer zu unterbrechen. Bei der Solo-Programmierung ist es beispielsweise 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 Unit-Tests vergessen.

Ich würde bei der Paarprogrammierung bleiben. Denn wenn es um Risiken geht und ein Programmierer weg ist, haben Sie immer einen anderen Mann, der den Prozess dokumentiert und allen anderen beibringt, wie er funktioniert.

1
Junior M

Die Arbeit an etwas von 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 sich jemand, der wirklich gut in Unit-Tests ist, mit jemandem paart, der mit dem Konzept nicht ganz so vertraut ist, und so dazu beiträgt, sich an etwas zu gewöhnen.

Um die Paarprogrammierung zu vermeiden, müssen Sie unkomplizierte Arbeitsaufgaben ausführen, bei denen es besser ist, die Arbeit in zwei Gruppen aufzuteilen und jeden Entwickler einen Teil der Arbeit separat ausführen zu lassen, um die Arbeit zu erledigen. Einige Aufgaben können nur ein bisschen Tippen erfordern, sind aber nicht so groß, dass es sich lohnt, ein paar Stunden damit zu verbringen, einen besseren Weg zu finden, wie es möglich wäre, wenn jeder Entwickler für einige ein Brute-Force-Ansatz verfolgt Std.

1
JB King