Project Euler
One of the nice(?) things about being a developer is that there's always something new to learn. It could be a design pattern, it could be a framework or library, or it could be a whole new language. For all of those, I find the best way to really learn is by doing. The problem with that is you need something to do. It could be a problem from work, it could be part of your hobby, or it could be something that came up as part of daily life (that's where my favorite interview question came from).
Besides using it for interviews, I use it to help figure out new languages and patterns. There are iterative solutions, recursive ones, tree-based, and and additive. I've written those solutions if 7 or 8 languages now, and it forms a decent basis for understanding a language syntax and environment, but there could be more.
That's where Project Euler comes in. It's a set of 700+ (and growing) math based problems you can use for lots of things. Learn a new language. Learn some new techniques, Understand some mathematical underpinnings better. Or you could just do it for fun :)