I am reading "Practical Remote Pair Programming: Best practices, tips, and techniques for collaborating productively with distributed development teams" (https://lnkd.in/e9-uCdt4)
Apparently, I was misunderstanding a vital point of pair programming.
"The driver is the one who will have their hands on the keyboard and be writing the code. All the implementation details are at the latitude of the driver. Small decisions such as what type of variable to use, which programming language construct to use, how to name variables, methods, functions, classes, packages, and so on are a part of the driver's role. The driver usually explains to the navigator what they are doing at all times. The purpose is dual: to clarify to themselves that they are doing the right thing and to explain to the driver what their intentions are. "
The "usually explains" part is genius. I have assumed that a person I am pair programming with is a seasoned Java dev. However, when I asked him to start talking through his coding steps, I have realized that we have to start again from Java basics. That is totally my mistake as instead of listening to the developer I was literally telling him which buttons to press.
Many thanks to Adrian Bolboacă and Bruno Souza for their ideas on pair programming and sharing.