 Be fluent in the use of recursion and object-oriented programming concepts (e.g. classes, objects, inheritance, and interfaces).
Be able to design and implement nontrivial Java programs (roughly 1000 lines of code), starting from an English language specification.
Be able to design graphical user interfaces.