# Paarprogrammierung

Paarprogrammierung, auch Tandem-Programmierung, (englisch pair programming) ist eine Arbeitstechnik, die sich häufig bei agilen Vorgehensweisen zur Softwareentwicklung findet. Sie ist ein wichtiger Bestandteil von Extreme Programming (XP).

## Beschreibung

Bei der Erstellung des Quellcodes arbeiten jeweils zwei Programmierer gleichzeitig an einem Arbeitsplatz: Einer schreibt den Code, während der andere über die Problemstellungen nachdenkt, den geschriebenen Code kontrolliert sowie Probleme, die ihm dabei auffallen, sofort anspricht. Diese können dann sofort im Gespräch gelöst werden. Die beiden Programmierer sollten sich in den beiden Rollen abwechseln. Auch die Zusammensetzung der Paare sollte sich häufig ändern.
Eine Voraussetzung für Paarprogrammierung ist ein gemeinsam vereinbarter Programmierstil des gesamten Teams.

## Ziele

Zunächst soll Paarprogrammierung die Softwarequalität steigern. Durch die Kontrollfunktion der zweiten Person sollen problematische Lösungen vermieden werden. Die Paarprogrammierung dient aber auch zur Verbreitung von Wissen über den Quellcode. Durch das regelmäßige Rotieren der Partner kann immer der jeweils neue Partner durch Learning by Doing etwas über die bearbeiteten Quelltexte lernen.

## Positive Effekte
### Weniger Fehler

    Paarprogrammierung führt zu weniger Fehlern und somit zu weniger Fehlerbehebungsaufwänden. Üblicherweise rechnet man bei Paarprogrammierung mit 15 % weniger Fehlern als bei herkömmlicher Programmierung.

### Kleinere Programme

    Paarprogrammierung führt im Schnitt zu um 20 % kleineren Programmen.

### Höhere Disziplin

    Paare entwickeln viel eher an der richtigen Stelle und machen kürzere Pausen.

### Besserer Code

    Bei der Paarprogrammierung entwickelt man sich weniger leicht in Sackgassen und erreicht so eine höhere Qualität.

### Belastbarerer Flow

    Paarprogrammierung führt zwar zu einer anderen Art von Flow, ermöglicht diesen aber eher als der konventionelle Ansatz: Ein Programmierer kann seinen Partner jederzeit nach dem aktuellen Stand fragen und dort anknüpfen. Unterbrechungen werden auf diese Art besser abgewehrt.

### Freude an der Arbeit

    Paarprogrammierung ist oft spannender und interessanter, als allein zu arbeiten. 90 % der Entwickler, die Paarprogrammierung betreiben, sprechen von einer erfreulicheren Arbeit.

### Geringeres Risiko

    Wenn das gesamte Projektteam mit der Methode Paarprogrammierung arbeitet und die jeweiligen Partner oft wechseln, erlangen alle Wissen über die gesamte Codebasis. Dies wiederum führt zu einem geringeren Projektrisiko hinsichtlich Mitarbeiterfluktuation und Mitarbeiterabwesenheiten, welche zu den größten Projektrisiken zählen. Es erhöht somit die Truck Number.

### Wissensvermittlung

    Jeder hat Wissen, das andere nicht haben. Paarprogrammierung ist eine Möglichkeit, dieses Wissen zu verteilen oder auch zu transferieren.

### Teambildung

    Die Leute lernen sich gegenseitig schneller kennen, wodurch die Zusammenarbeit verbessert werden kann.

### Weniger Unterbrechungen

    Paare werden seltener unterbrochen als jemand, der allein arbeitet.

## Nachteile
### Teamfindung

    Teamfindung kann aufwendig sein, wenn nicht alle Personen miteinander produktiv arbeiten können. Eingewöhnung der Teammitglieder kann Zeit erfordern.

### Urheberrecht

    Es kann wie bei allen nicht von Einzelpersonen entwickelten Werken das Urheberrecht nicht für einzelne Personen angewandt werden.

### Haftung

    Es kann wie bei allen nicht von Einzelpersonen entwickelten Werken zu Konflikten kommen, da später nicht unbedingt klar ist, wer für fehlerhaften oder urheberrechtsverletzenden Code haftet.

## Produktivität

Paarprogrammierung führt zu einer geringeren Geschwindigkeit bei der Programmierung. Bei einer Studie benötigten die Paare 15 % mehr Zeit gegenüber der Geschwindigkeit einzelner Personen. Befürworter der Paarprogrammierung behaupten, dass die Produktivität durch diese Vorgehensweise nicht sinke, sondern im Gegenteil sogar deutlich steige. Grund dafür sei, dass die durch Paarprogrammierung gesteigerte technische und fachliche Qualität genau dort die Produktivität erhöhe, wo während der Softwareentwicklung am meisten Zeit verbracht wird: Beim Fehlerfinden und -beheben sowie beim Lesen von Code. Üblicherweise geht man davon aus, dass Fehler, die erst im Test gefunden werden, zehnmal so teuer in der Behebung sind, als wenn sie bereits während der Entwicklung gefunden werden.
Voraussetzung für hohe Produktivitätssteigerungen durch Paarprogrammierung ist allerdings, dass die fachliche Kompetenz der Partner nicht zu sehr voneinander abweicht.

## Verteilte Paarprogrammierung

Verteilte Paarprogrammierung (Distributed Pair Programming, DPP) ist die softwaregestützte Durchführung von Paarprogrammierung an getrennten Computern beispielsweise an unterschiedlichen Orten. Bekannte Werkzeuge für verteilte Paarprogrammierung sind Saros, XPairtise oder „Code With Me“.