The only way to learn a language, whether it is a spoken language or a computer programming language, is to practice. My favorite way of practicing a new language, such as Java, is by visiting one of the many sites designed to present challenging computer programming problems, and write code to solve those problems.
One of my favorite programming problems sites is Project Euler. Project Euler has 100’s of problems with creative titles like Jumping Frog and Under the Rainbow. Project Euler’s stated goal is to provide fun and recreational problems for you to solve. They succeed.
They give a solved-by count, so you can see exactly how many people have solved the challenges. Presumably, the less people that have solved a problem, the more difficult it is.
Stack Exchange has a massive number of user submitted programming puzzles on their code golf site. They range from the outright boring to fairly interesting. So now they are not only a great site for finding answers to programming problems, but they’re good for making your life miserable, too.
Code Abbey has a couple of hundred practice problems to use your budding programming skills on. Code Abbey presents computer programming challenges ranging from Rubik’s Cube to Algae Robot.
Rosaland has a list of exciting bioinformatics problems to try out. Topics include alignment, combinatorics, computational mass spectometry, divide-and-conquer, dynamic programming (one of my favorites), genome assembly, genome rearrangements, graph algorithms, graphs, heredity, phylogeny, population dynamics, probability, set theory, sorting, and string algorithms. Each topic of problems contains anywhere from three to twenty-six problems.
Sphere Online Judge (spoj) has around 22,000 computer programming problems to choose from. That will keep you busy for a while.
Reddit’s Daily Programmer has hundreds of computer programming puzzles. Monday’s puzzles are easy. Wednesday’s puzzles are medium difficulty. Friday’s are supposed to be the most challenging.
Programming Praxis has about 500 interesting programming challenges. Praxes are examples for practice, in case you were wondering.
You can study Java (or any computer programming language) without learning to program. I’ve seen many computer science college graduates that couldn’t write a simple fizz buzz to save their lives. All they needed to do was practice regularly and they would have learned to program instead of learning about programming. Programming computers is a ton of fun, so check out these sites or other similar ones and pick out programming exercises to practice.