In pair programming, the roles of driver and navigator are typically assigned based on the needs of the task, individual skills, and experience, rather than strictly by seniority or randomness. Therefore, among the options provided, the closest to a nuanced understanding of the assignment of roles would likely be:
"Each programmer is either the driver or the navigator randomly at the start of each session and switch roles frequently."
While this statement suggests randomness, it accurately reflects the practice of frequently switching roles in a pair programming session to ensure both participants engage with the code and the problem-solving process. However, it's important to note that pairs often choose who takes which role based on context and expertise rather than sticking to a strict random rotation.