A Guide to Programming in Java