Years ago, I enjoyed reading books about how to do arithmetic mentally and quickly (there are several of them - one good one is "Math Magic" by Scott Flansburg). There did not seem to be anything equivalent for more abstract math, i.e. algebra and calculus. For some reason, I cared so much that I actually took the trouble to write a couple of books about it (<a href="http://hilomath.com/" rel="nofollow">http://hilomath.com/</a>).<p>To figure out what to write, I actually sat down with an old algebra text book, and while solving the problems in my head, very carefully observed what I did and how... then wrote down how it all worked, using words and images. This process was about a hundred times harder than it sounds; had I any clue how hard it would have been, I probably never would have started.<p>Anyway, for doing abstract/symbolic math mentally, the method I came up with defines three levels of fundamental mental skills that are learned in succession, and build on each other:<p><pre><code> * visualization
* representations
* mental algorithms
</code></pre>
Visualization is just the ability to see things in your mind's eye - precise and conscious command of imagination, really. I never met a good engineer who didn't have this ability very well developed, but believe it or not, many people in the world don't. Anyway, IMO it is something that can be cultivated, so the first part of the first book is focused on doing that.<p>What I called "representations" has to do how we encode information mentally. To give a programming example, how do you visualize a linked list data structure? Well, probably most of us (I'm assuming you're a hacker/math hat here) have a visual model in which there is some repeated symbol representing the nodes, and some aspect of the symbol that represents a pointer to another node, with these nodes arranged in a line (as opposed to a 2D grid, or random cluster, etc.). Perhaps you even visualize lines connecting the node-symbols (i.e. pointers to the next node). There are infinite possible variants, and maybe you do it differently. Importantly, your visual model will omit encoding much information that happens to not be immediately relevant (such as the endianness of the data stored, etc.)<p>Bringing it back to math, consider the equation (x+3)/(2x+4)=1. Let's assume you can solve that in your head. (If not, you need to read my book :) Maybe try it right now, and notice how you visualize the equation and its symbols, and how you move or manipulate the symbols as you solve it. An obvious first step is to bring the denominator on the left over to the right side. Mentally, you probably see this as the movement of the expression "2x+4" as a whole unit. You chunk it as a single object, then break it up into smaller objects later when that's needed.<p>The next level is what I'm calling mental algorithms, which I won't describe here - for most of the people reading this, it's just what it sounds like.