Pair programming with two people and one keyboard is harder than it sounds. Left undefined, the typical session collapses into either two people watching one person type, or two people fighting for the keyboard. The driver/navigator split fixes that by giving each person a specific job and a specific time horizon.
The driver writes the code. They focus on the current expression, the current line, the syntax, the immediate next move. They have the keyboard and they own the cursor. The navigator does everything else. They watch for typos, think about the next function the driver will need, hold the larger plan in their head, and surface edge cases the driver has not yet hit. The two horizons are intentionally different: the driver's attention is on the next ten seconds, the navigator's attention is on the next ten minutes.
The roles are swapped on a regular cadence — every fifteen to twenty minutes is typical for beginners, every test cycle in ping-pong TDD, every commit in strong-style pairing. Switching roles is non-negotiable; a pair that never swaps tends to stop being a pair. The beginner pair-programming post in this topic walks through the mechanics of the first session, and the advanced post covers the variations like strong-style and mob programming that build on the same foundation.