I am a LearnByDoingtm guy, and I think that the best way to learn programming is by PROGRAMMING. So I endeavoured to solve as many programming challenges as possible (or at least the most interesting ones). Here is the collection of the ones I've solved:
- Project Euler - is math-oriented and the challenges require the exploit of some math proprieties to be solved efficiently
- 99 problems - mainly useful for learning a new programming language (like Haskell, Prolog, Scheme, etc.)
- Programming Praxis - problems of all kinds. Useful for learning new algorithms/data structures/concepts.
- Dailyprogrammer - contains problems of various difficulties and topics, they are good for exploring programming in all its varieties