This blog is highly personal, makes no attempt at being politically correct, will occasionaly offend your sensibility, and certainly does not represent the opinions of the people I work with or for.
Thinking Precisely
Part 1

There is a very common misconception among people, and even among mathematicians, that mathematics is difficult; and by "mathematics" I mean the activity of learning them if you are a student, or using them along with finding new results if you are a professional. This claim of difficulty is true, I am not going to challenge it, but I think that it is true for different reasons than what we usually think of.

From the point of view of the "user" mathematics is the manipulation of mathematical objects and mathematical ideas within the very strict framework of logical deductive reasoning.

Incidentally, the objects and the framework (as loosely defined above) are very distinct and independent from each other. Mathematical objects can be used, or rather misused, by people who are seduced by some of their properties but are using them out of context (some philosophers do that). On the other hand, the framework of logical deductive reasoning can be (and is often) very successful in situations not necessary involving mathematical objects, as in any episode of Sherlock Holmes, or your nearest chess game.

Strictly speaking, mathematical objects are very simple. They are always defined unambiguously from a limited number of components and the definition step itself is always very clear. The components might be (and are often) themselves the result of iterative construction steps, but the process given birth to them is so perfect that one can truly and absolutely forget how they got build and consider them as primitive. In other words, every mathematical object truly looks like being one step above ground relatively to its building components. There is not leaky abstraction (reference to the eponym rule in computing, from an article by Joel Spolsky called "The Law of Leaky Abstractions").

So the problem cannot come from the mathematical objects themselves or the framework within which we manipulate them. To understand where the problem comes from, one must realise that the activity of "doing mathematics", the activity of mentally resolving mathematical problems, is nothing else than a mental computation, similar to any computation happening in any digital computer. The little annoying detail, which makes the entire enterprise so challenging, is that the biological human mind has never been designed to think precisely. After few computation steps the human mind loses its precision; and the corresponding computation loses its precision, accuracy and relevance.

The difference between a mathematical novice (for instance an undergraduate student), and a good mathematician is similar to the difference between a novice in the game of chess and an experienced player. The experienced player has got a deeper/clearer understanding of the dynamics of the game; seemingly thinking faster (or instantaneously) from the point of view of the novice (exactly what I thought of some of my teachers during my first year at uni).

There is an obvious question that one might ask which is "given that our digital computers are so suited for precision, should not we be working at teaching them mathematical objects and the deduction framework ?". This is an interesting question, but outside the purpose of this entry. Let us rather focus on the human mind. A simple consequence of what I wrote above is the following: anything that allows people to think (more) precisely, or equally precisely but for a longer number of steps, dramatically increases their mathematical competency.

Let me maybe summary this entry using one simple image. Solving a mathematical problem, textbook exercise or great research challenge, or even simply learning a new part of mathematics, is exactly like being told that a given computer program (about which you can read the source code) possibly has a bug, and that if it has a bug then you must find it. The problem is that you cannot run the program on any computer, you can only mentally simulate the execution of the program (for all possible internal cases and for all possible inputs). The problem is horribly difficult for all but very simple programs. Confronted to a such a challenge one would actually often have to reason mathematically on the source code, isolating parts and manually proving their correctness (lemmas), hoping that at some point all aspects of the code will have been covered leading to the final conclusion (main theorem stating the overall correctness of the program) or the discovery of a buggy situation.

Part 2

Anyway, the problem is now, how can one learn to think precisely ? There are ways... In my case, it has been writing more and more computer programs and one day having to truly push my mind to work on the most difficult/complex computer program of all: Hypercube. Who would have guessed that single handedly designing and implementing the most complex in-house Front Office system of Standard Bank (to date) would make me a much better mathematician than I was when I was a math student. At least, now I know what works for me... I simply need to exploit it. I need to find (or maybe invent) an activity, not necessary math related, which does to my mind the same as Hypercube did to it. Some kind of daily exercise purposely built for increasing my mental precision...

Idea: maybe I should design a new programming language (any existing one would do, but they might lack some features I am interested in), and (level 1) play at writing programs in my text editor that only my mind will execute then (level 2) keep them in my memory and mentally execute them without writing their source code down...

better idea: implement a simple but not trivial hash algorithm (*) on the Mac and then try and mentally compute the output for increasingly complex inputs (before actually running the program and check if I was right). In fact I can turn it into a game (which has to be played without pen and paper) and let the computer adapts the level of difficulty from my past performances, the idea being that the game is going to constantly push me just beyond my current limits. The game can also have an aspect by which having to remember (an increasing number) of previous results is a part of the task. Yes, that looks painful enough, with the right amount of masochism, to actually have some interesting side effects on me. In any case, after one hour (or more) of such mental torture every morning, my math reading should feel like the easiest thing in the world :-)

(*) It can be a hash, or some other kind of problem. For instance a game by which at the beginning of a run the computer starts building a structure step by step, steps echoed to me on the screen, and I have to reproduce the structure in my mind, keep it in my memory, and regularly the game is going to ask me questions related to the increasingly complex structure, and the game is lost at the first bad answer I give (which means that my mental representation has diverged from the computer's own representation). It would be very useful if somehow the structure is "mathematical", with maybe questions related to the provability of some statements etc...