I wish I had more brainpower to write this, but I'm suddenly quite tired. I was going back home this evening, and as I boarded the train I took my iPad out and continued reading my book. My brain switched immediately from waiting-for-the-train mode into readin-mah-bukk mode and I remember exactly where I stopped reading that morning. An instant context switch, immediately unloading the work context from my brain and loading the book context.
Context switching in my brain doesn't usually happen that quickly, but I've been practicing, or rather: been forced to practice, at work. Work is pleasantly chaotic at times, and there's always at least 3 or 4 things going on simultaneously. Juggling those contexts with social life at work and social life online means that there's never a dull moment. The technical challenge is there, and it's in my level of comfort, but the real challenge is actually having many challenges at once and the pressure of time, something you don't usually have when you're coding for yourself (or even in some companies). This fits with my goals of expanding my range of programming skills in a broader sense, rather than in a deeper sense. I found that it's easy to pick up whatever technical knowledge you need for any given topic at any given time. If you specialize deeply your ability to adapt quickly to new things worsens. If you generalize broadly, your ability to quickly learn new things improves. Then again, I often find it much more satisfying to learn something in great detail and to become an expert on something. As always, there is a balance somewhere in-between, enabling you to learn broadly while still enjoying the satisfaction of improving your expertise. Context switching is the vital tool that helps you to do that.