# Pair Programming
{id: introduction}

## Agenda
{id: agenda}

* Introduction to Pair Programming.
* Describing the project.
* Pair programming a project.
* Switching pairs to explain the solution to each other.

## Goals
{id: goals}

* Improve our way of software development.
* Experiment with TDD.
* Experiment with Pair Programming.

## TDD - Test Driven Development
{id: test-driven-development}

* Write test first. It fails.
* Implement code.
* Test passes.
* Git commit

## Why in pairs?
{id: why-in-pairs}

* Learn from each other.
* Learn how to express our ideas.
* Continuous peer review.
* Better solutions.
* Less bugs.
* You already know how to program alone. Let's try something else now.

## Pair Programming
{id: pair-programming}

* There is no single right way to do it. Experiment!
* Verbalize everything
* Driver - Observer
* Driver - Navigator
* Driver - Navigator - Observer

## Llewellyn's Strong Style Pairing
{id: strong-style-pairing}

For an idea to go from your head into the computer it MUST go through someone else's hands.
[Llewellyn's strong-style pairing](http://llewellynfalco.blogspot.com/2014/06/llewellyns-strong-style-pairing.html)

## Llewellyn's Strong Style Pairing: Driver
{id: strong-style-pairing-driver}

* Trust your navigator
* Become comfortable working with incomplete understanding
* What if I have an idea I want to implement? - Switch!

## Llewellyn's Strong Style Pairing: Navigator
{id: strong-style-pairing-navigator}

* Give the next instruction to the driver the instant they are ready to implement it.
* Talk in the highest level of abstraction the driver can understand.

## The Project
{id: the-project}

[Mastermind](https://en.wikipedia.org/wiki/Mastermind_(board_game))

## Retrospective
{id: retrospective}


