Wie können Sie während der Paarprogrammierung einen Fluss erzielen und aufrechterhalten?

17

Flow ist ein Konzept, das von Mihaly Csikszentmihalyi eingeführt wurde. Kurz gesagt, es bedeutet, in die "Zone" zu gelangen. Sie fühlen sich in Ihre Aufgabe vertieft und konzentriert. Die Aufgabe kann schwierig, aber gleichzeitig herausfordernd sein. Wenn Menschen Flow erreichen, steigt ihre Produktivität. Das Programmieren erfordert viel mentalen Fokus, da wir oft mehrere Dinge gleichzeitig im Kopf haben müssen. Viele arbeiten gerne in einer ruhigen Umgebung, in der sie ihre volle Aufmerksamkeit auf die Aufgabe richten können. Wenn sie unterbrochen werden, kann es einige Minuten oder sogar Stunden dauern, bis sie wieder fließen.

Ich verstehe, dass es in der agilen Entwicklung und extremen Programmierung eine Praxis gibt, die als Paarprogrammierung bezeichnet wird. Dies bedeutet, dass Sie das gesamte Softwareentwicklungsteam in einem Raum zusammenfassen, damit die Kommunikation nahtlos verläuft. Sie schreiben Code mit Ihrem Paar, weil Sie auf diese Weise sofortige Codeüberprüfungen erhalten und weniger Fehler durchkommen.

Ich hatte immer Probleme, beim Pair-Programmieren einen Flow zu erzielen, da es ständig zu Unterbrechungen kam. Ich denke tief über ein Problem nach, dann stellt mir plötzlich jemand eine Frage von einem anderen Paar. Mein Gedankengang ist verloren.

Wie können Sie während der Paarprogrammierung einen Fluss erzielen und aufrechterhalten?

siamii
quelle
4
Ich bin nicht einverstanden, dass andere Paare jederzeit einfach unterbrechen können.
JeffO
3
Eine Alternative zu Flow besteht darin, die Position am Ballmer Peak zu bestimmen und zu halten . Dies kann einige Experimente, Zeit und viel Zeit in Anspruch nehmen.
Luftkissenfahrzeug voller Aale
Ich bin abgelenkt, wenn ich diese Frage lese, wenn ich Code schreiben soll. Wenn ich mit jemandem paarweise programmiert hätte, hätte ich diese Frage nicht zum Lesen geöffnet und würde vermutlich mehr erledigen.
TehShrike

Antworten:

15

Bearbeiten: Haftungsausschluss - So definiere ich "die Zone": A state of extreme focus, in which one is able to understand how many intricate details connect together, regardless of whether these do so elegantly (or simply) or not.

Ich versuche, diesen Zustand zu vermeiden, da ich möglicherweise in der Zone korrekten Code produziere, es mir und anderen Entwicklern später schwer fallen wird, ihn zu verstehen. Kurz gesagt: Für das Lesen von Code, der in der Zone geschrieben wurde, muss sich der Leser häufig in der Zone befinden. Diese Einschränkung ist mein Problem.

Es gibt ein schönes Kapitel über The Clean Coder, in dem Onkel Bob überzeugend erklärt, warum "Einstieg in die Zone" eine täuschend schlechte Idee ist.

Hier ist eine möglicherweise bessere Alternative als "Einsteigen in die Zone": Denken Sie klar und überlegen Sie ruhig und professionell, was Sie tun. Kommunizieren. Teilen Sie Ihre Gedanken mit Ihren Partnern. Identifizieren Sie die tatsächlichen Probleme. Diskutieren Sie mögliche Lösungen. Sie fühlen sich vielleicht nicht übernatürlich konzentriert, aber Sie treffen wahrscheinlich gute Entscheidungen und sind ansprechbar für Entwürfe.

Wenn Sie und Ihr Partner das Problem besprechen können, ohne dass Sie beide extrem konzentriert sind, ist es wahrscheinlich, dass Sie das Problem auf seine einfachere Natur zurückgeführt haben. Das bedeutet, dass Sie es jederzeit wieder verstehen können.

Auf der anderen Seite ... Wenn Sie nur etwas Zeit alleine brauchen, um Ihren Kopf klar zu bekommen (das tun wir alle manchmal), nehmen Sie es einfach. Fassen Sie Ihre Gedanken zusammen. Arbeite das Problem zuerst in deinem Kopf aus.

Aber die Sache ist, dass, wenn Sie dies tun - verwenden Sie diese Zeit nicht zum Schreiben von Produktionscode. Spielen Sie stattdessen mit Beispielcode und Prototypen. Versuchen Sie, das Problem zu verstehen, ohne erst an Lösungen zu denken. Wenn Sie alles richtig geschrieben haben, besprechen Sie es mit Ihrem Team und Partner oder sogar mit der Gummiente auf Ihrem Schreibtisch. Wenn Sie es immer noch nicht artikulieren können oder sie es nicht verstehen können, verfeinern Sie Ihre Ideen. Sobald Sie alles festgenagelt haben, integrieren Sie den gesamten Gedanken- und Beispielcode in eine echte, funktionierende Lösung.

Yam Marcovic
quelle
2
Ich würde eine Million Mal stimmen, wenn ich könnte, Profis lernen zu arbeiten, ob sie "in der Zone" sind oder nicht. Fachleute können mit Leuten zusammenarbeiten, die sie unterbrechen, um Fragen zu stellen, mit Lärm um sie herum und mit anderen Leuten, die tatsächlich Gespräche darüber führen, wie sie die Aufgaben erledigen, an denen sie zusammenarbeiten. Ich bin nicht daran interessiert, mit Primadonnen zu arbeiten, die spezielle Arbeitsbedingungen haben müssen, um sich zu konzentrieren.
HLGEM,
7
@HLGEM - Ich denke nicht, dass es zu viel verlangt, Zugang zu einem ruhigen Arbeitsplatz zu haben, wenn er gebraucht wird.
JeffO
2
@HLGEM: Natürlich soll ein Profi unter durchschnittlichen Arbeitsbedingungen eine durchschnittliche Produktivität haben. Andererseits wäre es im Interesse des Arbeitgebers, denselben Fachmann sehr gezielt arbeiten zu lassen, da dies die Produktivität und Qualität enorm steigern kann.
Giorgio
2
"Es scheint mir, dass die Leute" die Zone "so behandeln, als ob es eine magische schnelle Lösung für Probleme wäre, wie ein denkender Hut.": Nein, trivialer ist die Zone ein Konzentrationszustand, in dem Sie produktiver sind weil Sie sich ohne Ablenkung auf Ihre Aufgabe konzentrieren. Die Zone macht dich nicht allmächtig, sie macht dich nur produktiver.
Giorgio
2
@Yam Marcovic: Das ist nicht die Art von Produktivität, die ich mir vorgestellt habe (mehr Code von geringerer Qualität zu produzieren): Wenn man Isolation als Ausrede benutzt, um das zu tun, was sie wollen, sind sie nicht produktiver. Flow bedeutet für mich nicht, viel Code herumzuspielen und aufzuschreiben, sondern systematisch an einer bestimmten Aufgabe zu arbeiten, ohne von anderen, nicht zusammenhängenden Aufgaben unterbrochen zu werden.
Giorgio
5

Die Paarprogrammierung erfordert manchmal eine gewisse Isolation von Ihrem Partner.

Beispiel

Sie arbeiten zusammen an einer bestimmten Klasse und stellen fest, dass Sie eine Methode schreiben müssen, die gründliche Überlegungen zu einer komplexen Logik erfordert, ansonsten aber ein banales Ergebnis liefert. Sie arbeiten gemeinsam an der Erstellung von Komponententests für diese Methode und verschieben das Schreiben dieser Methode auf einen Zeitraum, in dem Sie isoliert arbeiten. Wenn die Methode abgeschlossen ist, kommen Sie zu zweit wieder zusammen und werten die Ergebnisse aus.

Robert Harvey
quelle
Warum sollte die Implementierung nicht in Pair Programming erfolgen?
try-catch-finally
5

Ich habe festgestellt, dass es eine kleine Klasse von Problemen gibt, für die die Paarprogrammierung funktioniert. Wenn Sie beispielsweise an einem plattformübergreifenden Produkt arbeiten und der Winders-Typ eine Funktion implementiert hat, für die betriebssystemspezifischer Code erforderlich ist, kann er dem Mac-Typ helfen, dieselbe Funktion auf dem Mac-Code zu implementieren, während der Mac-Typ fährt.

Nach meiner Erfahrung führt Paarprogrammierung jedoch ungewöhnlich zu einem Nettoverlust an Produktivität. Es fühlt sich so oft so an, als würden wir zwei Entwickler dafür bezahlen, die Arbeit eines zu erledigen.

Ja, es verringert die schreckliche Möglichkeit, dass ein Entwickler während des Arbeitstages eine Stapelwechselpause einlegt.

IMHO wäre es billiger für diejenigen Unternehmen, die ihre Entwickler überwachen möchten, jeden Entwickler mit einem privaten Sicherheitsbeamten zu koppeln, um sich hinter den Entwickler zu stellen und den Entwickler mit einem Schlagstock zu schlagen, falls er jemals langsamer wird oder versucht, auf ein Unwichtiges zu stoßen Website.

Jim in Texas
quelle
1
Der Punkt der Paarprogrammierung hindert einander nicht daran, nachzulassen; das wäre nicht einmal effektiv. Der Punkt ist die Codeüberprüfung in Echtzeit.
Lev
3
@Lev: Eine Codeüberprüfung vor dem Festschreiben ist wesentlich effizienter: Die Überprüfung dauert von wenigen Minuten bis zu einer halben Stunde anstelle eines ganzen Arbeitstages.
Giorgio
@ Giorgio Nicht ganz. Beispielsweise kann es vorkommen, dass Sie einen Fehler machen, dann Zeit damit verschwenden, ihn zu finden, und erst dann Ihren Code überprüfen und festschreiben lassen. Wenn Sie ein Paar programmiert hätten, hätte Ihr Partner den Fehler bemerkt und die Debugging-Zeit gespart.
Lev
1
@Lev: "Wenn Sie ein Paar programmiert hätten, hätte Ihr Partner den Fehler bemerkt und die Debugging-Zeit gespart.": Es gibt keine Garantie, dass ein Fehler entweder bei der Paarprogrammierung oder bei der Codeüberprüfung bemerkt wird. ZB kann man nach sechs Stunden Paarprogrammierung so müde sein, dass man Fehler leicht übersieht.
Giorgio
Natürlich gibt es keine Garantie, aber es kann helfen.
Lev
3

Als Entwickler, der versucht, in die Zone einzudringen, werden Sie versuchen, sich so gut wie möglich zu isolieren, um sich wohl zu fühlen und den Kopf frei zu bekommen. Warum sollte die Paarprogrammierung anders sein?

Sie und Ihr Partner sollten eine zoneninduzierende Umgebung finden, die für Sie beide funktioniert. Dies erfordert möglicherweise Kompromisse bei einigen Dingen, aber mein wichtigster Punkt ist, dass die Pair-Umgebung der Solo-Umgebung ähnlich sein sollte. Schalten Sie die Außenwelt aus. Das Paar programmiert zusammen; andere Paare (andere Mitarbeiter im Allgemeinen) sollten nicht unterbrochen werden (mit Ausnahme von kritischen Problemen, bei denen Sie die Aufgabe übernehmen).

Sarumont
quelle
0

Flow ist ein großartiger Zustand, wenn Sie die genauen Schritte zur Lösung eines Problems kennen. dh wenige unbekannte Unbekannte. Sie sitzen in einer ruhigen Ecke und hämmern die Lösung weg. Die meisten Probleme / Storys / Features sind jedoch nicht sehr klar, wenn Sie mit der Programmierung beginnen. Es wird immer eine "Lücke" zwischen dem erwarteten Endzustand und der "Planung" Ihres Gehirns geben. Sie lernen eine Menge Dinge, wenn Sie es tatsächlich tun. Dein Gehirn jongliert

  • Code-Design

  • Tippen

  • Lernen Sie neue Dinge über die Domain und den Code

Wenn ich alleine programmiere, bemühe ich mich, diese Dinge auszugleichen. Ich neige dazu, in "Hasenlöcher" zu geraten, in denen mein versunkener Kostenfehler mich daran hindert, einen Schritt zurückzutreten, das Gesamtbild zu betrachten und mein Design zu ändern. Es fällt mir auch schwer, mit einer imaginären oder einer echten Gummiente zu sprechen. Ich bin immerhin im "Flow".

Wenn ich aber produktiv paarweise programmiere, bekomme ich abwechselnd Schreibperioden, gefolgt von Perioden des Denkens und Nachdenkens. Hier enthüllen sich viele versteckte Dinge und es kann ein anderes Design entstehen. Wenn ich in ein Kaninchenloch gehe, kann mein Partner mich herausziehen. Einem echten Menschen etwas zu erzählen / zu erklären hat den wunderbaren Effekt, seine Gedanken irgendwie klarer zu machen. Manchmal vermisse ich es, im "Flow" zu sein, aber ich denke, ich trage viel mehr zu meinem Team bei, wenn ich ein Pairing-Programm durchführe, als wenn ich alleine programmiere. Nach allem Programmieren! = Tippen. Programmierung geschieht im Gehirn und bessere Programmierung geschieht, wenn zwei Gehirne zusammenarbeiten und sich gegenseitig kritisieren.

Uttamkini
quelle