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 more specific time attached are due before midnight that day!
Week 1: Introduction and Overview (January 28 – February 3)
Lecture:
- Monday: Welcome to Intermediate Programming!
- Wednesday: Values, Types, Variables, Expressions
-
Friday:
Conditionals, Repetitions;
Using
indentto clean up
Section:
- Tuesday: A Crash Course in Unix
- Thursday: A Crash Course in Unix
Reading:
- Required: K&R 1: A Tutorial Introduction; 2: Types, Operators, and Expressions; 3: Control Flow
- Optional: Dennis M. Ritchie: The Development of the C Language
Tasks:
- Monday: Grab Assignment 1 and get started!
- Wednesday: Introduce yourself on the course mailing list!
Week 2: Functions, Compilation, and Arrays (February 4 – February 10)
Lecture:
-
Monday:
Makefiles,
Hacking simple
catandwcclones, Functions -
Wednesday:
Using
ctagsinvi, Usingcscope, Independent Compilation, More on Makefiles, Include Files - Friday: Arrays, Hacking a stack and an RPN Calculator
Section:
-
Tuesday:
Hacking a simple
grepclone -
Thursday:
Hacking a simple
grepclone
Reading:
- Required: K&R 4: Functions and Program Structure; 5: Pointers and Arrays
- Optional: Rob Pike: Notes on Programming in C
Tasks:
- Monday: Hand in Assignment 1 and relax!
- Monday: Grab Assignment 2 and get started!
- Wednesday: Once you graduate, is it more likely that you will write shiny new code or fix crusty old code? In either case, will you spend more time reading code or more time writing code? Do you know how many lines of code decent developers write in a day? What does all this mean for your education? Discuss these issues on the course mailing list; if you use sources (Google may be helpful to figure some things out) make sure you cite them properly.
Week 3: Pointers, Memory, Input, and Output (February 11 – February 17)
Lecture:
-
Monday:
Introduction to Pointers,
The
sizeofoperator -
Wednesday:
More on Pointers,
How to use
strtol()correctly, Basics of Memory Allocation (malloc()andfree()) -
Friday:
Using
splintfor static checking, Input and Output, Files and Stuff, How cool issnprintf(), eh?
Section:
- Tuesday: Hacking a simple Caesar Cipher
- Thursday: Hacking a simple Caesar Cipher
Reading:
- Required: K&R 5: Pointers and Arrays; 7: Input and Output
- Optional: Peter Hosey: Everything you need to know about pointers in C
Tasks:
- Monday: Hand in Assignment 2 and relax!
- Monday: Grab Assignment 3 and get started!
- Wednesday: Accessing an array outside its bounds is an unchecked error in C, meaning you'll need some "luck" to notice that anything is wrong. In Java, on the other hand, all array accesses are checked: If you're out of bounds you'll get an exception thrown at you. Take and defend a position regarding this issue on the course mailing list; discuss.
Week 4: Structs, Putting it all together... (February 18 – February 24)
Lecture:
- Monday: Structures, Hierarchical Abstraction
- Wednesday: Hacking linked lists, more on memory allocation (including memory leaks and dangling pointers)
-
Friday:
Hacking a
stackabstraction (aka Modularity in C, aka The Revenge of Java)
Section:
-
Tuesday:
Using
gdb, Consultations for Assignment 4 -
Thursday:
Using
gdb, Consultations for Assignment 4
Reading:
- Required: K&R 6: Structures; 7: Input and Output
- Optional: Rob Pike, Brian W. Kernighan: Program Design in the UNIX environment
Tasks:
- Monday: Hand in Assignment 3 and relax!
- Monday: Grab Assignment 4 and get started!
- Wednesday: In most programming languages, strings are stored as sequences (arrays) of bytes (at least if we forget about Unicode for the time being). However, different languages employ different techniques for the length of a string. In C, the end of a string is marked with a special 0 byte. In many Pascal implementations, the first byte of a string indicates its length. What are the advantages and disadvantages of these string representations? Discuss!
Week 5: Function Pointers & Other Oddities (February 25 – March 2)
Lecture:
-
Monday:
Function Pointers,
Using
qsort(3)andbsearch(3) - Wednesday: Enumerations, Preprocessor Macros, Variable Length Argument Lists
- Friday: Faking Objects, aka "Sticking it to Java!" :-)
Section:
-
Tuesday:
Using
valgrind, Consultations for Assignment 5 -
Thursday:
Using
valgrind, Consultations for Assignment 5
Reading:
- Required: Review the K&R book (all of it!) for Midterm 1
Tasks:
- Monday: Hand in Assignment 4 and relax!
- Monday: Grab Assignment 5 and get started!
Week 6: Testing & Performance, Introduction to C++ (March 3 – March 9)
Lecture:
-
Monday:
Basics of Testing
(unit vs. system testing,
testing automation,
black box vs. white box testing);
Using
gcovfor coverage analysis; Usinggcovto identify "hot spots" for performance evaluation and tuning; Usingtime(1)for performance evaluation; Array index interchange example -
Wednesday:
Basics of Performance Analysis
(don't guess: measure,
reliable measurements: averaging and load considerations);
Static Cost Models;
Using
time(3)andgproffor performance evaluation -
Friday:
Hacking "Hello World!" in C++,
Namespaces,
Input and Output using
std::cinandstd::cout, String handling usingstd::string, Structs and Classes, Public and Private members, Usingnewanddeleteto allocate/free objects
Section:
- Tuesday: Using Subversion, Consultations for Assignment 6
- Thursday: Using Subversion, Consultations for Assignment 6
Reading:
- Required: Review the K&R book (all of it!) for Midterm 1; K&M 0: Getting started, 1: Working with strings
- Recommended: Software Testing, Performance Analysis, Version Control with Subversion
- Optional: Test-Driven Development, Performance Tuning
Tasks:
- Monday: Hand in Assignment 5 and relax!
- Monday: Grab Assignment 6 and get started!
- Friday: Remember the spam filter bmf-0.9.4.tar.gz you studied for Assignment 2? Take a look at the program again, briefly of course so as not to distract you too much from the actual assignment for the week. How did you feel about it then? How do you feel about it now? Can you actually comprehend code you didn't have a clue about earlier? Do you think it's a "good" program in terms of style, error checking, etc? Anything that comes to mind when you look at it again is fair game for posting to the discussion list... :-)
Week 7: Introduction to C++, Midterm 1 (March 10 – March 16)
I am leaving early Wednesday morning for SIGCSE 2008 to learn more about teaching. Sorry I'll miss the exam, but I believe you'll be in capable hands... :-)
Lecture:
-
Monday:
Hacking a
counterclass; constructors; references vs. pointers; destructors; hacking anarrayclass;constfor methods; intro to operators and overloading; - Wednesday: Review for Midterm 1 (Joseph Vidalis)
- Friday: Midterm 1 (Joseph Vidalis)
Section:
-
Tuesday:
Hacking a
stackclass (Joseph Vidalis) -
Thursday:
This one didn't happen! :-/
Hacking a
stackclass (Joseph Vidalis)
Reading:
- Required: K&M 2: Looping and counting, 3: Working with batches of data, 4: Organizing programs and data
- Optional: Bjarne Stroustrup: A History of C++: 1979-1991, 1993.
Tasks:
- Wednesday: Hand in Assignment 6 and relax!
- Friday: From what you have seen and read about C++ so far, explain one significant difference between C++ and Java (the language you all should know anyway) on the discussion list. You must come up with a new point, you can't just agree to a point someone else is making. Alternatively you can refute (with examples and citing sources) a difference that someone else claims exists. Enjoy!
Week 8: Spring Break! (March 17 – March 23)
Have fun! :-)
Week 9: More C++ (March 24 – March 30)
Lecture:
-
Monday:
Hacking a
stackclass (to make up for the lab some missed in Week 7); independent compilation of classes (and why we can't hide data members completely); copy constructors and assignment operators -
Wednesday:
Hacking a
rationalclass for rational numbers; more on overloading (toward making objects look like basic values); friend functions; overloading of << for output -
Friday:
Introduction to Templates
(writing generic functions and classes);
introduction to the STL;
using the
std::vectorcontainer class and iterators; using simple STL algorithms
Section:
- Tuesday: Consultations for Assignment 7
- Thursday: Consultations for Assignment 7
Reading:
- Required: K&M 5: Using sequential containers, 6: Using library algorithms, 8: Writing generic functions
Tasks:
- Monday: Grab Assignment 7 and get started!
Week 10: Even More C++ (March 31 – April 6)
Lecture:
-
Monday:
Introduction to Inheritance and (Subtype) Polymorphism;
publicandprivateinheritance;virtualmember functions and destructors; purevirtualmember functions (abstractmethods in Java) -
Wednesday:
More on Inheritance: how it's implemented, why dynamic
binding works only for pointers and references;
Casting in C++: old-style vs. new-style,
static_castvs.dynamic_cast; Usingstd::map -
Friday:
TBD;
(More overloading;
writing automatic conversions, back and forth;
explicitconstructors)
Section:
- Tuesday: Consultations for Assignment 8
- Thursday: Consultations for Assignment 8
Reading:
- Required: K&M 7: Using associative containers, 9: Defining new types
- Optional: Scott Myers: The little endl that couldn't, C++ Report, November 1995.
Tasks:
- Monday: Hand in Assignment 7 and relax!
- Monday: Grab Assignment 8 and get started!
- Friday: Post your idea for a final project in the course. Be sure to describe it in enough detail for others to understand what you're suggesting. Don't just say "MapQuest" for example, explain with a few sentences what the system you'd like to build would do for users. Don't just say "some game" but give details instead, maybe pointing to existing games and telling us what would be different for your version. Note that there's no guarantee that we'll pick from your suggestions, but if something truly fascinating comes along, we just might... :-)
Week 11: Teams and Objects (April 7 – April 13)
Lecture:
- Monday: Software Development in Teams; Software Engineering and Software Process Models
- Wednesday: Introduction to Object-Oriented Design (OOD) and the Unified Modeling Language (UML); File System Example; Corporate Management Example; The Composite Design Pattern
- Friday: Graphics Editor Example for Composite; Observer (Publish-Subscribe) Patter; Recursive Observer Pattern; Strategy and Template Method Patterns
Section:
- Tuesday: Consultations for Assignment 9
- Thursday: Consultations for Assignment 9
Reading:
- Required: K&M 10: Managing memory and low-level data structures, 11: Defining abstract data types, 12: Making class objects act like values
- Optional: The Subversion Book
Tasks:
- Monday: Hand in Assignment 8 and relax!
- Monday: Grab Assignment 9 and get started!
- Tuesday: Email us your team registration for the final project. Include the names and email addresses of all three team members! Be sure to cc all team members! And pick a decent name for your team, otherwise we'll pick one for you... :-)
Week 12: More Object-Oriented Design (April 14 – April 20)
Lecture:
- Monday: Case Study: Interactive Fiction
- Wednesday: Interactive Case Study: Library System (your designs)
- Friday: Midterm 2
Section:
- Tuesday: Consultations for Assignment 10
- Thursday: Consultations for Assignment 10
Reading:
- Required: K&M 13: Using polymorphism and dynamic binding, 14: Managing memory (almost) automatically, 15: Revisiting character pictures, 16: Where do we go from here?
Tasks:
- Monday: Hand in Assignment 9 and relax!
- Monday: Grab Assignment 10 and get started!
Week 13: Even more Object-Oriented Design (April 21 – April 27)
Lecture:
- Monday: Interactive Case Studies: Email System, Navigation System, Exercise Bike, University System (your designs)
- Wednesday: Case Study: Email System; Polymorphism, Rectangles, and Squares: Dangers and Possibilities :-)
- Friday: TBD
Section:
- Tuesday: Consultations for Assignment 11
- Thursday: Consultations for Assignment 11
Reading:
- Required: Nothing
- Optional: Whatever you think helps...
Tasks:
- Monday: Hand in Assignment 10 and relax!
- Monday: Grab Assignment 11 and get started!
Week 14: Review and Outlook (April 28 – May 2)
Lecture:
- Monday: Almost All of Python in 45 Minutes
- Wednesday: Stump The Chump (Q&A session with candy)
- Friday: Final Presentations
Section:
- Tuesday: Q&A
- Thursday: Q&A
Reading:
- Required: Nothing
- Optional: Whatever you think helps...
Tasks:
- Monday: Hand in Assignment 11 and relax a lot! :-)