Bonjour à tous, c'est à nouveau Dima Vdovin. Dans mon précédent article sur l'intégration de Juns dans une équipe, j'ai brièvement abordé la programmation en binôme en tant que pratique d'enseignement et d'apprentissage efficace. Je voudrais maintenant parler plus en détail de la pratique de la programmation en binôme en équipe. J'en ai essayé différentes variantes sur différents projets, et aujourd'hui je voudrais juste partager ce que je vois là-dedans comme les avantages de cette approche.
Programmation en binôme
Il me semble que pour expliquer le fonctionnement de la programmation en binôme, on peut prendre l'exemple du rallye. Il y a un pilote (pilote) et un navigateur (navigateur). Le conducteur se concentre directement sur la conduite. Le navigateur contrôle où nous allons maintenant et informe le pilote des prochains virages et sauts.
Il en va de même pour la programmation par paires.
Le pilote se concentre sur l'écriture de code, ici et maintenant. À ce moment-là, le navigateur tient toute l'image devant lui, vérifie que le conducteur ne fait pas d'erreurs et dit où et comment passer.
La seule différence majeure avec les courses de rallye est que dans la programmation en binôme, le pilote et le copilote doivent périodiquement changer de place. La distribution des fonctions coïncide presque complètement.
C'est la pleine inclusion des deux participants dans la programmation en binôme dans le processus qui distingue cette méthode des autres méthodes d'apprentissage et de contrôle. D'une part, nous n'autorisons pas le pilote à écrire le code de manière totalement indépendante et ne soumettons pas le «produit» fini à l'examen conditionnel du navigateur. Dans le même temps, le pilote se concentre non seulement sur des lignes de code spécifiques, mais doit voir la zone qu'il crée dans une perspective large. La même chose s'applique à notre navigateur.
En plus de ce schéma classique de programmation par paires, plusieurs approches plus efficaces ont été créées au cours des années d'existence de l'industrie. Par exemple, l'approche ping-pong ou navigateur de la banquette arrière est populaire. Certaines personnes pratiquent généralement le mélange de différentes techniques. C'est normal. L'efficacité de telle ou telle méthode dépend des objectifs et de la composition des participants: qui participe au binôme, ce qu'ils veulent réaliser, l'expérience des deux codeurs. À propos, la programmation en binôme est tout à fait applicable non seulement dans une paire mentor-junior, que j'ai mentionnée dans le dernier article, mais aussi dans une paire de deux codeurs expérimentés d'environ le même niveau.
Ensuite, discutons un peu plus largement des options de configuration pilote + navigateur, en fonction des objectifs de la programmation par paires.
Formation débutant
La programmation par paires est idéale pour enseigner aux débutants et est le plus souvent utilisée pour cela. Cependant, lorsque vous utilisez cette méthode d'entraînement de votre jun, vous devez comprendre que vous sacrifiez la vitesse de développement de la fonctionnalité immédiate si le développement a lieu dans un vrai morceau de code. Dans le même temps, l'équipe gagne sérieusement sur le long terme: la programmation en binôme avec un collègue expérimenté augmente sérieusement la vitesse d'intégration et d'apprentissage d'un Jun.
Mais dans le cadre du cas «formation débutant», juin n'apparaît pas toujours. Par exemple, la programmation en binôme peut être utilisée pour intégrer un intermédiaire conditionnel nouvellement embauché qui doit être rapidement intégré à un projet. Dans ce cas, la vitesse ne baisse pas tellement, et le mentor peut être un collègue comparable à un nouveau venu sur le projet en termes de niveau de compétence. On parle déjà ici du transfert d'expérience et de connaissances non pas en programmation, mais à savoir des connaissances sur un projet spécifique.
En revanche, coder dans une paire de deux middle est un peu plus risqué qu'une paire de juin + milieu ou juin + signor. Le leader dans une paire de deux au milieu doit aborder le processus avec une grande responsabilité, mais si toutes les conditions sont remplies, les avantages pour toute l'équipe sont tout à fait tangibles.
Partage des connaissances et liquidation de la «Tour»
Un problème commun à de nombreuses équipes est la disponibilité de spécialistes irremplaçables. Cela s'applique le plus souvent aux start-ups ou à de petits groupes isolés de développeurs qui ont eux-mêmes vu tranquillement certaines fonctionnalités ou un projet distinct. Un spécialiste irremplaçable est celui qui comprend à fond et individuellement soit une section spécifique du code / projet, soit seulement il a une compréhension complète de la façon dont tout cela fonctionne. Le pool de connaissances sur le projet d'un tel spécialiste est également appelé "Tour de la connaissance".
Un spécialiste irremplaçable ou «tour» est un goulot d'étranglement dangereux qui doit être évité par tous les moyens. Parce qu'un arrêt maladie banal lors de l'intégration de nouvelles fonctionnalités dans la partie combat du projet (ou pendant le déménagement, ou à un autre stade sérieux) - et le travail de l'équipe est paralysé. Sans parler du licenciement de ces développeurs.
Pour éliminer un tel goulot d'étranglement, les spécialistes indispensables devraient partager leurs connaissances avec d'autres développeurs.
Comme il est déjà clair, la programmation en binôme est encore une fois idéale pour partager des connaissances. Seulement dans ce cas, nous ne recevons pas de formation avancée et d'intégration pour un débutant, mais le transfert de connaissances sur des aspects du projet au sein de l'équipe elle-même. Si vous faites une fonctionnalité dans une paire, alors au moins deux personnes le sauront déjà, plus, au cours du processus d'écriture, l'arrière-plan de l'un des membres de la paire sera resserré.
La liquidation de la "Tour de la connaissance" présente un autre avantage qui n'est pas évident pour beaucoup. En plus de décentraliser les connaissances sur les caractéristiques et les domaines spécifiques du projet, nous réduisons également la charge du développeur, autour duquel cette «tour» a été construite à l'origine. En effet, le plus souvent, si l'équipe a un spécialiste irremplaçable, il doit souvent travailler en mode usure, avec des heures supplémentaires, sept jours sur sept lors des sorties, et en général, être disponible 24/7. Toute cette pression constante conduit tôt ou tard à l'épuisement professionnel ou, au mieux, au désir de trouver un travail plus calme.
Utiliser la programmation en binôme de manière proactive est également un excellent moyen d'éviter de construire des tours de connaissances à l'improviste. La circulation constante des connaissances sur les caractéristiques et les différentes parties du projet au sein de l'équipe est un processus normal qui, malheureusement, ne commence à s'organiser qu'au moment du licenciement d'un employé clé. Certes, la programmation en binôme n'est pas la seule façon de gérer les «tours» et d'augmenter le niveau de compréhension du projet au sein de l'équipe, mais c'est une histoire complètement différente.
Résoudre des problèmes complexes
La programmation en binôme peut être utilisée comme un outil de brainstorming local, c'est-à-dire en appliquant littéralement l'adage «une tête c'est bien, deux c'est mieux». La programmation par paires est idéale pour les cas où vous devez implémenter une fonctionnalité ou une logique complexe en fonction des exigences métier du projet. Nous ne parlons plus ici du transfert de connaissances du leader vers l'adepte, mais nous créons un système de deux développeurs, égaux en expérience et en compréhension du projet, qui conjuguent leurs efforts.
Certains développeurs peuvent affirmer qu'ils sont plus à l'aise de travailler seuls sur des zones complexes, mais la pratique montre que deux codeurs puissants dans une paire sont plus susceptibles de produire du code de haute qualité que de travailler séparément.
Les atouts de la programmation en binôme dans de telles situations sont juste en dehors du processus de codage. Au contraire, le gain est obtenu grâce à la capacité de discuter activement sur un pied d'égalité des moyens possibles de résoudre le problème - le processus d'écriture de code dans un tel cas est en arrière-plan et n'est pas un problème. Mais comment et quoi écrire exactement est le problème. La possibilité de communication directe, de discussion et de différend motivé entre deux spécialistes a un effet positif sur la qualité des décisions prises. Le temps nécessaire pour trouver une solution réussie à notre problème est également réduit.
Tâches mixtes
Le dernier cas est une équipe de tous les cas décrits ci-dessus. Ici, nous avons deux développeurs expérimentés avec différents domaines d'expertise, qui unissent leurs forces pour travailler sur une tâche. Peut-être que l'un d'eux est doué pour écrire du code et l'autre est parfaitement familiarisé avec les exigences du projet. De plus, il n'est pas nécessaire qu'il s'agisse de deux programmeurs. Il peut s'agir de paires d'ingénieurs codeur et QA ou de codeur et analyste.
Ici, nous obtenons une situation gagnant-gagnant pure: dans le cas de problèmes mixtes, chaque membre de la paire complète l'autre. De cette façon, nous tirons le maximum du potentiel des deux spécialistes, éliminons leurs faiblesses et n'utilisons que leurs forces.
Dans le même temps, la solution des problèmes mixtes couvre tous les cas précédemment décrits: onboarding, si l'on parle d'une connaissance insuffisante des exigences du projet, et la liquidation de la «Tour», et la résolution d'un cas complexe.
Total
Il est important de comprendre que la programmation en binôme n'est pas une solution miracle et la réponse à tout problème et défi de développement. Dans presque tous les cas, cette méthode entraîne une diminution de la vitesse de développement, il vaut donc la peine d'utiliser cette approche avec prudence.
Aussi, nous ne devons pas oublier le facteur humain: si nous parlons d'enseigner Jun, alors le mentor en binôme doit être capable d'interagir avec le débutant au niveau approprié afin que le processus d'apprentissage ne se transforme pas en coups et en ridicule. Si nous essayons d'éliminer la «Tour», alors la composition de la paire doit être adaptée en conséquence afin que le transfert des connaissances se fasse dans la bonne direction. Il en va de même pour les problèmes complexes et mixtes: vous ne pouvez pas mettre deux développeurs aléatoires sur un même ordinateur et attendre, ils vous donneront une solution toute faite en N heures.
Mais même avec les difficultés exprimées, la programmation en binôme est une excellente pratique qui non seulement résout le problème de l'intégration et de l'enseignement des nouveaux arrivants, mais vous permet également de combler les lacunes de connaissances dans le projet des autres membres de l'équipe ou de résoudre efficacement un problème complexe.