|Syllabus||Calendar||Homework Assignments||Coding examples||Daily Survey|
This is really two courses in one.
Half of the course is about the technical and software-engineering issues of implementing a graphical user interface. This includes language-independent techniques like model/view separation and other common software design patterns (e.g. Observer, Command, Active Object, Factory, Proxy, etc.), and Java-specific techniques such as Swing GUI components, Listeners, inner classes, multithreading, and networking.
The other half of the course is about how to design a good user interface: how to identify users and their goals, lay things out on the screen to be attractive, clear, and efficient, choose appropriate displays and controls, structure the navigation among different screens, specify and test a proposed user interface.
Every student will carry out several projects of increasing size during the semester, representing various phases of the development process: user interface design, software design, software testing, iterative improvement, etc. You may be called upon to implement the user interface specified by one of your classmates, or to serve as a "test-driver" for a program designed by one classmate and implemented by another.
My office hours are TTh 3:00-4:00, W 10:00-1:00, W 2:30-4:00, and by appointment.
For the interface-design half of the course, we'll use Jennifer Tidwell's Designing Interfaces (O'Reilly 2006, ISBN 0-596-00803-1). For the programming half, we'll use Crookshanks's Practical Tools and Techniques for Software Development (CreateSpace 2012, ISBN 147514153X), and I'll post links to some tutorials on the Web; see below.
For things that I haven't yet updated on this web site, take a look at the last time I taught this course, in Fall 2010.
This course meets on Tuesdays and Thursdays from 12:15-1:30 PM in Science 227.