# Programmation en binôme

La programmation en binôme (de l'anglais pair programming), parfois appelée programmation par pairs ou binômage, est une méthode de travail dans laquelle deux développeurs travaillent ensemble sur un même poste de travail. La personne qui rédige le code est appelée conducteur (driver). La seconde personne, appelée observateur (observer), assiste le conducteur en décelant les imperfections, en vérifiant que le code implémente correctement le design et en suggérant des alternatives de développement. Les rôles s'échangent régulièrement pendant la séance de programmation. La programmation en binôme fait partie des bonnes pratiques de l'extreme programming.

## Bénéfices
### Qualité et productivité

Un des freins à l'adoption de la programmation en binôme en entreprise est l'idée que deux personnes travaillant sur un même projet constituent un gaspillage de ressources humaines. Plusieurs études se sont intéressées à la productivité relative des binômes face aux programmeurs seuls. Pour éviter l’ambiguïté entre temps passé et temps total par programmeur, Kim Man Lui (en) définit une mesure de l'effort relatif consenti par un binôme (de l'anglais relative effort afforded by pairs, abrégé en REAP) de la façon suivante : $\textstyle {\frac {(ElapsedTimeOfPair)\times 2-(ElapsedTimeOfIndividual)}{ElapsedTimeOfIndividual}}$ où $\scriptstyle ElapsedTimeOfPair$ représente le temps passé par un binôme et $\scriptstyle ElapsedTimeOfIndividual$ le temps passé par un programmeur seul.
Équation en français: $\textstyle {\frac {(\textstyle TempsPass{\acute {e}}ADeux)\times 2-(TempsPass{\acute {e}}Seul)}{\textstyle TempsPass{\acute {e}}Seul}}$ où $\scriptstyle \textstyle TempsPass{\acute {e}}ADeux$ représente le temps passé par un binôme et $\scriptstyle \textstyle TempsPass{\acute {e}}Seul$ le temps passé par un programmeur seul.
Une valeur nulle de REAP indique qu'un binôme utilise exactement la moitié du temps nécessaire à un programmeur seul pour réaliser la même tâche. Une valeur de REAP comprise entre 0 et 100 % indique qu'un binôme réalise une tâche plus rapidement mais nécessite davantage d'heures-hommes. Une première étude réalisée en 1998 rapporte une valeur de 59,4 %. Une autre étude complète ces résultats en indiquant qu'après une période d'ajustement, ce taux descend à 15 %. La programmation en binôme est donc particulièrement utile lorsqu'il est nécessaire de réduire le délai de mise sur le marché d'un logiciel.
La programmation en binôme permet également une détection plus rapide des bugs, notamment par l'application continue de la revue de code par l'observateur. De manière générale, un binôme conçoit des applications de meilleure qualité qu'un programmeur seul. Cette différence s'explique par la nécessité pour un binôme de s'accorder au préalable sur la conception de l'application à produire en proposant un raisonnement justifié. La programmation en binôme amène alors à des applications passant davantage de tests et ayant des fonctionnalités implémentées avec moins de lignes de code.
Économiquement, le surcoût en personnel induit par la programmation en binôme est compensé par la hausse de qualité de l'application produite. Plus un défaut est décelé tard et plus il est coûteux de le corriger. Ainsi, la correction tardive des défauts supplémentaires d'une application développée par un programmeur seul est quinze à soixante fois plus coûteuse.

### Communication

La programmation en binôme est une activité sociale qui nécessite d'apprendre à travailler avec les autres. Elle favorise ainsi la communication au sein d'une équipe en encourageant les développeurs à parler entre eux. En outre, elle permet d'améliorer les compétences communicationnelles qui sont généralement peu travaillées pendant l'apprentissage de l'informatique. Cette pratique a également pour effet de renforcer les liens entre les développeurs et de créer un esprit d'équipe.
De plus, la programmation en binôme améliore le plaisir des programmeurs et la confiance dans leur travail. De nombreux sondages attestent que plus de 90 % des développeurs préfèrent programmer en binôme plutôt que seuls.

### Apprentissage
#### Milieu universitaire

L’utilisation de la programmation en binôme appliquée dans le milieu universitaire permet une amélioration globale des notes des étudiants les plus faibles, sans pour autant diminuer les notes des plus forts ; de plus, il permet une meilleure intégration des femmes et des minorités au sein des cursus informatiques.
La mise en place de binômes au sein d'un cours à l'université améliore également la qualité du travail effectué. De plus, le travail en binôme permet un échange plus aisé entre les étudiants, mais également avec le professeur, voire de réduire les différences pédagogiques entre les professeurs.

#### En entreprise

Au sein d'une entreprise, le développement en binôme encourage un transfert de connaissances techniques entre les membres de l'équipe, notamment lorsqu'un développeur considéré comme novice travaille avec un expert. Le novice peut non seulement apprendre de nouvelles technologies grâce à l'expert, mais aussi apprendre de bonnes pratiques ou découvrir de nouveaux logiciels utiles au développement.

## Indicateurs de non-performance

La plupart des développeurs sont conditionnés pour travailler seul et l'adoption de la programmation en binôme est parfois délicate. Si la transition s'effectue généralement avec succès, il existe quelques indicateurs qu'un binôme ne fonctionne pas :
* Silence : la programmation en binôme nécessite de programmer à voix haute et de partager son point de vue avec son partenaire. Un silence persistant indique un manque de collaboration.
* Désengagement : un des membres se désintéresse du projet et vaque à ses occupations.
* Effacement : lorsqu'un membre est plus expérimenté qu'un autre, le novice se contente d'observer l'expert réaliser la majorité des tâches de développement.
* Problèmes relationnels : les deux membres du binôme ne s'entendent pas et ne souhaitent pas travailler ensemble.

## Programmation à distance

La programmation en binôme peut également être établie à distance. Dans ce cas, des outils dédiés au travail collaboratif sont souvent mis en place, en vue notamment de partager l’affichage (Mikogo) ou le code source (XPairtise, Saros, Cloud9), de communiquer à distance (Skype), ou encore d'exécuter des instructions sur une machine distante (SSH).
La communication au sein du binôme peut être perturbée par plusieurs éléments. Différents problèmes techniques tels qu'une coupure réseau ou des messages d’erreur dans un logiciel peuvent faire perdre du temps au binôme. De plus, le manque de communication non verbale rend parfois l'échange plus difficile. Cependant, des outils de dessin, la sélection de code ou le curseur peuvent compenser ces problèmes de communication. Enfin, on note également certains avantages, comme les modifications mineures de code sans perturber le binôme.
La programmation en binôme à distance modifie les rôles définis par la programmation en binôme classique. En effet, avoir deux écrans affichant le même code source rend l’observateur souvent plus actif. Deux situations peuvent être constatées :
* soit les membres du binôme continuent à travailler ensemble sur la même tâche, auquel cas le rôle de l’observateur est conservé, celui-ci se contentant de modifications mineures du code ;
* soit chaque membre travaille sur une tâche différente. Dans ce cas, le travail commence par une phase de discussion avant une phase de développement en solo.