A Concise and Practical Introduction to Programming Algorithms in Java