Concurrent Development: I think therefore I am; I am therefore I think
Learning to develop using the concurrent model requires a mental shift in how a developer problem solves. This mental shift can be difficult and to help demonstrate this: try patting your head and rubbing your stomach at the same time. Too easy... how about: hold your screaming infant while simultaneously checking the temperature of the formula without dropping the kid or the bottle. Learning to multitask in your day to day life will help you learn to multitask in your software because you learn to identify WHEN it’s safe to multitask. It’s probably not a great idea to try and check the formula while holding a screaming baby at 3am in the morning (assuming that you’re half awake). But we’ve done it haven’t we.
Change is a process. Most engineers can teach themselves to multitask and the action of multitasking exposes people to the idea of doing more than one thing at a time. If the pathways in your brain are not wired for thinking in parallel, then you have to start building those pathways. You have to train yourself.
This reminds me of my step-father who used to constantly tell us kids, "If you’re going into the kitchen, take a dirty plate with you." Thanks Gary, that was early training for concurrent software development techniques.
What you need to learn to do is:
1. Identify multitasking opportunities.
2. Learn to judge how "safe" it is to do those tasks in parallel.
3. Learn to distinguish between similar parallel activities, conjunction parallel activities, and always needs to be sequential activities.
While there are some folks who already have all these skills, many folks don’t. So take a little time and learn it. Train your mind by using your body.