Quote:
I have a friend who always strives to learn why things are there. He works from the ground up, I mean, sticks and stones to make a fire to creating tools to baking clay pots to pouring concrete foundations to sawing off logs and making a house eventually.
"Why things are there" means that you understand why(and when) you should use unions instead of structs, or floats instead of ints, or lists instead or vectors, or why the class hierarchy is like it is, or why that function is private and the other is public, or why the order you call several functions are like that,etc... You can't do without that. You need to understand the code you're writing. If you don't know why things are coded like they are, you're either coding randomly hoping that you'll get it to "work" or copying&pasting from tutorials.
Your friend, I assume, needs to know how things work under the hood, like how std::vector is actually implemented or what assembly code the compiler produces. This is another matter entirely.