I just happened across this post about being a more productive programmer by Matt Moore. I especially liked his 2nd suggestion.
2. Leave Yourself a Place to Start (or: Leave work with something small broken)
Programming effectively (at least, for me) requires me to have a lot in my brain at one time - which I 'load' when I start, and which rapidly dissipates when I get distracted or stop. That means that getting started and 'into the zone' is the hardest part. What makes it easier to get started is if I have a simple task to complete that gets me in the zone.
So, any time I stop (lunch, or in the evening), I intentionally break something so I can get right back and fix it - when I get back to work, I'm not only anxious to fix it, but I'm in the zone after I'm done fixing it.
There was a famous sculptor (or ten) who, before he'd leave for the night, would smash a sizable dent into his sculpture - so in the morning, he'd know where to start. Many programmers I know have a problem with this - but seriously. Try it a few times, and see if it gets you up and running faster, more consistently.
I use a similar approach to warming up, but since I/we use continuous integration there are times when I can't break anything when I leave. Like when I've finished for the day and happen to be finished with a particular task; I want to do my check-in ASAP so that I can do a quick brain-dump about my changes in the check-in comments, but I don't want to break the build by adding/removing something that will either keep the project from compiling or keep the tests from passing. I've found it useful to write some notes about what I would be moving on to if I were to keep working, either on a piece of paper or in OneNote. Those notes are the first thing I look at when I sit down to start again, and usually give me enough of a kick-start to get going again.
On days that my notes aren't enough, I simply look for a few 5 minute-type tasks that I can pick off and go to town. After a couple of those I'm usually primed and ready to go.