Informatics 45 Spring 2010

The schedule is a work-in-progress that will be built as we go along, depending on our progress (and, perhaps toward the end, your areas of interest). I will try to keep the lecture schedule and readings at least a week ahead of us, so you'll know to expect, at least in the short term.

There will sometimes be online readings associated with lectures. We will generally be talking about them, or about the issues raised in them, in lecture; it's best to do the readings before the lecture, so that you can participate in the discussion and get the most out of your time.

Date Lecture Topics Readings Due
Week 1
Tu 3/30
  • Course introduction
  • Where are we going?
  • Distinguishing characteristics of real-world software development
Th 4/1
  • Graphical user interfaces in Java using Swing
  • Layout
  • Event handling
Week 2
M 4/5 Project #1 — Plan due 11:59pm
Tu 4/6
  • Graphical user interfaces in Java using Swing (continued)
  • Models vs. views
  • Separating the model from the view: Why and how?
  • Custom events
Th 4/8
  • Graphical user interfaces in Java using Swing (continued)
  • A more flexible layout manager: GridBagLayout
  • Storing and manipulating collections using JList
Week 3
Tu 4/13
  • Using ListModels to help separate your model from your view
  • Input and output: How programs interface with the world around them
  • Interoperability
  • File input and output
  • The need for file formats
  • What kind of information is important in a file format
  • Recognizing how to process a file based on its contents
  • The importance of gracefully handling ill-formed input
  • Network input and output
W 4/14 Project #1 — Program due 11:59pm
Th 4/15
  • Sockets
  • Network protocols
  • The importance of knowing who and what to trust
  • Using sockets in Java
  • More about network addresses, ports, wireless routers, firewalls, etc.
  • Listening and connecting
  • Implementing a simple protocol
F 4/16 Project #1 — Lessons Learned due 11:59pm
Week 4
Tu 4/20
  • Implementing a simple protocol (continued)
  • Protocol separation, and why it's as important as model-view separation
  • How to implement a protocol separately from the rest of your program
Th 4/22
  • Protocol separation (continued)
  • Threads
  • Why threads are important when using sockets
  • Why threads are especially important in programs with GUIs
F 4/23 Project #2 — Project Plan due 11:59pm
Week 5
Tu 4/27
  • Mixing sockets with GUIs in Java
Th 4/29
  • Mixing sockets with GUIs in Java (continued)
  • Why text is not always the appropriate encoding
  • How to read bytes directly from a file
  • How to write bytes directly to a file
  • How reading and writing bytes using a socket is the same
Week 6
Tu 5/4
  • Pushing out the boundaries even further: the web
  • URLs
  • HTTP
  • GET and POST requests
  • REST-based web service APIs
  • Writing a Java program that manipulates Twitter
Th 5/6
  • The importance of using well-known file formats, revisited
  • XML
  • XML parsers built into Java
  • Writing a Java program that downloads information from Twitter as XML and parses it
Week 7
M 5/10 Project #2 — Program due 11:59pm
Tu 5/11
  • Issuing a Google query from a Java program
  • JSON, as an alternative to XML
  • Finding and utilizing an open source library when your programming language library doesn't solve your problem
W 5/12 Project #2 — Lessons Learned due 11:59pm
Th 5/13
  • Writing a complete Othello game
  • Doing our own drawing
  • Choosing our own fonts and colors
  • 2-D graphics basics
  • Antialiasing
Sa 5/15 Project #3 — Project Plan due 11:59pm
Week 8
Tu 5/18
  • Writing a complete Othello game (continued)
  • Handling mouse input
Th 5/20
  • Writing a complete Othello game (continued)
  • How game logic is a "model" and should be separated from our view
  • Two-dimensional arrays
  • Enums
Week 9
M 5/24 Project #3 — Program due 11:59pm
Tu 5/25
  • Animation in Java, using techniques we've learned already
  • Animating a ball moving across the screen
  • Frames, timing, and separating animation logic from presentation logic
  • Custom coordinate systems
Project #3 — Lessons Learned due 11:59pm
Th 5/27
  • Augmenting our ball animation — detecting collisions with walls
F 5/28 Project #4 — Project Plan due 11:59pm
Week 10
M 5/31
  • University Holiday: Memorial Day — NO LABS TODAY
Tu 6/1
  • Turning our ball animation into a game — adding a user-controlled paddle and scoring
  • More about threads
  • Why synchronization and synchronized are important
  • The representation of sound in a computer
  • Sound in Java — adding sampled sound effectss to our animation
Th 6/3
  • The importance of small classes, revisited
  • Unit testing using JUnit
  • How unit testing is more difficult when programs use external resources
  • Third-party tools that assist in unit testing of programs that use external resources
Su 6/6 Project #4 — Program due 11:59pm
Finals Week
Tu 6/8 Project #4 — Lessons Learned due 11:59pm
Th 6/10
F 6/11 Take-Home Final Exam due 11:59pm