Schedule (Tentative!)
- Stuff listed in bold indicates a due date of some sort, attached to a grade item that will influence your final grade. See Assessment for more details.
- Assignments are due on the day listed before lecture! Tasks that don't have a specific time attached are due before midnight that day!
- Readings from the text don't always "match up" with the lectures completely. They are listed on the schedule to encourage your steady progress. That said, reading the material before coming to lecture is still highly recommended.
Week 1: Introduction and Overview (January 26 – February 1)
Lecture:
- Monday: Welcome to Programming (in Java); Basic Structure of a Java Program; Compiling and Running a Java Program; Printing Things; Simple Arithmetic; Semicolons as Dog Treats :-)
- Wednesday: Instructions and Expressions; Values, Types, Operations; Integers, Floats, Strings, Characters, Booleans; Overloaded Names and Operators; Precedence and Associativity; Coercion and Casting
- Friday: Command Line Arguments; Dijkstra's Pebble Game; State, Variables, Assignments; Conditionals and Repetitions; Implementing the Pebble Game
Reading:
- Required: Sections 1.1 – 1.3; Department Integrity Code
- Recommended: ACM Code of Ethics and Professional Conduct
- Optional: Paul Graham: Good and Bad Procrastination, December 2005. See also this article on Wikipedia.
Tasks:
- Wednesday: Grab Assignment 0 and get started!
- Friday: Introduce yourself on the course mailing list!
Week 2: Loops and State (February 2 – February 8)
Lecture:
-
Monday:
Pre- and Post-Checked Loops (for example
foranddoloops); Final Variables as "Constants" (for exampleGRAVITY); Programming Example: Tabulate a Function (for exampleMath.sin()) - Wednesday: Validating Arguments (for example integers) by Processing Strings; Nested Loops (for example to find divisors)
-
Friday:
State, Preconditions, Postconditions;
Assertions (the
assertinstruction andjava -ea); Arrays ("bunches" of variables)
Reading:
- Required: Sections 1.3 – 1.4
- Recommended: Programming with Assertions (mentions some advanced stuff we have not covered yet!)
- Optional: Jorma Sajaniemi: An Introduction to the Roles of Variables (especially the table toward the bottom!)
Tasks:
- Monday: Submit Assignment 0 and relax!
- Monday: Grab Assignment 1 and get started!
Week 3: Arrays, References, Textbook Java Library (February 9 – February 15)
Lecture:
- Monday: Working with Arrays (for example compute an average or find an element using linear search); Arrays as Reference Types (and aliasing)
-
Wednesday:
More on Reference Types; Strings as References (for example the
difference between
==and.equals()); Input and Output Channels for a Program; Using theStdOutandStdInClasses; Input and Output Redirection in Unix; Pipes in Unix -
Friday:
Using the
StdRandomClass; Introduction to Graphics and theStdDrawClass; Using Graphics andStdIn(for example to draw a map of US cities, data for which is redirected into the program); Real-Time Graphics for Basic Animation (for example to make a block bounce left and right)
Reading:
- Required: Sections 1.4 – 1.5
- Recommended: Section 1.6 as an example for a bigger application
- Optional: Jeannette M. Wing: Computational Thinking, Communications of the ACM, vol. 49, no. 3, March 2006, pp. 33-35.
Tasks:
- Monday: Submit Assignment 1 and relax!
- Monday: Grab Assignment 2 and get started!
Week 4: Graphics, Sound, and Midterm! (February 16 – February 22)
Lecture:
-
Monday:
Improvements to the Real-Time Graphics Demo (pretty uncanny ones at that,
Black Pudding anyone?); Introduction to Sound and Using the
StdAudioClass - Wednesday: The plan was to start functions, but since you asked so many questions this became a review session instead. Smart move! :-)
- Friday: Midterm 1, check the Assessment page for details about the cheat sheet
Reading:
- Required: Sections 1.4 – 1.5
- Recommended: Review Sections 1.1 – 1.5, Lecture Notes, and Homework Problems for the Midterm on Friday
- Optional: Section 1.6 as an example for a bigger application
Tasks:
- Monday: Submit Assignment 2 and relax!
- Monday: Grab Assignment 3 and get started! Note that the deliverables have changed starting with this assignment!
Week 5: Static Methods, Scope and Lifetime of Variables (February 23 – March 1)
Lecture:
- Monday: Abstraction Mechanisms; Introduction to Static Methods; Control Flow: Call and Return; Introduction to Parameters and Results
- Wednesday: Functions and Procedures; Side Effects; Unit Testing using Assertions; Scope and Lifetime of Variables; Local versus Global Variables
- Friday: More on Local versus Global Variables; Value and Reference Semantics for Parameters; (Failed) Introduction to Recursion
Reading:
- Required: Section 2.1
- Recommended: Peek ahead at Section 2.2
- Optional: Niklaus Wirth: Program Development by Stepwise Refinement, Communications of the ACM, Vol. 14, No. 4, April 1971.
Tasks:
- Monday: Submit Assignment 3 and relax!
- Monday: Grab Assignment 4 and get started!
- Friday: Read Donald E. Knuth's Turing Award lecture Computer Programming as an Art from December 1974. On the discussion list, write a few lines about this topic from your experience with Programming in Java so far. Is Knuth correct? Is he not? Are all CS people hopeless lunatics? What? :-) (You can find out more about Knuth in this article on Wikipedia. Also, Paul Graham has an HTML version of Knuth's talk which may be easier to read than the PDF scan.)
Week 6: Recursion and Unix (March 2 – March 8)
Lecture:
- Monday: Introduction to Recursion; Method Calls as "Instances" of Computations; The Even-Odd Recursion; Factorial, Recursive and Iterative; Testing with Oracles (test recursive against "assumed correct" iterative factorial).
- Wednesday: Introduction to Unix
- Friday: Binary Search (aka Beating Linear Search, Recursively)
Reading:
- Required: Section 2.3
- Recommended: Peek back at Section 2.2
Tasks:
- Monday: Submit Assignment 4 and relax!
- Monday: Grab Assignment 5 and get started!
Week 7: Recursion and Modularity (March 9 – March 15)
Lecture:
- Monday: Towers of Hanoi (aka How To Do Lots with Almost Nothing); Hilbert Curves Part I
- Wednesday: Hilbert Curves Part II; Designing a Plotter Class for Hilbert; Example of Refactoring (to clean up the code)
-
Friday:
Modularity: Splitting Programs into Classes;
The
publicandprivateParts; Code Reuse and Libraries; WhyprivateStuff can Evolve Easily; Example: Developing a 3D Drawing Class
Reading:
- Required: Sections 2.2 – 2.3
- Recommended: Section 2.4 as an example for a bigger application
Tasks:
- Monday: Submit Assignment 5 and relax!
- Monday: Grab Assignment 6 and get started!
Week 8: Spring Break! :-) (March 16 – March 22)
Anything below this line is in a state of flux and pretty useless!
Week 9: (March 23 – March 29)
Lecture:
- Monday:
- Wednesday:
- Friday:
Tasks:
- Monday: Submit Assignment 6 and relax!
- Monday: Grab Assignment 7 and get started!
Week 10: and Midterm! (March 30 – April 5)
Lecture:
- Monday:
- Wednesday:
- Friday: Midterm 2, check the Assessment page for details about the cheat sheet