Andreas Kundig @andreaskundig
David Hodgetts @David_Hodgetts
bio respectivesLa programmation en binôme (ou pair programming en anglais) est une méthode de travail dans laquelle deux développeurs travaillent ensemble sur la même partie de code, en binôme sur un même poste de travail
le premier, appelé pilote (driver), a le clavier. C'est lui qui va travailler sur la portion de code à écrire. le second, appelé copilote (partner), est là pour l'aider, en suggérant de nouvelles possibilités ou en décelant d'éventuels problèmes.Les rôles s'échangent régulièrement pendant la séance de programmation.
Kent Beck popularise la pratique avec les méthodologies de l'Extreme Programming...
...la pratique est néanmoins plus ancienne:
Dans les années 50, Fred Brooks, l'auteur de "Mythical man month" évoque un projet qu'il a réalisé en pair à l'époque de ses études: "we produced 1500 lines of defect free code; it ran correctly the first time"
Dans les années 70, Dick Gabriel, le concepteur de Common Lisp et "l'inventeur" des patrons de conception évoque des sessions de binomage.
Dans les années 80, Larry Constantine parle de "dynamic duos".
Dans les années 90 James Coplien, publie dans un papier de recherche de Bell Labs "Developing in pairs": "Some problems are bigger than any one individual"
Constantine, human centered computing. structured design. cohesion coupling Avec l'extreme programming Kent Beck formalise la démarche appliquée dans un projet qui devait remplacer une grosse application cobol par du smalltalk. Après un succès initial et de nombreuses péripéties comme le rachat de l'entreprise, le smalltalk a finalement été remplacé par du cobol. david. Je viens d'une autre métier. La pratique s'y retrouve sans le nom."Cadavre exquis" pour des animations javascript.Vanilla js + canvas + un peu de node.jsFonctions et structures de données plutôt que de l'orienté objet.
L'idée du projet est de faire une espèce de cadavre exquis pour des animations javascript. (montrer exquis) La technologie que nous voulions explorer était javascript avec canvas. Nous avons utilisé aussi peu de librairies que possible (require.js pour organiser le code, async pour quelques tests). L'idée était aussi de programmer dans un style plutot fonctionnel en évitant les différentes variantes du javascript orienté objet et la chaine des prototypes.cerveau + cerveau = ?
A priori les cerveaux ne s'additionent pas, on ne fait pas quelqu'un d'intelligent avec plusieurs imbéciles. On n'accélère pas un projet en ajoutant des développeurs et neuf femmes ne font pas un enfant en un mois. En travaillant à deux sur le même projet, nous avons quand même eu l'impression de disposer de davantage de ressources mentales comme la discipline, la concentration, l'imagination.Voix ou voix + vidéo
accrocher des ipads avec skype pour simuler la présence les options et question à se poser pour réussir le remote pp.Screen sharing (teamviewer, skype, etc.)
Terminal sharing (screen, tmux)
Funky cloud stuff (floobits, screenhero.com, cloud 9)
487 sondés106 ont déja pratiqué le pair programming (21.7%)
64.4% pense que la pratique fonctionne pour eux
62.8% pense que la pratique fonctionne pour leur partenaire
48.2% estime que la pratique est bénéfique pour l'équipe
39.2% estime que la pratique est bénéfique pour l'organisation.
This reflects the grassroots nature of pair programming adoption at Microsoft. Individual teams are trying out pair programming, but are finding it difficult to get management buy-in to spread the practice. les gens pensent que c'est bien mais qu'il auront de la peine à convaincre l'organisation.“greater understanding of a larger codebase across the team.”
“higher quality code in terms of consistency with guidelines.”
“quickly ramp-up new members,”
enables “users to learn new techniques faster.”
“every-one learns constantly from each other.”
1. Fewer Bugs
2. Spreads Code Understanding
3. Higher Quality Code
4. Can Learn from Partner
5. Better Design
6. Constant Code Reviews
7. Two Heads are Better than One
8. Creativity and Brainstorming
9. Better Testing and Debugging
10. Improved Morale
ça ressemble pas mal à notre expérience.“if I have a choice, I can employ one star programmer instead of two programmers who need to code in a pair.”
Pairing “reduces the freedom of work hours of individual contributors.” (scheduling)
“Many partnerships fail due to personality conflicts,” (personality clash) - “pairs get sick of each other.”
“Sometimes we waste time on discussion,”
“tends to drag the faster/smarter/better person down.”
“if the partners‟ abilities are imbalanced, it could be that one partner become obsolete in the process.”
1. Cost efficiency
2. Scheduling
3. Personality clash
4. Disagreements
5. Skill differences
6. Programming style differences
7. Hard to find a partner
8. Personal style differences
9. Distractions
10. Misanthropy
10. Bad Communication
10. Metrics/Hard to Reward Talent
“usually looks at things from a different angle.”
“able to think … even [from] a different role (e.g. test and dev together).”
“blocks on different things than I do,”
“some-one who complements my thinking and skills in terms of technical and design skills.”
“willing to cooperate and step away from the PC with me to work on design or other details.”
“able to adapt to different working styles.”
“good listener,”
“articulate,”
“enjoy debating and discussing code,”
“sense of humor,”
“comfortable with people around them.”
1. Complementary Skills
2. Flexibility
3. Good Communications
4. Smart
4. Personable
6. At Least the Same Skills as Me
7. Strong programmer
7. Better Skills than Me
7. Able to Focus
10. Knowledgeable
“Communication, communication, communication.” (this is MS after all ; ))
An ideal team “consists of easy-going people who want to listen and share ideas with each other.”
“A little diversity here is good.”
“cooperative personalities, they work well together, rather than trying to compete with one another.”
“permissive to mistakes.”
1. Good Communications
2. Complementary Skills
3. Compatible Personalities
4. Team Works Effectively
5. No Ego
6. Fast and Efficient
7. Flexibility
8. Common Goals
8. Good Quality
10. Same programming skills
10. Collaborative
10. Work Well Together
Take breaks
Practice humility
Be confident / be receptive
Communicate
Listen
Be a team player
Hone the balance between compromise and standing firm
"suitable length for pairing session 1.5h to 4h (pairing can be mentally exhausting)"
"frequent pair rotation is beneficial for knowledge spread"
"rotating roles (driver, navigator) is important to keep both partners engaged."
"possession of keyboard as a subtle effect on decision making, with the driver often being the final decision maker"
"frequent switching of the keyboard helps keep both partners engaged."
"PP must be structured and organised (proclaimed hours for PP) (space layout, large desk, large screen, wireless mouse and kb, whiteboards, and isolation, pairs make noise)"
tête à tête (Pivotal labs)
Williams combine ses résultats avec des mesures de moyennes tirées d'autres études:
22 lignes de code écrites par heures 6 bugs pour 1000 lignes 1 semaine pour corriger un bug trouvé chez le clientElle calcule la productivité en lignes de code correctes par heure-personne et obtient:
4.3 en solo 7.4 en binôme restons méfiant sur ces études. Difficile de mesurer le code. On a lu pour vous certain de ces papers, et c'est pas convainquant.Gain de qualité du code
Meilleure répartition du savoir
Cycle plus rapide
Plus de motivation et meilleur esprit d'équipe
Les habitudes du solo programming
Les raisons économiques ("ça coûte le double")
Les difficultés de coordination
Les habitudes du solo programming
coding dojo, code retreat, petit projet pilote
pingpong tests.Les raisons économiques
Commencer petit, gagner une meilleure compréhension de la pratique, projet pilote
Les difficultés de coordination
Meeting quotidien pour dynamiquement créer les paires en fonction des tâches du jour