Fact 1: I’m fairly good at catching balls. If you throw a ball at me, not to hard, I’ll probably be able to catch it. This does not make me feel very special – I share this ability with big parts of the human population.
What’s fun though, is that if you describe the how hard you throw the ball, the wind speed, the angle you throw it at, there’s no chance at all I can tell you where I should put my hand to catch the ball. No way. Not even if I sit and try to calculate it, spending hours and hours on it.
Somehow some part of my brain can do advanced arithmetics that my conscious mind can’t solve no matter how long I work at it.
Fact 2: I have a neighbour who’s four years old. She and my two year old child play together almost everyday. Yesterday, I joined them and we played a little with a beachball. Now, in the catching balls-department, beach balls have to be among the easiest ones. They are always slow, and very big. I tried throwing it, slowly at both children, and was surprised that neither one could catch it. The catching-a-ball ability is not something that you are born with – it’s something you train to get good at. You expose your mind to flying balls for a couple of years, and suddenly the mind says “Hey, I got it! I broke the code!” and now you can catch the ball in the air.
I have a point. I’m getting to it. Now!
When I code, I try to let my unconscious mind do a lot of the work. Just like when I catch a flying ball, I try not to sit down and second guess myself. I go by a ‘feeling’ of where my hand should be to catch that ball. To be able to do this when coding, I have to see the code. I can’t abstractly figure out the ball’s flying pattern – I have to actually see it in the air to be able to catch it. In the same manner, to arrive to good code, I have to see code.
Which is why I try to sell people on the idea of not thinking code through too much before you sit down and start writing it. When you write it, when you can see it before you, you invite other parts of your brain to work for you, and you get a ‘good’ or ‘bad’ feeling about what you are looking at.
Of course you can get a good feeling with other tools – whiteboards, CRC-design are invaluable tools to achieve the same thing. The point is not to try and rationally think things through too much. Try to use that feeling that you have trained for so many years now.
If you think this is a load of crap, read my inspiration for this post. Mr Gladwell is much better at explaining this than I am.
Jeff Hawkins, in his book, “On Intelligence” describes this phenomenon and reasons that our brain works differently from present day computers.
He says that it might be possible for a robot to catch a ball, but the number of instructions that the robot has to process to do the same indicates that the human brain works differently.
The human brain does not try to ‘compute’ the location of the ball or the position of our arm, but rather ‘recalls these from memory’. It takes only a few steps to do the same. I guess this is the ‘feeling’ you are talking about.
Human brain works on “predictions”, “feedback” and “invariant representations” and this is how the brain is different from a present day computer.
Left by Gautham Pai on November 14th, 2006