January 23. Introduction to the course; discussion of course policies on attendance, grading, plagiarism and attribution, and copyright; the rhetoric of programming.
Programming assignment #0: Implementing queues is assigned.January 25. The rhetoric of programming (continued); software-development methodologies.
Reading for January 27: Beautiful code, chapters 1 and 3 (pages 1 through 9 and 29 through 40).
January 27. Software-development methodologies; elegance, concision, and simplicity as indicators of code quality.
Programming assignment #0: Implementing queues is due.Reading for January 30: Code complete, chapter 3 (pages 23 through 60).
January 30: Conceptual project specification.
Reading for February 1: Code complete, chapter 4 (pages 61 through 70).
February 1: Objective project specifications.
Reading for February 3: Beautiful code, chapter 11 (pages 161 through 186).
February 3: Social responsibility.
Reading for February 6: Code complete, chapter 21 (pages 479 through 497).
February 6: Choosing project teams.
Reading for February 8: Code complete, chapter 5 (pages 73 through 123).
February 8: Designing projects.
Reading for February 10: Beautiful code, chapter 17 (pages 279 through 291).
February 10: Architecture; layer structure; module structure.
Writing assignment #1: Project specification is assigned.February 13: Information hiding; extensibility.
Reading for February 15: Code complete, chapters 6, 12, and 13 (pages 125 through 160 and pages 291 through 344).
February 15: Selection of key data structures.
Reading for February 17: Code complete, chapter 7 (pages 161 through 186).
February 17: Interfaces; prototyping and stub programming.
Writing assignment #1: Project specification is due.
Reading for February 20 and 22: “Understanding git
conceptually.”
February 20: Lab on git, part 1.
February 22: Lab on git, part 2.
Reading for February 24: Code complete, chapter 8 (pages 187 through 213).
February 24: Defensive programming.
Reading for February 27 and 29: Code complete, chapter 22 (pages 499 through 533).
February 27: Project group meetings.
February 29: Testing.
Reading for March 2: Code complete, chapter 23 (pages 535 through 562).
March 2: Coding and debugging.
March 5: Debugging tools; lab on gdb (part 1).
March 7: Lab on gdb, part 2.
March 9: Build tools; lab on make.
Reading for March 12: Beautiful code, chapter 5 (pages 59 through 74).
March 12: Correctness; assertions, preconditions, postconditions, and invariants; verification techniques.
Reading for March 14: Code complete, chapters 14 through 17 and 19 (pages 347 through 410 and pages 431 through 460).
March 14: Structured programming; control structures.
March 16: Documentation generation; lab on Doxygen.
Reading for April 2: Code complete, chapter 31 (pages 729 through 775).
April 2: Code layout.
Reading for April 4: Beautiful code, chapters 29 and 33 (pages 477 through 481 and pages 539 through 551).
April 4: Balance; coding for “the book.”
Reading for April 6: Code complete, chapter 18 (pages 411 through 430).
April 6: Table-driven code.
Reading for April 9: Beautiful code, chapter 23 (pages 371 through 384).
April 9: Programming models.
April 11: Editing tools; lab on Emacs LISP, part 1.
April 13: Lab on Emacs LISP, part 2.
April 16: Lab on Emacs LISP, part 3.
Reading for April 18: Beautiful code, chapter 7 (pages 85 through 103).
April 18: Unit testing.
April 20: Project meetings.
Reading for April 23: Code complete, chapter 29 (pages 689 through 708).
April 23: Integration testing.
Reading for April 25: Code complete, chapters 20 and 28 (pages 463 through 477 and pages 661 through 688).
April 25: Code assessment.
Reading: GNU/Linux manual pages on gprof and gcov.
April 27: Lab on gprof and gcov.
April 30: Memory management; lab on mtrace functions.
May 2: Torture tests; fuzz tests.
Reading for May 4: Beautiful code, chapter 10 (pages 147 through 160).
May 4: Speed benchmarks.
Reading for May 7: Code complete, chapters 25 and 26 (pages 587 through 645).
May 7: Maintenance.
Reading for May 9: Code complete, chapters 33 and 34 (pages 819 through 853).
May 9: Craftsmanship and professionalism.
May 11: Reflection and assessment; student evaluations.
May 16, 9 a.m.: Final examination.