I'm taking a quick break from studying for my CS 152 final. I'm currently on the Chapter 14 study guide, dealing with OOD. Now, this is something I find completely instinctual. Heck, I nearly reinvented it on my TI-89 graphing calculator, using BASIC. Then someone told me about Java, an OO language, and I just wanted to smack myself.
I've never thought about how a class hierarchy is designed -- when I go to make one, it just falls into order magically. I have gut reaction to improperly designed code. Unfortunately, I have to explain how it works on an exam, and my own description won't cut it. It has to match the book's description, which means I essentially have to memorize a specific description of something I know by heart. Bleagh.
I agree that being forced to think about something you've been doing unconsciously can be a good thing -- I don't dispute that. It teach you things you missed, and expose flaws in your subconscious reasoning. But when I'm forced to regurgitate formulaic descriptions, that's when I object.