I just rediscovered this post from Oreilly about asynchronous communications. http://radar.oreilly.com/2010/10/dancing-out-of-time-thoughts-o.html Take a moment to read, I will wait.
It brought to mind another recent article about how multicore programmers must think differently. The author is arguing that “different” thinking is needed, not that multicore is harder than regular programming.
What relates these two things? Asynchronous communication is multicore.
People attracted to programming are by nature and by training linear thinkers. Step on leads to step two and three, so on to the end. Sequential programs are drummed into our heads through all our college years.
Unfortunately, I am not a linear thinker. I am a leaper. Step one leads to B which jumps to crocodiles, and that means the answer is 7, done. Being a leaper in a linear world is a double curse. It is hard to communicate with the linear thinkers, because either I have skipped three steps and already arrived at my answer, or I do not follow their steps, so can not see the big picture without more detail. Plus, as a programmer, taking to the non-technical is always a bit iffy.
Understanding that the world may not happen step by step is the first step to understanding multicore. Process A may finish before B, sometimes, but not always. The messages may get swapped in transit. We can put things back in order, or find a way that order does not matter.
It is an asynchronous world, and linear thinkers better get used to it.