One way (certainly not the only way) to learn programming or get better at it is to read other people's code. The open source world provides a huge amount of code to read.
But just reading code isn't really enough; you need to understand it.
Morgan Phillips has a rather interesting way to do this as she reads the code for the Linux kernel. Her re-entrant function poem does a great job of succinctly capturing issues of re-entrancy and even threading issues. Not sure about the quality of her poems, but my grandmother used to write sonnets regularly to keep sharp so as a study scheme it seems like a good one to me!
A great article on her work is here:
http://www.linux.com/news/featured-blogs/200-libby-clark/777473-linux-poetry-explains-the-kernel-line-by-line
Kevin