I seem to be in the minority here, but I've never really understood the love for Project Euler problems for programming. From the ones I did, it was far more focussed on math and abstract problem solving. I guess that will help you understand how to do basic things: looping/recursion, and conditionals, but to me problems that involve things like user interfaces, visualization, IO or the way you structure your code are far more interesting.
Project Euler reminds me of when I did computational fluid dynamics (CFD) for a while. From a programming standpoint, a lot of CFD is fairly simple--the place where CFD methods really differentiate themselves is in their modeling of the underlying physics. From that standpoint, I wouldn't really advocate doing CFD as a way of learning to program, because being a great programmer isn't really the thing that will make you great at doing CFD—being great at math and modeling is. (On the other hand, if someone wants to get into physics modeling or simulation, CFD is quite fun and satisfying.)
Project Euler reminds me of when I did computational fluid dynamics (CFD) for a while. From a programming standpoint, a lot of CFD is fairly simple--the place where CFD methods really differentiate themselves is in their modeling of the underlying physics. From that standpoint, I wouldn't really advocate doing CFD as a way of learning to program, because being a great programmer isn't really the thing that will make you great at doing CFD—being great at math and modeling is. (On the other hand, if someone wants to get into physics modeling or simulation, CFD is quite fun and satisfying.)