From 2c661eb8ac0a2e39457fc341da3c53c7a1fbb0ef Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Thu, 24 Oct 2024 14:57:37 +0100 Subject: [PATCH 01/10] Add extra guidance on mentored pair programming We want to specifically call out to volunteers that, unlike in other pair programming, they're not meant to write code _or_ say what code to write. --- .../content/pair-programming/_index.md | 19 +++++++++++++ .../pair-programming/{ => guidance}/index.md | 23 ++++----------- .../pair-programming/mentored/index.md | 28 +++++++++++++++++++ 3 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 org-cyf-guides/content/pair-programming/_index.md rename org-cyf-guides/content/pair-programming/{ => guidance}/index.md (58%) create mode 100644 org-cyf-guides/content/pair-programming/mentored/index.md diff --git a/org-cyf-guides/content/pair-programming/_index.md b/org-cyf-guides/content/pair-programming/_index.md new file mode 100644 index 000000000..e4933a7e8 --- /dev/null +++ b/org-cyf-guides/content/pair-programming/_index.md @@ -0,0 +1,19 @@ ++++ +title = 'Pair programming' +description = 'Practice writing code and getting support' +emoji = '👥' ++++ + +Pair programming is an excellent way to develop programming and communication skills. + +It is often much easier to work through something when working on something 1-to-1. + +It is also helps our trainees to prepare for technical interviews when they'll need to code in front of other people. + +## What + +Pair programming is working together with someone else to code a solution to a problem. + +Pick a piece of programming to do, find a buddy, and work on it together. + +Sometimes one person does all of the writing, and has discussion with the other. Other times, people take turns writing. diff --git a/org-cyf-guides/content/pair-programming/index.md b/org-cyf-guides/content/pair-programming/guidance/index.md similarity index 58% rename from org-cyf-guides/content/pair-programming/index.md rename to org-cyf-guides/content/pair-programming/guidance/index.md index 980fc658a..4b6416866 100644 --- a/org-cyf-guides/content/pair-programming/index.md +++ b/org-cyf-guides/content/pair-programming/guidance/index.md @@ -1,30 +1,19 @@ +++ -title = 'Pair programming' +title = 'Guidance' description = 'Practice writing code and getting support' emoji = '👥' +weight = 1 +++ -Pair programming is an excellent way to develop programming and communication skills. +## How -It is often much easier to work through something when working on something 1-to-1. +You can do pair programming in person (sharing one computer), or remotely (either by sharing your screen, or using something like [CodeTogether](https://marketplace.visualstudio.com/items?itemName=genuitecllc.codetogether)). -It is also helps our trainees to prepare for technical interviews when they'll need to code in front of other people. - -## What - -Pair programming is working together with someone else to code a solution to a problem. - -Pick a piece of programming to do, find a buddy, and work on it together. - -You can do this in person (sharing one computer), or remotely (either by sharing your screen, or using something like [CodeTogether](https://marketplace.visualstudio.com/items?itemName=genuitecllc.codetogether)). - -Sometimes one person does all of the writing, and has discussion with the other. Other times, people take turns writing. - -## Guidance for trainees +## Guidance for learners When approaching a problem, you need to **explain your thought process**, **plan out what to do**, **write the code**, and **check that it works**. -## Guidance for volunteers +## Guidance for mentors **Help people learn**: Most of the exercises the trainees are doing aren't useful in their own right. The point is for the trainee to learn and grow through them. Focus on understanding, and techniques that will help solve the next problem. diff --git a/org-cyf-guides/content/pair-programming/mentored/index.md b/org-cyf-guides/content/pair-programming/mentored/index.md new file mode 100644 index 000000000..264c56de1 --- /dev/null +++ b/org-cyf-guides/content/pair-programming/mentored/index.md @@ -0,0 +1,28 @@ ++++ +title = 'Mentored pair programming' +description = 'Practice writing code and getting support' +emoji = '👥' +weight = 2 ++++ + +We assign **mentored pair programming** as a coursework assignment throughout the course. + +All of the standard [pair programming guidance](../guidance) applies - make sure you're familiar with it. + +**Before** a mentored pair programming session, learners should decide what they're going to pair on and share this with the volunteer, e.g. by sharing a link to a particular Codewars exercise, a particular piece of coursework, or some other problem. + +**During** mentored pair programming, the **learner** should: +* Explain their throught process +* Break down the problem +* Plan what code to write +* Write all of the code +* Check that it works + +The **mentor** should: +* **Ask questions** to get the trainee thinking. It's always better to ask than tell. +* Help the trainee think about breaking down the problem +* Support the trainee as they write code +* Help the trainee to debug their code +* Stretch the trainee by bringing up extra concerns + +This is different from other forms of pair programming, where both people may be expected to write code, or people may take turns at different roles. This is because the goal is different - the goal is teaching. From 1d2845cbee890e52650206667082c546d863fd35 Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Sat, 26 Oct 2024 09:55:09 +0100 Subject: [PATCH 02/10] Review comments --- org-cyf-guides/content/pair-programming/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/org-cyf-guides/content/pair-programming/_index.md b/org-cyf-guides/content/pair-programming/_index.md index e4933a7e8..3f573349d 100644 --- a/org-cyf-guides/content/pair-programming/_index.md +++ b/org-cyf-guides/content/pair-programming/_index.md @@ -6,9 +6,9 @@ emoji = '👥' Pair programming is an excellent way to develop programming and communication skills. -It is often much easier to work through something when working on something 1-to-1. +It is often much easier to work through a problem when working with someone 1-to-1. -It is also helps our trainees to prepare for technical interviews when they'll need to code in front of other people. +It also helps our trainees to prepare for technical interviews when they'll need to code in front of other people. ## What From 9fa5af4b111d7a095368188df2bda38cd3723b48 Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Mon, 28 Oct 2024 11:32:24 +0000 Subject: [PATCH 03/10] Update org-cyf-guides/content/pair-programming/_index.md Co-authored-by: Sally McGrath --- org-cyf-guides/content/pair-programming/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org-cyf-guides/content/pair-programming/_index.md b/org-cyf-guides/content/pair-programming/_index.md index 3f573349d..c9a1fb4d5 100644 --- a/org-cyf-guides/content/pair-programming/_index.md +++ b/org-cyf-guides/content/pair-programming/_index.md @@ -6,7 +6,7 @@ emoji = '👥' Pair programming is an excellent way to develop programming and communication skills. -It is often much easier to work through a problem when working with someone 1-to-1. +It can be easier to work through a problem when working with someone 1-to-1. It also helps our trainees to prepare for technical interviews when they'll need to code in front of other people. From 6c5c6139a16eac1eb18f0d1714f3ce554542032d Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Mon, 28 Oct 2024 11:32:30 +0000 Subject: [PATCH 04/10] Update org-cyf-guides/content/pair-programming/_index.md Co-authored-by: Sally McGrath --- org-cyf-guides/content/pair-programming/_index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/org-cyf-guides/content/pair-programming/_index.md b/org-cyf-guides/content/pair-programming/_index.md index c9a1fb4d5..e2be648c6 100644 --- a/org-cyf-guides/content/pair-programming/_index.md +++ b/org-cyf-guides/content/pair-programming/_index.md @@ -8,7 +8,8 @@ Pair programming is an excellent way to develop programming and communication sk It can be easier to work through a problem when working with someone 1-to-1. -It also helps our trainees to prepare for technical interviews when they'll need to code in front of other people. +Pair programming prepares our trainees for technical interviews when they'll + code in front of other people. ## What From 5f2fde1219e9b35467d2705b923ab1604021fb24 Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Mon, 28 Oct 2024 11:32:37 +0000 Subject: [PATCH 05/10] Update org-cyf-guides/content/pair-programming/mentored/index.md Co-authored-by: Sally McGrath --- org-cyf-guides/content/pair-programming/mentored/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org-cyf-guides/content/pair-programming/mentored/index.md b/org-cyf-guides/content/pair-programming/mentored/index.md index 264c56de1..e9d9d1e68 100644 --- a/org-cyf-guides/content/pair-programming/mentored/index.md +++ b/org-cyf-guides/content/pair-programming/mentored/index.md @@ -12,7 +12,7 @@ All of the standard [pair programming guidance](../guidance) applies - make sure **Before** a mentored pair programming session, learners should decide what they're going to pair on and share this with the volunteer, e.g. by sharing a link to a particular Codewars exercise, a particular piece of coursework, or some other problem. **During** mentored pair programming, the **learner** should: -* Explain their throught process +* Explain their thought process * Break down the problem * Plan what code to write * Write all of the code From 1ae7a43a92cca3263b5815ef9ff7a1a54068f8eb Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Mon, 28 Oct 2024 11:32:44 +0000 Subject: [PATCH 06/10] Update org-cyf-guides/content/pair-programming/mentored/index.md Co-authored-by: Sally McGrath --- org-cyf-guides/content/pair-programming/mentored/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org-cyf-guides/content/pair-programming/mentored/index.md b/org-cyf-guides/content/pair-programming/mentored/index.md index e9d9d1e68..c0dbed687 100644 --- a/org-cyf-guides/content/pair-programming/mentored/index.md +++ b/org-cyf-guides/content/pair-programming/mentored/index.md @@ -19,7 +19,7 @@ All of the standard [pair programming guidance](../guidance) applies - make sure * Check that it works The **mentor** should: -* **Ask questions** to get the trainee thinking. It's always better to ask than tell. +* **Ask questions** to get the trainee thinking. It's always better to _ask_ than tell. * Help the trainee think about breaking down the problem * Support the trainee as they write code * Help the trainee to debug their code From eeac03c61e0568e2fd8df80f2c6699665f99acf9 Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Mon, 28 Oct 2024 11:34:00 +0000 Subject: [PATCH 07/10] Update org-cyf-guides/content/pair-programming/mentored/index.md Co-authored-by: Sally McGrath --- org-cyf-guides/content/pair-programming/mentored/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org-cyf-guides/content/pair-programming/mentored/index.md b/org-cyf-guides/content/pair-programming/mentored/index.md index c0dbed687..befcfc251 100644 --- a/org-cyf-guides/content/pair-programming/mentored/index.md +++ b/org-cyf-guides/content/pair-programming/mentored/index.md @@ -23,6 +23,6 @@ The **mentor** should: * Help the trainee think about breaking down the problem * Support the trainee as they write code * Help the trainee to debug their code -* Stretch the trainee by bringing up extra concerns +* Stretch the trainee by bringing up edge cases or complications This is different from other forms of pair programming, where both people may be expected to write code, or people may take turns at different roles. This is because the goal is different - the goal is teaching. From 870ecbde807933163765797f22c7ddd97f56efe8 Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Mon, 28 Oct 2024 11:34:06 +0000 Subject: [PATCH 08/10] Update org-cyf-guides/content/pair-programming/mentored/index.md Co-authored-by: Sally McGrath --- org-cyf-guides/content/pair-programming/mentored/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org-cyf-guides/content/pair-programming/mentored/index.md b/org-cyf-guides/content/pair-programming/mentored/index.md index befcfc251..395bedaa5 100644 --- a/org-cyf-guides/content/pair-programming/mentored/index.md +++ b/org-cyf-guides/content/pair-programming/mentored/index.md @@ -25,4 +25,4 @@ The **mentor** should: * Help the trainee to debug their code * Stretch the trainee by bringing up edge cases or complications -This is different from other forms of pair programming, where both people may be expected to write code, or people may take turns at different roles. This is because the goal is different - the goal is teaching. +This is different from other forms of pair programming, where both people may be expected to write code, or people may take turns at different roles. This is because the goal is different: the goal is **teaching**. From 44ae5bc3e2cfc6d84eb6019bacbbfbee94fd7e7e Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Mon, 28 Oct 2024 12:00:15 +0000 Subject: [PATCH 09/10] Split out a driver/navigator page This further emphasises that these are different, and gives a useful place to link driver/navigator-specific resources. --- .../content/pair-programming/_index.md | 12 +++++----- .../driver-navigator/index.md | 22 +++++++++++++++++++ .../pair-programming/mentored/index.md | 14 +++++++----- 3 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 org-cyf-guides/content/pair-programming/driver-navigator/index.md diff --git a/org-cyf-guides/content/pair-programming/_index.md b/org-cyf-guides/content/pair-programming/_index.md index e2be648c6..a6a12f928 100644 --- a/org-cyf-guides/content/pair-programming/_index.md +++ b/org-cyf-guides/content/pair-programming/_index.md @@ -4,17 +4,17 @@ description = 'Practice writing code and getting support' emoji = '👥' +++ +Pair programming is working together with someone else to code a solution to a problem. + +## Why Pair programming is an excellent way to develop programming and communication skills. It can be easier to work through a problem when working with someone 1-to-1. -Pair programming prepares our trainees for technical interviews when they'll - code in front of other people. +Pair programming prepares our trainees for technical interviews when they'll code in front of other people. -## What +## How -Pair programming is working together with someone else to code a solution to a problem. +Choose your style: [mentored](./mentored/) or [driver/navigator](./driver-navigator/). Think about whether to pair with another learner or a mentor - both are useful, but they're different. Pick a piece of programming to do, find a buddy, and work on it together. - -Sometimes one person does all of the writing, and has discussion with the other. Other times, people take turns writing. diff --git a/org-cyf-guides/content/pair-programming/driver-navigator/index.md b/org-cyf-guides/content/pair-programming/driver-navigator/index.md new file mode 100644 index 000000000..49bcb6201 --- /dev/null +++ b/org-cyf-guides/content/pair-programming/driver-navigator/index.md @@ -0,0 +1,22 @@ ++++ +title = 'Driver/navigator pair programming' +description = 'Taking turns writing code' +emoji = '👥' +weight = 3 ++++ + +A common form of pair-programming has the pairs taking turns. One acts as the "driver" - actually using the keyboard. The other acts as the "navigator" - providing directions and support. + +This is different from [mentored pair programming](../mentored/) where the learner is doing most of the work, with the mentor is there to support and stretch. + +You can do driver/navigator pair programming regardless of the levels of the pairs. Two learners can do this. A learner can do this with a mentor. Both are useful. Lots of people do this at work as software engineers - this is not just for learning. + +If a learner is pairing with a mentor, they should still take turns. The learner will benefit from writing code. The learner will also benefit from seeing how the mentor writes code. Mentors will be able to help both by seeing how a learner writes code, and how they think/direct. + +## Resources + +[Our general pair programming guidance](../guidance/) + +[Tips for pair programming](https://www.csteachingtips.org/tips-pair-programming) + +[Guidance on pair programming for learning](https://teachtogether.tech/en/#s:classroom-pair) diff --git a/org-cyf-guides/content/pair-programming/mentored/index.md b/org-cyf-guides/content/pair-programming/mentored/index.md index 395bedaa5..a90f6d73f 100644 --- a/org-cyf-guides/content/pair-programming/mentored/index.md +++ b/org-cyf-guides/content/pair-programming/mentored/index.md @@ -7,16 +7,18 @@ weight = 2 We assign **mentored pair programming** as a coursework assignment throughout the course. +This is different from [driver/navigator](../driver-navigator/) pair-programming where the pairs take turns. + All of the standard [pair programming guidance](../guidance) applies - make sure you're familiar with it. **Before** a mentored pair programming session, learners should decide what they're going to pair on and share this with the volunteer, e.g. by sharing a link to a particular Codewars exercise, a particular piece of coursework, or some other problem. **During** mentored pair programming, the **learner** should: -* Explain their thought process -* Break down the problem -* Plan what code to write -* Write all of the code -* Check that it works +* **Explain** their thought process +* **Break down** the problem +* **Plan** what code to write +* **Write** all of the code +* **Check** that it works The **mentor** should: * **Ask questions** to get the trainee thinking. It's always better to _ask_ than tell. @@ -25,4 +27,4 @@ The **mentor** should: * Help the trainee to debug their code * Stretch the trainee by bringing up edge cases or complications -This is different from other forms of pair programming, where both people may be expected to write code, or people may take turns at different roles. This is because the goal is different: the goal is **teaching**. +This is different from other forms of pair programming (e.g. [driver/navigator](../driver-navigator/)), where both people may be expected to write code, or people may take turns at different roles. This is because the goal is different: the goal is **teaching**. From acd207e1d11f3d536fbc213b516f8ecac5d9f94e Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Mon, 28 Oct 2024 16:15:20 +0000 Subject: [PATCH 10/10] Update org-cyf-guides/content/pair-programming/driver-navigator/index.md Co-authored-by: Sally McGrath --- .../content/pair-programming/driver-navigator/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org-cyf-guides/content/pair-programming/driver-navigator/index.md b/org-cyf-guides/content/pair-programming/driver-navigator/index.md index 49bcb6201..fe968a963 100644 --- a/org-cyf-guides/content/pair-programming/driver-navigator/index.md +++ b/org-cyf-guides/content/pair-programming/driver-navigator/index.md @@ -9,7 +9,7 @@ A common form of pair-programming has the pairs taking turns. One acts as the "d This is different from [mentored pair programming](../mentored/) where the learner is doing most of the work, with the mentor is there to support and stretch. -You can do driver/navigator pair programming regardless of the levels of the pairs. Two learners can do this. A learner can do this with a mentor. Both are useful. Lots of people do this at work as software engineers - this is not just for learning. +You can do driver/navigator pair programming regardless of the levels of the pairs. Two learners can do this. A learner can do this with a mentor. Both are useful. Lots of people do this at work as software engineers: this is not just for learning. If a learner is pairing with a mentor, they should still take turns. The learner will benefit from writing code. The learner will also benefit from seeing how the mentor writes code. Mentors will be able to help both by seeing how a learner writes code, and how they think/direct.