I've no doubt that many other people have written about this (in fact I sometimes wonder if it's possible to write about a topic that nobody else has already written about) but I think having programming side projects is very important. The chief reason for me is experience. I imagine most programmers are constrained in their day to day jobs. Constrained by frameworks, constrained by time, constrained by practices or maybe constrained by poor code that was created by someone else. There's no such thing as a perfect program so at work there are always areas of the code you think could be improved or should have been done differently. But how do you know that you're right? Simple, try it out for yourself. Structure programs exactly as you want. Try different things. See what works and what doesn't. Having this kind of freedom is an incredibly valuable learning experience. 

There are other reasons for doing side projects as well. I don't know about anyone else but I like trying out new technologies. Working with the same old frameworks and libraries day in day out can become monotonous. Working with new technologies is fun and exciting! Well, most of the time. On the odd occasion you work with something new and it turns out to be a load of rubbish, or not significantly better than something you used previously. Oh well, it's all good experience. 

One piece of advice I would always give to someone who wanted to start a side project is to make something that is going to be used. There's always a danger that any project undertaken in your own time will be left unfinished if you lose interest or motivation. I committed to making the Teesside basketball league website in my spare time and knowing it had to be finished by a certain date helped considerably. Some might argue that it takes the fun out of it, but all I can say is that it helped focus my attention on the features that needed to be implemented rather than the features that I wanted to implement. Without that focus I would still be working on it!