Gründe für die Paarprogrammierung

13

Ich habe in einigen Läden gearbeitet, in denen das Management die Idee der Paarprogrammierung entweder an mich oder an einen anderen Manager / Entwickler weitergegeben hat, und ich komme überhaupt nicht dahinter. Vom Standpunkt eines Entwicklers aus kann ich keinen Grund finden, warum die Umstellung auf diesen Codierungsstil vorteilhaft wäre, und als Manager eines kleinen Teams habe ich keinen Nutzen gesehen.

Ich verstehe, dass es bei grundlegenden Syntaxfehlern hilft und hilfreich sein kann, wenn Sie etwas heraushacken müssen, aber Manager, die sich nicht in der Programmierschleife befinden, scheinen es immer wieder als eine Möglichkeit zu sehen, ihre Designer davon abzuhalten, zu Facebook oder Reddit zu wechseln, als zu ein Designwerkzeug.

Als jemand in der Nähe der Entwicklungsabteilung, der es anscheinend nicht ganz verstehen kann, aus einem Buch oder einer Wiki-Seite zu diesem Thema ... von einer Führungsposition auf hoher Ebene aus, was sind die Vorteile von Pair Programming im Umgang mit Scrum oder Agile Umgebungen?

Jeff Langemeier
quelle
2
Ich denke, dass es in ganz bestimmten Situationen nützlich ist. Aber als allgemeines Entwicklungsmodell ist es irgendwie nutzlos.
Ryan Kinal
4
Dies hängt möglicherweise von der Software ab, die Ihre Ansicht färben könnte. Wenn Sie viele kleine Widgets haben und jeden Tag an verschiedenen kleinen benutzerdefinierten Softwareelementen arbeiten, ist dies wahrscheinlich nicht sinnvoll. Dies lohnt sich besonders, wenn Sie sich mit einem großen Unternehmenssystem befassen, bei dem Entwickler die Kaskade berücksichtigen müssen, die durch die von ihnen implementierten Funktionen im gesamten System entsteht. Das Schreiben einer Klasse, die Daten beeinflusst, die an über 30 verschiedenen Orten verwendet werden, kann im Allgemeinen besser von 2 Personen begründet werden, die unterschiedliche mentale Prozesse dafür haben. Es ist wie eine Monte-Carlo-Methode zur Fehlersuche.
Jimmy Hoffa
@JimmyHoffa Der Hauptgedanke ist also, dass wir die Zeit für Codeüberprüfungen / -tests auf der ganzen Linie erheblich reduzieren können, wenn wir die Fehler finden, bevor sie überhaupt zum Akzeptanztest gelangen.
Jeff Langemeier
3
@ JeffLangemeier Es ist eigentlich mehr als das; Wenn Sie die Fehler im Entwurf des Abschnitts A1 von Subsystem A sehen, bevor A1 aufgrund des natürlichen Diskurses zwischen zwei Entwicklern bei der Implementierung von Subsystem A überhaupt geschrieben wurde, sparen Sie nicht nur die Zeit, die für die Reparatur des Abschnitts aufgewendet wird A1 und die von A1 abhängigen Abschnitte A5 und A7 (oder das Auffinden von Fehlern in diesen abhängigen Abschnitten aufgrund der Kaskade aus der Behebung von A1), sparen Sie Zeit, indem Sie diesen fehlerhaften Abschnitt nicht vollständig schreiben. Es reduziert die Testzeit ja, aber es reduziert die Entwicklungszeit auf diese Weise weiter.
Jimmy Hoffa
@MartinWickman Dies ist kein Duplikat. In Ihrem verlinkten haben sie wirklich nach Nachteilen gesucht, obwohl der Titel nach Vor- und Nachteilen gefragt hat. Auch eine gründlichere Antwort der Profis wurde in diesem gegeben; Bis zu dem Punkt, dass es für die Community von Vorteil ist, dieses eine zu haben, auch wenn es dem anderen nahe steht.
Jeff Langemeier

Antworten:

25

Teilweise hängt es davon ab, wie Sie die Paarprogrammierung durchführen. In einigen Fällen schreibt der Treiber des Paares Code, während das zweite Mitglied des Paares die Entwurfs- und Implementierungsdetails des Systems beobachtet und diskutiert. Eine weitere Instanz der Paarprogrammierung besteht darin, dass beide Personen gleichzeitig Code schreiben. Eine Person schreibt die implementierte Funktionalität und die andere entwickelt und schreibt aktiv Testcode auf der Einheits- und Integrationsebene. Dabei werden wiederum die Entwurfs- und Implementierungsdetails des Systems erörtert.

Unabhängig von der Art der Paarprogrammierung dient es effektiv als kontinuierliche Codeüberprüfung . Der Code wird von zwei Personen überwacht, die auf Fehler achten, bevor sie in eine spätere System- / Abnahmetestumgebung oder in das Feld gelangen. Sie haben auch zwei Personen, die einen bestimmten Teil des Systems sehr gut verstehen, um als Redundanz zur Minimierung Ihres Busfaktors zu dienen . Sowohl das frühzeitige Erkennen von Fehlern als auch die Verbreitung von Systemwissen im Team reduzieren die Kosten für den Aufbau eines Systems.

Die Wissensverbreitung beschränkt sich nicht nur auf das Fachwissen des Teams. Je nachdem, um wen es sich bei dem Paar handelt, können Informationen zwischen einem älteren Mitglied des Unternehmens und einem neuen Mitglied über andere Dinge, die über das Projekt hinausgehen, übertragen werden - Codierungsstil, Unternehmenskultur, Erwartungen usw. Es kann auch jemandem, der mit einer Technologie oder einem Tool besser vertraut ist, ermöglichen, sein Wissen über diese Technologie oder dieses Tool in einer realitätsnahen Umgebung zu teilen.

Wie Sie bereits erwähnt haben, hilft dies auch dabei, die Entwickler fokussiert und im Fluss zu halten . Zusätzlich zum Fluss unterbrechen viele Personen mit geringerer Wahrscheinlichkeit mehrere Personen, die an etwas arbeiten, als eine einzelne Person, die an etwas arbeitet. Wenn Sie an einem Schreibtisch vorbeigehen und dieser alleine arbeitet, Sie aber mit ihm sprechen müssen, können Sie anklopfen und mit ihm sprechen. Dies ist weniger wahrscheinlich, wenn Sie zwei oder mehr Personen sehen, die zusammenarbeiten oder eine Diskussion führen - Sie werden sie nicht unterbrechen. Unterbrechungen kosten Zeit und mehr Zeit bedeutet höhere Kosten. Es ist im besten Interesse des Unternehmens, die Produktivität der Mitarbeiter zu maximieren.

Es gibt jedoch einige Herausforderungen, die überwunden werden müssen, um die Paarbildung durchführbar zu machen. Betrachten Sie Dinge wie Persönlichkeitskollisionen oder die Auswahl der Paare, um das Wissen richtig zu verteilen. Es gibt auch Überlegungen, wann Paare genau gedreht werden müssen. Zufällig vorgenommene Pair-Programmierung wird wahrscheinlich nicht effektiv sein, da dies geplant ist. Abhängig von der Zusammensetzung Ihres Teams ist es möglicherweise nicht effektiv, Personen zu verbinden.

Thomas Owens
quelle
+1 für die gute Antwort. Ich mag die Idee immer noch nicht, aber Sie stellen ihre Vorteile gut vor.
Ich mag den Schnitt von Ihrem Fock Sir, diese Erklärung macht das Gefühl wirklich tragfähig.
Jeff Langemeier
9
Ich bevorzuge ein Hybridmodell, bei dem die Paarungen aufgrund der aktuellen Anforderungen eher ad hoc sind. Es gibt auch Zeiten, in denen es effizienter ist, alleine zu arbeiten, und Zeiten, in denen es besser ist, mit einem Partner zusammenzuarbeiten. Zu festen Paaren gezwungen zu werden, erscheint mir willkürlich und unflexibel.
Jfrankcarr
Sehr gute Antwort. Ich bin auch ein Programmierer in einem agilen Team und wir machen viele Paarungen. Anfangs waren wir auch skeptisch, wir dachten, allein zu arbeiten sei der beste Weg. Irgendwann in der Entwicklung des Teams haben wir dann die Paarprogrammierung eingeführt. Es wurde KEIN Produktionscode festgeschrieben, wenn kein Paar programmiert wurde. Dies war eine künstliche Durchsetzung des Paarungskonzepts, aber es hat dem Team sehr geholfen. Schließlich, nachdem wir uns alle an die Technik gewöhnt hatten, haben wir unseren Stil geändert und arbeiten ad-hoc zusammen, meistens, wenn die Implementierung komplexer oder fehleranfälliger ist.
Patkos Csaba
@jfrankcarr, niemand hat sogar dauerhafte Paare vorgeschlagen; Ich bin mir nicht sicher, wo Sie auf diese Idee gekommen sind. (Beachten Sie, dass in dieser Antwort ausdrücklich erwähnt wird, wann Paare zu wechseln sind.) Unser Team fand es eine wirklich schlechte Idee, zwei Personen länger als einen oder zwei Tage miteinander zu paaren. Sie fangen an, in eine Brunft zu geraten. Einige Teams wechseln alle anderthalb Stunden (PDF-Link).
Joe White
3
  1. Weniger Fehler im endgültigen Code (Effizienz)
    Ersetzt Code-Reviews nicht vollständig, ist aber sehr effektiv, um die Dinge frühzeitig richtig zu machen. Es gibt Forschungsergebnisse, die in diese Richtung weisen.

  2. Schnellere Fertigstellung (Wirksamkeit)
    Es gibt mehrere Untersuchungen, die darauf hinweisen. Wenn es um komplexe Funktionen geht, sind 2 Köpfe einfach effektiver. Erfahrung im Pairing ist hierfür ein Muss.

(Hinweis: Dies ist Ihr Verkaufsargument für den Manager: Finanziell eine vernünftige Entscheidung, da Sie durch eine geringere Anzahl von Fehlern effizienter und durch eine schnellere Fertigstellung effektiver werden.)

  1. Unterrichten von Junioren
    Sie können einen Junior direkt zu einem erfahrenen Programmierer hinzufügen. Wenn Sie eine Gruppe absoluter Anfänger haben, ist es einfach, bei ihnen zu bleiben und sie paarweise die Grundlagen herausfinden zu lassen. Bleiben Sie dabei und geben Sie Ratschläge. Das Konzept ist anscheinend sehr alt und stammt aus der Handwerkskunst.
Sebs
quelle
3

Schnelle Antwort: Die meisten Vorteile und Kosten werden in Wikipedia veröffentlicht veröffentlicht. Betrachten wir sie jedoch aus einem etwas anderen Blickwinkel.

Ich möchte spezifische Fälle von Paar Programmierung Vorteile erwähnen, die agile / Scrum - Entwicklungsumgebung anwenden, aus genommen Blog - Eintrag :

Der Erfolg oder Misserfolg von Software hängt von ihrer Qualität ab, und die Paarprogrammierung verbessert die Qualität auf vielfältige Weise. Wenn zwei Entwickler zusammenarbeiten, verbessert sich die Qualität des Entwurfsmusters, da das Paar kurzen, einfachen und leicht zu wartenden Code mit weniger Fehlern entwickelt. Fehler sind ein wichtiges Qualitätsproblem bei der Softwareentwicklung. Mit zwei Augen, die den Code schreiben, werden mehr Fehler abgefangen, wodurch die Entwicklungskosten gesenkt werden. Spät im Entwicklungsprozess gefundene Fehler sind oft teuer zu beheben. Das frühzeitige Auffinden von Softwarefehlern verhindert und beugt schwierigen Problemen vor. Beim Programmieren tritt häufig Komplexität auf, und zwei Köpfe, die gemeinsam an der Lösung eines Problems arbeiten, können mehr Optionen erkennen und schneller als eine Schlussfolgerung ziehen.

in Summe:

  • Fördert die Teamkommunikation
  • Fördert einen effizienten Transfer von Anwendungswissen
  • Fördert die Rechenschaftspflicht beim Designansatz
  • Das Ergebnis ist ein besserer, einfach zu wartender Code
  • Hilft dabei, fehlerhaften Code in einem frühen Stadium zu eliminieren
  • Steigert die Teamproduktivität, da die Teammitglieder beim Codieren ungeteilte Aufmerksamkeit erhalten
  • Verbessert die Kommunikations- und Kollaborationsfähigkeiten der Teammitglieder
  • Baut Kameradschaft am Arbeitsplatz
  • Macht die Arbeit mehr Spaß
Yusubov
quelle
When two developers work together design pattern quality improves-> dieser Satz ergibt überhaupt keinen Sinn. Zumindest nicht sinnvoller als When two bakers work together wheat quality improvesoder When two race drivers work together asphalt quality improves.
Phresnel
Das ist ein Zitat aus dem Blog, das Sie sich ansehen können. Mein Ziel war es jedoch, mich stärker auf das technische Design und die Qualität des Codes zu konzentrieren, wobei eine gewisse Art von Verantwortlichkeit vorhanden ist, da jeder Entwickler bestrebt ist, stolz auf den erstellten Code zu sein.
Yusubov
2

Die Paarprogrammierung bietet einige Vorteile:

  • Die beiden Programmierer sind in der Lage, gemeinsam am Design zu arbeiten und möglicherweise eine bessere Architektur / Code zu erstellen - zwei Augenpaare können Fehler erkennen
  • Das institutionelle Wissen bleibt besser erhalten - wenn ein Programmierer das Unternehmen verlässt oder nicht verfügbar ist, sollte der andere in der Lage sein, die Arbeit ohne großen Produktivitätsverlust fortzusetzen
  • Dies ist eine Möglichkeit, um neue Entwickler schnell zu schulen. Koppeln Sie sie mit einem erfahrenen Mitglied des Entwicklungsteams und erleben Sie die Codebasis aus der Perspektive eines erfahrenen Teamveteranen
  • Bessere Disziplin - die beiden Programmierer sind wahrscheinlich über einen längeren Zeitraum hinweg produktiv, da der eine oder andere für eine Reihe von Aktivitätsschüben sorgen kann. Potenziell mühsame Aufgaben wie Unit-Tests werden möglicherweise weniger häufig übersprungen als bei Solo-Entwicklern.

Wikipedia hat auch eine schöne Zusammenfassung der Kosten und Vorteile im Wiki-Eintrag .

JW8
quelle