Yesterday I got home from work, and I was feeling pretty down. I flopped down in bed and euziere sat next to me. We chatted a little bit, and just sat for a little bit, and she occasionally reached down to poke at me or nibble on my arm. Then she explained object-oriented programming to me!
I mean seriously, god damn! When I started trying to tell her what I didn't understand about OOP, I had literally no hope that she'd understand, or be able to explain it to me. This has got to be one of the biggest gaps in understanding I've ever traversed in a single conversation. And it wasn't even that hard for me to understand, once we figured out what it was I needed to be told. If I hadn't started with a good understanding of organizing programs in functions, or of templates that have a certain set of parameters for you to assign values to (like a regression equation), or of systems that arise from simultaneous interactions between multiple agents (like evolutionary simulations or neural nets)... my mind would truly have been blown to bits. It was a pretty great epiphany as it was.
(in case you're interested -- which I think a few people might be, since we sometimes talk about what you have to do to teach a beginner how to think in terms of programming -- my problem was that I'd always heard people say "an object is like a thing," which I took to mean that it just sits there, and there needs to be some external program flow that operates on one of its values or calls one of its methods in order to make something happen. Apparently an object is actually an independent agent -- it's running its own code and can interact with other objects or with the outside world on its own. So "the program" is no longer a single, linear entity that acts on different things; it's a collection of different things all happening at once (well, virtually all at once, the same way you can run a multithreaded system on a single processor).
... can someone tell me if that's basically correct?