by having a basic knowledge of how object-orientated programing works; this book seems to be grate in helping you to start logically thinking about how to write more "re-usable" and sufficient code
java is the programming language that the book uses to illustrate their examples, though (so far) i don't think you need to have knowledge of JAVA to gain a lot from this book
C# knowledge is recommended by the book