Informatics 122 Winter 2013
Schedule


While this is not a course oriented around a single textbook, there will be readings assigned both from the Gang of Four Design Patterns text and from online sources that I choose. When a reading is assignment, it is a good idea to skim the reading before the lecture for the main ideas, attend lecture, and then to go through the assigned reading again to fill in the details that you missed, both in your initial skim of the reading and in the lecture.

Note, though, that there is no substitute for practice: this is a course whose primary focus is on doing things, not memorizing things, so you may find that the bar for absolute comprehension of everything you read is lower than you're accustomed to.

Date Lecture Topics Readings Work Due
Week 1
Tu 1/8
  • Course introduction
  • Why design is hard, and why that's not such a bad thing
  • The importance of version control
  • Centralized vs. decentralized version control
  • Git: A distributed, decentralized version control system
  • Background on using command-line tools
Th 1/10
  • Git: A distributed version control system (continued)
  • Staging changes and committing them
  • The .gitignore file
  • Commits and hashes
  • Branching and merging
  • Branches as pointers to commits
  • Why it can be useful to have a detached HEAD
Week 2
Tu 1/15
  • Design aesthetics: What makes a good design?
  • Basic design principles
  • UML class diagrams
Th 1/17
  • UML class diagrams (continued)
Week 3
M 1/21 University Holiday — Martin Luther King Jr. Day
Tu 1/22
  • In-Lecture Activity: Project #1 peer design review
Th 1/24
  • The mechanics of isolating a design decision
  • What is a design pattern?
  • Some examples of simple design patterns
  • Using the EGit plug-in within Eclipse
  • A tour of the Project #2 UI design
  • GoF - Ch. 1
Week 4
Tu 1/29
  • Design patterns
  • GoF - Ch. 2
Th 1/31
  • Design patterns (continued)
Week 5
Tu 2/5
  • Design patterns (continued)
  • Unit testing using JUnit
  • Design for testability
W 2/6 Project #2 due 11:59pm
Th 2/7
  • Code coverage metrics
  • The EclEmma code coverage plug-in for Eclipse
  • More about design for testability
  • Dependency injection
Week 6
Tu 2/12
  • HTTP
  • Web APIs
  • OAuth and authentication
  • The bit.ly Data API
  • Using the bit.ly API from Java
Th 2/14
  • In-Lecture Activity: Project #3 peer design review
Project #3 due 5:00pm
Week 7
M 2/18 University Holiday — Presidents' Day
Tu 2/19
  • Improving an existing design
  • Code smells
  • Refactoring
  • Detecting code smells and taking action
Th 2/21
  • API design
  • Fluent APIs
  • The clarity provided by writing unit tests
Week 8
M 2/25 Project #4 due 11:59pm
Tu 2/26
  • Introducing the Final Project
  • Managing a large group
  • Embracing "other people's code"
  • Design recovery
Th 2/28
  • Final Project: Consultations (regular lecture location)
  • Blue Team: 5:05pm-5:25pm
  • Gold Team: 5:30pm-5:50pm
  • Zot Team: 5:55pm-6:15pm
  • Pro Git Ch. 3.5
  • Pro Git Ch. 5
  • Skim Pro Git Ch. 4 lightly
  • (Most of Ch. 4 does not apply if you're using a Git hosting service)
Week 9
Tu 3/5
  • Design recovery (continued)
  • Reusing existing components
  • Analyzing the tradeoffs between buying/getting and building
  • Choosing a component carefully
Th 3/7
Week 10
M 3/11 Project #5 due 11:59pm
Tu 3/12
  • Final Project: Consultations (regular lecture location)
  • Blue Team: 5:05pm-5:25pm
  • Gold Team: 5:30pm-5:50pm
  • Zot Team: 5:55pm-6:15pm
Th 3/14
Finals Week
Th 3/21
  • Final Project: Final Presentations and Demos (4:00-6:00pm, DBH 1500)