Comment pouvez-vous atteindre et maintenir le flux lors de la programmation en binôme?

17

Flow est un concept introduit par Mihaly Csikszentmihalyi; en bref, cela signifie entrer dans la "zone". Vous vous sentez immergé dans votre tâche, concentré; la tâche peut être difficile mais difficile en même temps. Lorsque les gens atteignent un débit, leur productivité augmente. La programmation nécessite une grande concentration mentale, car nous devons souvent jongler avec plusieurs choses à la fois. Beaucoup aiment travailler dans un environnement calme où ils peuvent concentrer toute leur attention sur la tâche. S'ils sont interrompus, il peut s'écouler plusieurs minutes, voire plusieurs heures, pour retrouver le flux.

Je comprends qu'il existe une pratique en développement agile et en programmation extrême appelée programmation par paires. Cela signifie que vous mettez toute l'équipe de développement logiciel dans une seule pièce afin que la communication soit transparente. Vous écrivez du code avec votre paire, car vous obtenez ainsi des révisions instantanées du code et moins de bogues.

J'ai toujours eu des problèmes pour atteindre le flux lors de la programmation de paires en raison d'interruptions constantes. Je pense profondément à un problème, puis tout à coup, quelqu'un me pose une question d'une autre paire. Mon train de pensée est perdu.

Comment pouvez-vous atteindre et maintenir le flux lors de la programmation en binôme?

siamii
la source
4
Je ne suis pas d'accord que d'autres paires peuvent simplement interrompre à tout moment.
JeffO
3
Une alternative à Flow est d'identifier et de maintenir la position au Ballmer Peak . Cela peut prendre une bonne quantité d'expérimentation, de temps et de scotch à réaliser.
Aéroglisseur plein d'anguilles
Je suis distrait de lire cette question alors que je devrais écrire du code. Si je faisais de la programmation en binôme avec quelqu'un, je n'aurais pas ouvert cette question pour la lire, et j'en ferais probablement plus.
TehShrike

Réponses:

15

Edit: Disclaimer - Voici comment je définis "la 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.

J'essaie d'éviter cet état car, même si je peux produire du code correct dans la zone, moi et d'autres développeurs auront du mal à le comprendre plus tard. Pour faire court: la lecture de code qui a été écrit dans la zone peut souvent nécessiter que le lecteur soit dans la zone. Cette contrainte est mon problème.

Il y a un joli chapitre sur The Clean Coder où Oncle Bob explique de façon convaincante pourquoi "entrer dans la zone" est une mauvaise idée délirante.

Voici une alternative peut-être meilleure que «entrer dans la zone»: réfléchissez bien et considérez calmement et professionnellement ce que vous faites. Communiquer. Partagez vos pensées avec vos partenaires. Identifiez les vrais problèmes. Discutez des solutions possibles. Vous ne vous sentez peut-être pas surnaturellement concentré, mais vous êtes susceptible de prendre de bonnes décisions et des conceptions accessibles.

Si vous et votre partenaire pouvez discuter du problème sans que vous soyez tous deux extrêmement concentrés, il est probable que vous ayez résolu le problème à sa nature plus simple. Cela suggère que vous pourrez le comprendre à nouveau chaque fois que vous en aurez besoin.

D'un autre côté ... Si vous avez juste besoin d'un peu de temps seul pour vous redresser la tête (nous le faisons tous parfois), prenez-le. Obtenez vos pensées ensemble. Résolvez d'abord le problème dans votre tête.

Mais le fait est que si vous le faites - n'utilisez pas ce temps pour écrire du code de production. Au lieu de cela, jouez avec des exemples de code et des prototypes. Essayez de comprendre le problème, sans penser à des solutions pour l'instant. Une fois que tout est clair et écrit, discutez-en avec votre équipe et votre partenaire de paire, ou même le canard en caoutchouc sur votre bureau. Si vous ne parvenez toujours pas à l'articuler ou qu'ils ne le comprennent pas, affinez vos idées. Une fois que vous avez tout compris, intégrez toute cette pensée et cet exemple de code dans une vraie solution de travail.

Yam Marcovic
la source
2
Je voterais un million de fois si je le pouvais, les professionnels apprennent à travailler qu'ils soient «dans la zone» ou non. Les professionnels peuvent travailler avec des personnes qui les interrompent pour poser des questions, avec du bruit autour d'eux, et avec d'autres personnes en train de discuter de la façon d'accomplir la tâche sur laquelle ils travaillent ensemble. Je ne suis pas intéressé à travailler avec des prima donnas qui doivent avoir des conditions de travail spéciales pour se concentrer.
HLGEM
7
@HLGEM - Je ne pense pas qu'avoir accès à un endroit calme pour travailler en cas de besoin soit trop demander.
JeffO
2
@HLGEM: Bien sûr, un professionnel est censé avoir une productivité moyenne dans des conditions de travail moyennes. Mais d'un autre côté, il serait dans l'intérêt de l'employeur de laisser le même travail professionnel de manière très ciblée, car cela peut augmenter considérablement la productivité et la qualité.
Giorgio
2
"Il me semble que les gens traitent" la zone "comme s'il s'agissait d'une solution miracle pour bien résoudre les problèmes, comme un chapeau de réflexion.": Non, plus trivialement, la zone est un état de concentration dans lequel vous êtes plus productif parce que vous êtes concentré sur votre tâche sans distraction. La zone ne vous rend pas tout-puissant, elle vous rend seulement plus productif.
Giorgio
2
@Yam Marcovic: Ce n'est pas le genre de productivité que j'avais en tête (produire plus de code de moindre qualité): si on utilise l'isolement comme excuse pour faire ce qu'ils veulent, ils ne sont pas plus productifs. Pour moi, le flux ne signifie pas déranger puis écrire beaucoup de code, mais plutôt travailler systématiquement sur une tâche spécifique sans être interrompu par d'autres tâches non liées.
Giorgio
5

La programmation en binôme nécessite parfois des périodes d'isolement de votre partenaire.

Exemple

Vous travaillez ensemble sur une classe particulière et vous vous rendez compte que vous devez écrire une méthode qui nécessite une réflexion approfondie sur une logique complexe, mais renvoie sinon un résultat banal. Vous travaillez ensemble sur la création de tests unitaires pour cette méthode, et reportez l'écriture de cette méthode à une période de temps pendant laquelle vous travaillez de manière isolée. Une fois la méthode terminée, vous vous remettez en équipe et évaluez les résultats.

Robert Harvey
la source
Pourquoi l'implémentation ne devrait-elle pas se faire en programmation par paires?
essayer-attraper-enfin
5

J'ai découvert qu'il existe une petite classe de problèmes pour lesquels la programmation par paires fonctionne. Par exemple, si vous travaillez sur un produit multiplateforme et que le gars Winders a implémenté une fonctionnalité qui nécessite un code spécifique au système d'exploitation, il peut aider le gars Mac à implémenter la même fonctionnalité sur le code Mac pendant que le gars Mac conduit.

Cependant, selon mon expérience, la programmation par paire entraîne une perte de productivité nette. On a si souvent l'impression que nous payons deux développeurs pour faire le travail d'un seul.

Oui, cela réduit la possibilité horrible qu'un développeur puisse prendre une pause d'échange de pile pendant la journée de travail.

À mon humble avis, il serait moins cher pour les entreprises qui souhaitent contrôler leurs développeurs de jumeler chaque développeur avec un agent de sécurité privé pour se tenir derrière le développeur et frapper le développeur avec une matraque s'il ralentit ou essaie de culminer à un niveau non essentiel. page Web.

Jim au Texas
la source
1
Le point de programmation par paire ne s’empêche pas de se relâcher; ce ne serait même pas efficace. Le point est d'avoir la révision du code en temps réel.
Lev
3
@Lev: Avoir un examen du code avant de valider est beaucoup plus efficace: l'examen prend de quelques minutes à une demi-heure, au lieu d'une journée entière de travail.
Giorgio
@Giorgio Pas tout à fait. Par exemple, il peut arriver que vous fassiez un bogue, que vous perdiez du temps à l'attraper et que vous obteniez ensuite votre code examiné et validé. Si vous aviez programmé une paire, votre partenaire aurait remarqué le bogue et économisé le temps de débogage.
Lev
1
@Lev: "Si vous aviez programmé une paire, votre partenaire aurait remarqué le bogue et économisé le temps de débogage.": Il n'y a aucune garantie qu'un bogue soit remarqué avec la programmation de la paire ou avec les révisions de code. Par exemple, après six heures de programmation en binôme, on peut être si fatigué qu'on oublie facilement les bugs.
Giorgio
Évidemment, il n'y a aucune garantie, mais cela peut aider.
Lev
3

En tant que développeur tentant de pénétrer dans la zone, vous tenterez de vous isoler du mieux que vous pourrez pour vous sentir à l'aise et vider votre esprit. Pourquoi la programmation par paires devrait-elle être différente?

Vous et votre partenaire devriez trouver un environnement induisant une zone qui fonctionne pour vous deux. Cela nécessitera peut-être un compromis sur certaines choses, mais mon point principal est que l'environnement de la paire devrait être similaire au solo. Éteignez le monde extérieur. La paire programme ensemble; les autres paires (les autres collègues en général) ne devraient pas interrompre (à l'exception des problèmes critiques, abandonner ce que vous faites).

Sarumont
la source
0

Le flux est un excellent état lorsque vous connaissez les étapes exactes pour résoudre un problème. c'est-à-dire quelques inconnues inconnues. Vous vous asseyez dans un coin calme et martelez la solution. Cependant, la plupart des problèmes / histoires / fonctionnalités ne sont pas très clairs lorsque vous commencez à les programmer. Il y aura toujours un "écart" entre l'état final attendu et la façon dont votre cerveau l'a "planifié". Vous apprenez beaucoup de choses lorsque vous "le faites". Votre cerveau jongle

  • Conception du code

  • Dactylographie

  • Apprendre de nouvelles choses sur le domaine et le code

Quand je programme seul, j'ai du mal à équilibrer ces choses. J'ai tendance à entrer dans des «trous de lapin» où mon erreur de coût irrécupérable m'empêche de prendre du recul et de regarder la situation dans son ensemble et de changer ma conception. Il est également difficile pour moi de parler à un canard en caoutchouc imaginaire ou à un vrai d'ailleurs. Je suis après tout en "flow".

Cependant, lorsque je suis productivement en programmation par paires, j'obtiens des périodes de frappe alternées suivies de périodes de réflexion et de réflexion. C'est là que beaucoup de choses cachées se révèlent et qu'un design différent peut émerger. Si je vais dans un terrier de lapin, mon partenaire de jumelage peut m'en sortir. Parler / expliquer quelque chose à un véritable être humain a ce merveilleux effet de rendre vos pensées plus claires d'une manière ou d'une autre. Parfois, ça me manque d'être dans le "flow", mais je pense que je contribue beaucoup plus à mon équipe lorsque je fais du programme en binôme que lorsque je programme en solo. Après toute programmation! = Taper. La programmation se fait dans le cerveau et une meilleure programmation se produit lorsque deux cerveaux collaborent et se critiquent mutuellement.

uttamkini
la source