The past few weeks, I've been looking over some books in math problem solving. The one I like best so far is The Art and Craft of Problem Solving by Paul Zeitz, who happens to be a Stuy alum. He was also on the math team. (If you recall, I was not, although I went to some of the meetings and did at least some of the assigned problems.) One of the things I like about the book is that the author considers lots of creative approaches to problems.
I also looked through a recent copy of the USSR Olympiad Problem Book. Somewhat surprisingly, one of the first problems is the famous Towers of Hanoi problem, which has been known to appear on 6.001 problem sets.
So now I'm wondering if this is the solution that I have been looking for. It's interesting, because when I went to the professors or TAs to ask questions, and asked how (in general) I could improve my ability to solve these types of problems, they couldn't really give me an answer. For example, the guy who wound up on my MS research committee told me that the way to get good at algorithms was to learn lots of algorithms. That didn't really help me. I couldn't (practically) memorize all the ones I knew about (in textbooks, etc.), Even if I could, there was always the chance that I'd get asked something that wasn't in any of the books I'd read. Another thing I did was to practice a lot of combinatorics problems, since (around the time I was in grad school) it seemed to me that combinatorics came closest to the formulation of the types of problems I was being asked to solve in algorithm analysis, graph theory, and (to some extent) queueing theory (although queueing theory has a good deal of probabilistic reasoning among other things). But that didn't help me as much as I thought it would (although it probably kept me from failing).
You might say that if I'd stuck it out with the math team I might have come to this realization a long time ago. Maybe. At the time, I was involved in a lot of other things, and didn't want to drop anything in order to fit it into my schedule. Also, at the time, I hadn't yet decided to major in computer science. (In fact, I knew very little about computer science before I went to MIT. It was after taking 6.001 during freshman year that I got interested in it.) I was going to be a medical doctor, or at least I thought I was. (After participating in a weekend program at some hospital in uptown NYC where I had to extract blood from behind the eyes of mice, I decided medicine wasn't for me.) Although I liked math a lot, there were other things I liked at least as much, such as Spanish, so I wasn't compelled to spend more time on math at the expense of other things.
One other thing ... my eleventh grade math teacher gave me a book called Number Systems. It wasn't used in the math curriculum; there were just a bunch of them lying around the math department that the math staff decided to get rid of. This book basically starts with a (somewhat simplified) discussion of Peano's postulates and proceeds from there to develop the natural numbers through the complex numbers. Along the way, things like the irrationality of √2 are proven. Interestingly, there is a fair amount said about the cardinality of sets, including diagonalization proofs. I'm wondering what I thought of that when I first read it. I don't remember offhand. When I next encountered the issue (in Gödel, Escher, Bach, in the summer between junior and senior years that I wrote about sometime ago), I understood what was being discussed, but I did not make a connection between it and what I had previously read. It puzzles me that I had so much trouble in 6.045 (automata and complexity theory) even though I had been exposed to some of its underlying principles before taking the class. But it could be this problem solving aspect of that subject is what I was missing at the time.