When I was 7, my dad introduced me to my first programming concept ever. While having a walk in the forest, he asked me to look at fern and made me inquire about its structure. He proceeded to tell me about recursivity and a very long conversation ensued. Needless to say, my mind was absolutely blown.
Over the years, we had many discussions like that first one, relating programming concepts to real-life principles. My dad was never (and still isn't) a "hardcore" programmer, but as far as understanding and explaining logic go, I'm still to find somebody capable of explaining things so simply and beautifully.
Quite a few years later at University, my teacher with two PhDs failed to explain the basics of OOP to my class in a 4 hours span, entangling himself and everybody in lingo and concepts that even confused me, who already knew OOP. Academics would sometimes do well to relate to the real world and deflate their egos.
> Academics would sometimes do well to relate to the real world and deflate their egos.
This is really the key to teaching beginners. The difference between telling someone what something is versus encouraging them to see it for themselves.
Apart from the tired car analogy, how would you (or better how would your dad have) explain(ed) OOP to a relative beginner?
We find that we sometimes have to start with the very basics - as in a variable is a 'box' to put a value in. Literally, we hand out boxes. Really, simple intuitive stuff like variables is something that is non-intuitive for most people.
We keep the cooking equipment and raw materials in the kitchen.
Same goes for the bathroom, laundry, den, bedroom.
These are all "rooms" which share features like doors, heating, floors, lights.
These will be in building, which could be detached, block, semi-detached, terrace.
These also have common processes but differences.
We human computers move between these rooms, sometimes we bring data with us (are we hungry, sleepy, with friends, naked) and use the processes and data in the rooms to perform useful actions. Once compete we might be in a different state (dressed, sated, refreshed, clean), the room might be different for the next person (dirty, empty, wet), we might leave the outputs there or take them with us to a different room or even outside of the building.
The way I had it explained to me I always really liked. We spent a long time on very simple things: logic, control flow, functions, variables. Then, after learning that and all the limitations of those tools, my teacher said: "an object is something that can contain functions and data. In fact, in many languages, functions and variables are both objects."
Over the years, we had many discussions like that first one, relating programming concepts to real-life principles. My dad was never (and still isn't) a "hardcore" programmer, but as far as understanding and explaining logic go, I'm still to find somebody capable of explaining things so simply and beautifully.
Quite a few years later at University, my teacher with two PhDs failed to explain the basics of OOP to my class in a 4 hours span, entangling himself and everybody in lingo and concepts that even confused me, who already knew OOP. Academics would sometimes do well to relate to the real world and deflate their egos.