I just finished the homework for CS 101. I was impressed. The problems progressed from easy to reasonably hard.
Even programmers had trouble with #9, to judge from the forum comments - it demanded creativity, rather than knowledge of syntax.
The best part was that you can unambiguously test your answers before submitting them. So you must learn the concepts, but you can learn by correcting yourself rather than waiting for positive or negative feedback.