Depending on your experience in programming you can start with one of these resources.
If you are a beginner to programming pick one of the two.
If you have some experience in programming in other languages like C, C++, Java and consider yourself an intermediate level programmer, the best resource is
In both cases, you can learn better if you practice writing a lot of programs. Sites for Programming Challenges will provide some resources.