Quels sont les inconvénients possibles de la programmation par paires? [fermé]

22

La programmation par paires est assez célèbre de nos jours.

Il présente plusieurs avantages comme:

  1. Programmes avec moins de bugs.
  2. Le coût de maintenance post-production est beaucoup moins élevé.
  3. Les pratiques établies sont remises en cause, entraînant l'émergence de nouvelles idées.
  4. Les programmeurs apprennent les uns des autres.
  5. Les programmeurs développent des compétences générales.

Mais quels sont les inconvénients de la programmation par paires?

oiseau libre
la source
1
Le «parallèle» dans le titre de la question est-il une faute de frappe?
5gon12eder
14
Vous voulez dire autre que le fait qu'il faut deux personnes pour produire la même sortie (peut-être moins)?
Robert Harvey
4
@ ThorbjørnRavnAndersen C'est probablement moins.
Robert Harvey
4
@ ThorbjørnRavnAndersen Quelque chose ne va pas avec vos calculs. Fondamentalement, ce que vous dites, c'est que vous êtes constamment en révision par des pairs / du code. Il est difficile d'imaginer comment cela est plus économique en temps.
Robert Harvey
5
Cela peut être accompli assez facilement sans la distraction d'un arrangement complet de programmation par paires. Travaillez simplement avec vos collègues développeurs de logiciels à ce titre selon les besoins.
Robert Harvey

Réponses:

28

Bien que la programmation par paires ait acquis une réputation considérable, elle présente également plusieurs écueils.

Certains d'entre eux sont les suivants:

  1. Dans la programmation par paires, vous ne pouvez pas vous asseoir et auto-évaluer votre propre code.
  2. L'un des deux peut cesser d'être activement engagé.
  3. Le pilote doit "programmer à haute voix". La programmation silencieuse réduit les avantages.
  4. Il en coûte plus d'heures de travail pour produire les mêmes fonctionnalités. Un équilibre doit être maintenu entre la qualité du code et l'augmentation des coûts de codage.
  5. Un phénomène de «surveillance du maître» peut survenir lorsqu'un programmeur expérimenté et un programmeur novice s'associent. Le membre novice peut devenir l'observateur, le membre expérimenté effectuant la plupart du codage.
  6. Lorsque deux utilisateurs expérimentés s'associent, un phénomène d '«ego de développeur» peut survenir, chaque membre essayant de pousser ses propres idées.
oiseau libre
la source
4
2 et 5 peuvent être contrés avec l'appariement Ping-Pong (changement de rôle entre le pilote et le navigateur très rapidement en étape de verrouillage avec le cycle TDD: Alice écrit le test qui échoue, Bob écrit le code pour réussir le test, Alice refactors, Bob écrit le test qui échoue, Alice écrit du code pour réussir le test, Bob refacteurs, Alice écrit un test qui échoue…). De cette façon, le pilote et le navigateur changent de rôle au plus tard toutes les deux minutes (plus comme des dizaines de secondes), et chaque membre obtient des tâches tout aussi importantes et importantes.
Jörg W Mittag
5
4 semble évident, mais je ne suis pas sûr. Par exemple, la détection de bogues et l'obtention de commentaires précoces peuvent (ou non) compenser les heures de développement doublées.
Jörg W Mittag
4
@ JörgWMittag (re: jumelage Ping-Pong) ressemble à une recette pour une journée de travail très stressante: / J'espère que je n'aurai jamais à programmer dans un endroit où ils appliquent ceci ou tout type de méthodologie de programmation de paire stricte.
Andres F.
4
La programmation de ping-pong exige que les deux impliqués soient essentiellement interchangeables. J'ai un collègue où la seule combinaison de programmation de paire sensible est de le faire réfléchir et me taper (et réfléchir). Cela l'aide à rester concentré et à comprendre ce qui se passe.
Thorbjørn Ravn Andersen
3
Vous pouvez également mentionner que vous perdez un certain temps à discuter de détails triviaux alors que dans les revues de code, vous ne pouvez vous concentrer que sur des aspects importants.
Giorgio
24

J'ai essayé plusieurs fois la programmation par paires, y compris dans une organisation qui a (brièvement) envisagé de la déployer comme un processus obligatoire pour tous les ingénieurs (vous pouvez deviner à quel point cette idée a bien fonctionné). Personnellement, je détestais ça.

Les raisons que j'énumère ci-dessous ne sont que mes expériences subjectives et je ne peux pas «mesurer» leur impact en termes concrets. Mais ici, c'est pareil:

1 - Avoir un «navigateur» et un «chauffeur» n'aide que si le premier est vocal et que le second écoute.

Nous avons tous rencontré des développeurs qui sont têtus, zélés à propos de certaines préoccupations théoriques ou pathologiquement incapables - psychologiquement - de `` jeter '' de vieux travaux lorsque quelqu'un suggère un problème avec cela. Et nous connaissons tous des individus trop timides ou hésitants pour soulever des préoccupations ou suggérer des cas de coin.

Lorsque ces types de développeurs sont associés, le navigateur joue rapidement un rôle passif, et vous vous retrouvez avec une seule programmation avec une révision automatique du code. Il s'agit d'un gaspillage monumental de ressources.

2 - Le jumelage empêche la créativité.

Contrairement à ce qui était auparavant ressenti à propos de la valeur du «brainstorming de groupe», le consensus est de nos jours que le travail de connaissance créative requiert indépendance et autonomie . Lorsque vous travaillez seul, vous pouvez rapidement pirater une idée folle pour voir si c'est réellement possible. Vous pouvez assembler sans un mot un étrange prototype, et si vous échouez, cela n'a pas d'importance, car personne ne le sait .

Comparez cela à l'appariement: lorsque je veux essayer un nouveau concept, je dois convaincre mon partenaire, lui parler de la mise en œuvre, étape par étape, et espérer qu'il ne me jugera pas s'il échoue. Ce genre d'environnement est toxique pour créer de nouvelles idées.

3 - Conception du plus petit dénominateur commun.

Lorsqu'une paire ne peut pas faire émerger de nouvelles idées, comme ci-dessus, ou lorsque les individus ne peuvent pas s'entendre sur un principe fondamental de la façon dont une fonctionnalité doit être conçue, ce qui en ressort est un design confus qui tente de compromettre et de ne satisfaire personne.

Si vous associez un développeur qui construit des abstractions de programmation fonctionnelles merveilleuses, éloquentes et vers le ciel avec un monstre de performance rapide et sale, le code qu'ils produiront ensemble ne sera généralement ni terriblement élégant ni particulièrement rapide.

4 - Manque d'autonomie et de transparence violente.

La transparence violente est une phrase que j'ai tirée d'une polémique modérément célèbre (et assez controversée) contre la méthodologie Scrum. Il décrit la manière dont certaines organisations infantilisent les développeurs et les traitent avec la suspicion normalement réservée aux travailleurs non professionnels.

Quoi que vous pensiez des `` inconvénients '' de rendre le travail des développeurs entièrement transparent (et vous ne serez peut-être pas d'accord pour dire que c'est en fait un préjudice), de nombreuses personnes apprécient leur autonomie et leur capacité à travailler seules, en qui elles ont confiance pour faire la bonne chose. C'est un besoin psychologique important, et forcer les développeurs à s'associer (comme je l'ai vu se produire dans au moins un magasin) laissera les employés consternés, contrariés et aliénés.

5 - Certains développeurs ne jouent tout simplement pas bien par paires.

Certaines personnes ne se conduisent pas ou ne peuvent pas se conduire correctement dans un environnement jumelé. Ils peuvent avoir une mauvaise hygiène, de mauvaises habitudes de travail, une personnalité abrasive, une manière `` forte '' et `` intense '', ou toute une série d'autres attributs qui font d'eux de bons travailleurs individuels, mais de mauvais programmeurs.

Peux-tu le résoudre? Pas vraiment. Changer le comportement personnel est difficile. Un magasin de programmation en binôme doit faire très attention à l'embauche et investir beaucoup de temps pour voir comment quelqu'un travaille et s'il pourra bien travailler avec ses pairs. Discriminer plus durement sur la personnalité, cependant, signifie que l'embauche prendra plus de temps, sauf si vous assouplissez vos normes en matière de compétences et d'expertise.

Jimmy Breck-McKye
la source
3
Bien que j'aime l'expression "transparence violente", mon expérience a montré que la méthodologie préférée (scrum / agile ou quelque chose de plus traditionnel) n'a aucun rapport avec le fait que les développeurs soient traités comme des professionnels ou non. Les organisations dysfonctionnelles traiteront les professionnels comme des enfants, qu'ils fassent (semblant) de suivre Scrum ou CMMI.
David
1
"Comparez cela à l'appariement: lorsque je veux essayer un nouveau concept, je dois convaincre mon partenaire, lui parler de la mise en œuvre, étape par étape, et espérer qu'il ne me jugera pas s'il échoue. Ce genre de l'environnement est toxique pour créer de nouvelles idées. ": Il ne s'agit pas seulement de jugement, c'est de vitesse. Vous ne voulez pas être distrait quand vous avez une idée, vous voulez écrire autant que vous le pouvez tant que vous êtes en mouvement. La programmation par paires vous empêche activement de le faire.
Giorgio
1
Après avoir écrit toutes vos idées, vous pouvez les ranger, peut-être le lendemain et, après cela, laisser un collègue faire un examen approfondi, par exemple sur un outil comme le comité d'examen, afin qu'il ait tout le temps de regarder votre idées finies et pensez-y sans pression de temps. La programmation par paires empêche également cela car elle essaie de combiner le codage et la révision du code en une seule activité.
Giorgio
2
@Jimmy: Si vous aviez écrit cinq réponses au lieu d'une réponse avec cinq points, vous obtiendriez cinq votes positifs de ma part.
Giorgio
Je suis tout à fait d'accord pour dire que l'expérimentation nécessite un travail silencieux et rapide - exactement le contraire de ce que le jumelage exige. Le couplage fonctionne peut-être bien pour les développeurs effectuant la maintenance ou ajoutant des fonctionnalités discrètes à un grand système d'entreprise existant. Mais je suis certain que cela ne sert à rien pour un travail qui nécessite de la découverte, de nouvelles technologies, de l'ingéniosité ou des façons créatives de travailler avec des contraintes difficiles.
Jimmy Breck-McKye
12

Cela dépend de votre situation ou de votre point de vue.

La programmation en binôme est bonne pour l'organisation. Mais est-ce bon pour l'individu?

Après tout, c'est une méthode de réduction des coûts (rétroaction précoce) et de productivité; Il ne s'agit pas de vous mais du projet, du produit, de l'entreprise ($$).

Bien que vous puissiez avoir des avantages personnels, ils ne sont ni la raison ni la fin de toute méthodologie de développement. La programmation en couple (à temps plein), par exemple, vous empêche également de vous relâcher, de surfer, etc., vous devez justifier vos pauses auprès de votre partenaire.

Votre partenaire (rotatif) sera la meilleure caméra de surveillance: l'intensité du travail augmente.

Ou bien, en distribuant les connaissances, l'individu devient moins risqué pour l'entreprise (par exemple, ne peut pas quitter l'entreprise avec les connaissances essentielles) et a moins de «moyens de négociation».

Je suis sûr que vous trouvez plus de points en lisant des articles affirmatifs de manière plus critique de VOTRE situation / point de vue réel dans l'entreprise plutôt que du point de vue de votre manager.

Presque toutes les méthodologies sont écrites du point de vue du gestionnaire.

Un invité
la source
Sauf si vous êtes propriétaire de l'entreprise, vous recevez de l'argent pour générer du code. Le meilleur code que vous pouvez produire est le meilleur pour votre employeur - penser à des moyens d'avoir des contre-pouvoirs contre votre employeur, à mon avis, ne comprend pas ce qui vous rend précieux en premier lieu. Je crois que PP est si intensif que vous ne pouvez pas le faire toute la journée, mais qu'il a automatiquement besoin de repos.
Thorbjørn Ravn Andersen
7
Étant donné que certaines personnes sont obligées de gagner leur vie en «étant précieuses pour un employeur», elles doivent également calculer en fonction de leurs propres intérêts, et pas seulement en tenant compte des intérêts de leurs employeurs, comme les sbires.
Un invité
1
@ ThorbjørnRavnAndersen nous ne vivons pas dans un monde idéal, où tout le monde paie des impôts et tout le monde est rémunéré en fonction du mérite.
Den
1
@ ThorbjørnRavnAndersen Le meilleur code est le mieux pour mon employeur? Je souhaite avoir vécu dans un monde comme ça, dans mon monde ce qui compte est de produire des fonctionnalités aussi rapidement que possible, où la qualité du code n'est qu'une valeur douce intermédiaire qui ne devrait pas prendre plus de temps que nécessaire. Les bugs sont ok, ils ne sont généralement pas graves et facilement corrigés.
Alex
@Alex "habituellement pas sévère" - Je
désire
5
  1. Soudain, vous devez maintenant dire à quelqu'un quand vous voulez aller aux toilettes ou prendre un café. Au moins, il n'est pas nécessaire de demander la permission.

  2. Vous devez vous conformer aux normes d'hygiène de l'autre personne.

Tanière
la source
4

En plus d'autres réponses:

  1. De nombreuses entreprises pour lesquelles j'ai travaillé délivrent à leurs programmeurs des ordinateurs portables (basés sur le site des clients - plus facile de garder l'équipement en sécurité s'il est ramené à la maison après le travail, être en mesure de faire le petit boulot de la maison sur VPN en un rien de temps, etc.) De nombreuses années Il y a déjà, j'avais des problèmes à voir sur l'écran du portable d'une autre personne (le "conducteur") du point de vue de l'épaule - l'âge n'améliorera pas cela (et certains écrans deviennent difficiles à lire en dehors de l'angle de vue idéal dans tous les cas).

    Les programmeurs de paires auront donc besoin d'écrans suffisamment grands, ce qui augmentera le coût du matériel et limitera l'adaptabilité à l'emplacement. Peut ne pas être un problème pour certains, dans d'autres cas, ce sera un problème.

  2. J'ai également constaté que les différences dans les préférences d'hygiène personnelle (y compris le tabagisme, l'alimentation et la boisson), ainsi que les conflits de personnalité, sont tenus d'entraver la productivité. Il est assez facile de dire à deux programmeurs de "sucer et s'entendre", souvent cela conduira les gens à garder la bouche fermée et à se saboter silencieusement via des actions passives-agressives pour évacuer leurs ressentiments l'un envers l'autre.
  3. Bruit. Pour ma part, j'aime un environnement de travail calme. Je ne peux pas imaginer le bavardage constant de certains groupes de programmeurs de paires (car vous devez parler pour la communication). Même la musique vocale sur mon casque a tendance à interférer avec ma concentration (instrumentaux fades pour une écoute de bureau ...). Je suppose que cela peut être atténué en quittant le bureau ouvert omniprésent pour des salles de bureau dédiées à 2 personnes, mais cela fera encore augmenter les coûts.

Anecdotes pour votre amusement:

  • Un ancien employeur a fait venir un entrepreneur d'un autre pays (le tout pour rester anonyme pour protéger les coupables). L'employeur a fourni le logement mais pas le transport. Étant donné que ledit entrepreneur vivait le long de mon itinéraire de travail, je me suis porté volontaire pour le ramasser et le déposer à nouveau. Disons que son hygiène personnelle n'était pas au même niveau que ce à quoi je suis habitué, et il fumait aussi beaucoup ("le plus fort!") Alors que je ne le fais pas. Lors de notre voyage de 15 minutes au bureau, j'ai gardé ma fenêtre baissée - même en hiver - ce qui n'a pas empêché ma voiture de sentir comme un fumoir périmé après le passage de 3 mois du collègue (non, il n'a pas fumé dans la voiture , mais il l'a fait en m'attendant).
  • Nous n'avons pas non plus fait de programmation par paires, mais nous nous sommes assis côte à côte à une table de conférence (pendant un certain temps). Après environ un mois, il y avait un joli anneau marron sur le faux bois de la table autour de la position de la main de la souris du collègue. À ce moment-là, j'ai eu un bureau ouvert juste à côté de la zone ouverte du centre d'appels, que j'ai préféré (avec l'aide de mes écouteurs).
  • Ensuite, il y a la boisson de bureau omniprésente: le café. Bien que je le boive, je peux m'entendre sans et ne bois pas aussi souvent que les autres collègues. Les respirations à courte distance peuvent être assez désagréables - similaires à l'odeur de tasse vide oubliée. Appelons le parfum "muggy" ...
fr13d
la source
3

Je pense que la programmation en binôme échoue pour des raisons sociales et pratiques. Essentiellement, vous demandez à une personne de travailler sous surveillance constante et à l'autre de ne faire que des trous.

Ce qui se passe inévitablement après un certain temps, c'est que la paire se sépare pour `` vérifier les e-mails '' ou `` vous continuez de vérifier mal ce problème en direct '', etc.

Plutôt que d'améliorer la sortie du code, le volume est diminué. À la fois pour des raisons pratiques `` J'ai besoin d'aller déjeuner / réunion désynchronisé avec vous '' et social `` Je vais juste attendre que Bob termine ce qu'il fait avant de demander à nouveau de me jumeler, je ne veux pas être perçu comme le harcelant ''

En ce qui concerne les avantages tant vantés, il existe de nombreuses pratiques courantes qui permettent de les atteindre de manière plus simple et efficace

Ewan
la source
2

Dire à deux développeurs seniors de faire une "programmation douloureuse" s'ils sont convaincus que l'on peut faire le travail est imo on du plus gros désavantage.

klm_
la source