@dabeaz I vividly remember two particular early epiphanies.
The first one was understanding what interfaces are for in Java. At first this was pretty weird to me: strange base classes with no implementations? What good is that? When it clicked for me, a lot of things fell into place.
The other one was pointer arithmetic. The leap from "this number points at an address of a char" to "this number points at a string of chars" was a challenge, and the understanding that came with it felt profound.
@ambv printf vs scanf was particularly challenging. Both can take a pointer to char, but for very different reasons.
@dabeaz