I'm talking about the concept of instructions, registers, addressable memory, etc. - with block diagrams, not with full circuits unless he's into that kind of stuff.
Then when he moves onto one of the high level languages that the other commenters are talking about the concepts will naturally stick. E.g. a variable is stored in memory, when we add two variables in the HLL we are copying those values to registers and using an ADD instruction, then we are writing the result back to memory. When there is an IF statement the computer will jump to either block of code depending on the conditional operation. Pointers become intuitive. And so on.
I've explained this to laymen and people who are interested in computers and have gotten a pretty positive reaction from them - so it's worth a shot. For a programmer who generally focuses on HLL it also allows them to get some idea of how their code is executed in the real world under all that abstraction.