Peter Snyder
Time and Location
Burnham Hall 208, Monday, Wednesday and Friday, 12:00–1:40
Benjamin J Evans, David Flanagan - Java in a Nutshell, 6th Edition
Required hardware
Every student must have a physical iClicker. The version does not matter as long as it is functional.
Office Hours and Location
Monday, Friday, and (with 24 hour notice) Thursday (2:00 - 4:00pm) SEO 1218, or by appointment.
TA and Office Hours
Hoangminh Huynhnguyen, Tuesday (3:30 - 5:30pm), Wednesday (2:30 - 4:30pm) in SEO 1318


The purpose of this course is to learn how to write non-trivial software, with an emphasis on modern design techniques and tools. This includes topics like asynchronous programming, programming in teams, structuring applications to reuse code, testing and test-driven development, patterns, among others.

Java will be used throughout the class. No Java experience expected or required. Roughly the first half of the class will be learning the language, and the second half will be using it to learn and exercise software design principles and practices.

Topics Covered

This list is tentitive and will change depending on how class progresses.

  • Introduction to the class 6/12
  • Variables, control flow 6/14
  • Classes, objects, and OOP 6/16
  • Inheritance, class design, and error handling 6/19
  • Exceptions and abstract classes 6/21
  • Type generic programming 6/23
  • Packages and sharing code 6/26
  • Lambda and functional programming 6/28
  • Documentation, reusable code, and tooling 6/30
  • More library and clean code constructions 7/3
  • Unit testing and reliability 7/5
  • Concurrency 7/10
  • Concurrency continued 7/12
  • Version control 7/14
  • Inversion of control and event loops 7/17
  • Event loops in practice 7/19
  • Architectural patterns 7/21
  • Implementation strategy patterns and build tools 7/24
  • Creational patterns 7/26
  • Patterns concluded 7/28