Technical Digest: Strong-Style Pair Programming

von Björn Ostermann

Pair Programming ist eine Arbeitstechnik in der Softwareentwicklung, bei der zwei Entwickler an einem Rechner arbeiten, um gemeinsam Probleme zu lösen. Ein Entwickler benutzt die Tastatur und schreibt den Code, während der andere Entwickler eher strategisch über die Problemstellung nachdenkt und dem Entwickler an der Tastatur fortlaufend Feedback über den gerade erstellten Code gibt. Diese beiden Rollen sollten dabei regelmäßig wechseln. 
Auf den ersten Blick mag es ineffizient erscheinen, zwei Entwickler an einem Rechner arbeiten zu lassen. Auf längere Sicht überwiegen jedoch die Vorteile:

  • Pair Programming führt zu weniger Fehlern und besserem Code, weil jede neue Zeile Code sofort von kritischen Augen begutachtet wird. (Damit ist dann auch ein bei alleine arbeitenden Entwicklern in vielen Teams durchgeführtes Code Review überflüssig).

  • Mit Pair Programming bekommt man eine automatische Wissensverteilung im Team geschenkt. Wissensinseln werden vermieden und bei häufigem Wechsel der Pairing Partner verbreitet sich das Wissen sowohl über den Code, als auch z.B. über Tricks in der Entwicklungsumgebung, über alle Teammitglieder. Als positiver Nebeneffekt kann sich ein gemeinsamer Programmierstil entwickeln.

  • Das Arbeiten im Pair ist meist fokussierter, weil man sich nicht so leicht durch äußere Störungen (Emails, Kollegen, etc.) ablenken lässt und so disziplinierter an der Aufgabe arbeitet.

     

Pair Programming Stile

Für die Art der Zusammenarbeit beim Pair Programming gibt es verschiedene Stile. Am bekanntesten sind das Driver-Navigator-Pattern oder Ping-Pong-Pair Programming. Eine eher fortgeschrittene Technik für Entwickler, die schon Erfahrung in Pair Programming haben, ist Strong-Style Pair Programming.

Driver-Navigator-Pattern

Beim Driver-Navigator-Pattern übernimmt der Driver die Tastatur und versucht seine Lösungsidee für das aktuelle Problem “in Code zu gießen”. Es sollte dabei seine Arbeitsschritte und seine Gedankengänge kommentieren, damit ihm der Navigator folgen kann - leider passiert Letzteres häufig nicht.

Der Navigator hat die Übersicht, denkt langfristiger, stellt Fragen, gibt Anregungen für Verbesserungen und reviewt den Code on-the-fly. Wichtig ist dabei, dass die Rollen häufig wechseln. Sonst lässt die Aufmerksamkeit des Navigators schnell nach. Oft kann man bei diesem Stil beobachten, dass nach einem Rollenwechsel vom neuen Navigator erst einmal zum Telefon gegriffen wird, um nach Emails zu schauen, statt dem neuen Driver zu helfen.

Ping-Pong-Pair-Programming

Beim Ping-Pong-Pair-Programming gibt es einen festen Rhythmus im Wechsel zwischen Driver und Navigator. Dieser Rythmus wird durch die testgetriebene Entwicklung vorgegeben.  (was unabhängig vom Pair Programming Stil immer zu empfehlen ist).

Ein Pairing-Partner schreibt den Unit-Test zu einem neu zu implementierenden Feature. Dieser Test sollte zunächst fehlschlagen. Nun kommt es zum Wechsel und der zweite Pairing-Partner ändert oder ergänzt den Programmcode mit dem Ziel wieder zu einem grünen Testergebnis zu kommen.

Jetzt können die Rollen der Pairing-Partner erneut gewechselt werden. Dann ist Pairing-Partner 1 dafür verantwortlich, den gerade erstellten Code (und auch den Testcode) zu optimieren (Refactoring-Phase des TDD-Zyklus). Auf den Pair-Wechsel zwischen Implementierungsphase und Refactoringphase kann aber auch verzichtet werden. In beiden Fällen sollten die Rollen für das Schreiben des nächsten Tests und die Implementierung, getauscht werden.

Strong-Style-Pair-Programming

Die Idee des Strong-Style-Pair Programming ist, dass nicht der Pairing-Partner mit der Lösungsidee für ein Problem die Tastatur nimmt, sondern dass er sie an seinen Pairing-Partner übergibt. Der Pairing-Partner mit der Idee erklärt seinen Lösungsweg auf einem abstrakten Niveau (also nicht auf Stufe von einzelnen Codezeilen). Der Pairing-Partner an der Tastatur versucht diese Lösungsidee zu implementieren. Es wird ihm nur gelingen, wenn er sie vollständig verstanden hat. 

"For an idea to go from your head into the computer it MUST go through someone else's hands"
Zitat: http://llewellynfalco.blogspot.com/2014/06/llewellyns-strong-style-pairing.html

“Um eine Idee aus dem eigenen Kopf in den Computer zu bekommen, MUSS sie durch die Hände einer anderen Person gehen.”

Möchte der Pairing-Partner an der Tastatur nun seinerseits weitere Ideen zur Implementierung einbringen, gibt er die Tastatur zurück und die Rollen werden wieder getauscht. Mit dieser Pair Programming Technik sind immer beide Pairing-Partner in die Entwicklung involviert. Der Lösungsweg muss immer von beiden Pairing-Partnern durchdrungen werden.  Ein (auch nur kurzzeitiges) Abschweifen eines Pairing-Partners wird somit eher vermieden. 

Ich habe sehr gute Erfahrungen mit Strong-Style Pair Programming gemacht und kann nur jedem dazu raten, diese Variante im Alltag einzusetzen.