CSE logo University of Washington Computer Science & Engineering
 CSE333 -- Systems Programming
  CSE Home   About Us    Search    Contact Info 

Course Home
 Course email
 Anonymous feedback
 Home Virtual Machines
 Homework Dropbox
 Class GoPost Forum
 Class Gradebook
[ prereqs | topics | assignments | exams | grades| policies ]


  • CSE351: rudimentary knowledge of C programming; the ability to write, run, and debug programs; familiarity with Linux and the use of Linux compilation, editing, and debugging tools; a solid mental model of the relationship between high-level code (C) and assembly-level compiled code; simple data structures such as linked lists, trees, hash tables, and queues.
  • CSE332: data abstractions, including dictionaries, balanced trees, queues, graphs, sorting algorithms, and simple concurrency, parallelism, and synchronization.

Approximate topic list

  • C programming (<2 weeks)
    • review of basic C programming and memory model from HW/SW interface course
    • pointers, lvalues & rvalues, structs, casts
    • arrays and strings
    • 2-D arrays with and without pointers
    • dynamic storage allocation (malloc/free)
    • C preprocessor, multifile programs
    • core C libraries (I/O, strings, etc.)
    • idioms for error handling without exceptions

  • Essential tools for C/C++ (1 week)
    • compilers, debuggers, make
    • advance tools (memory leak detection, performance profiling, code coverage)
    • version control, etc.

  • Memory management and system interface (1 week)
    • idioms for manual memory management; avoiding dangling pointers and memory leaks
    • memory management implementation
    • linking and libraries: how a program is assembled
    • relation between libraries and underlying OS services

  • C++ programming (3-4 weeks)
    • basic C++: “a better C”, C with classes
    • class definitions, constructors, copy constructors, destructors, const, other details
    • dynamic memory allocation (new/delete), classes with dynamic data
    • classes and inheritance in C++; overloading, overriding
    • using C++ templates and STL

  • Best practices (1 week)
    • class design and patterns in C++
    • systematic program development and debugging
    • profiling and optimization

  • Concurrency in C/C++ (1 week)
    • concurrent programming beyond HW/SW interface course
    • asychronous I/O, networking, and user interfaces
    • if time, a brief reintroduction to threads

  • Security issues in C/C++ (< 1 week)
    • discussed throughout where appropriate, e.g., safe vs unsafe library functions


This course is designed to give you substantial experience with programming. There will be approximately one programming assignment due per week; the assignments are designed to build on top of each other, so it is in your interest to make sure that earlier assignments are rock-solid.

All of our assignments assume you will be programming within a CSE Linux environment. There are three ways to do this:


We will have one midterm exam and a final exam. The dates are listed on the course schedule, though the midterm date is subject to change (with reasonable advance notice given).


Grades will be assigned approximately as follows:
  • assignments: 60%
  • midterm: 15%
  • final: 25%


(Many of these policies are taken verbatim from other CSE courses.)

Late Policy: There is a 10% penalty for each late day, or portion thereof, up to a maximum of two days late. You will receive a zero for the assignment if it is turned in more than 48 hours late. Also, you get two free late days - two days of lateness with no penalty - to use at your discretion.

Reasonableness: No set of rules can apply perfectly in every setting. Reasonable exceptions can be made.

Cheating vs. Collaboration: Collaboration is a very good thing. On the other hand, cheating is considered a very serious offense, and is vigorously prosecuted. Vigorous prosecution requires that you be advised of the cheating policy of the course before the offending act.

For this course, the policy is simple: don't cheat. You know it when you're doing it. We'll recognize it when you do it. As an easy example, sharing assignment solution code with each other is cheating. As another easy example, relying heavily on some resource (e.g., some example code you found on the Web) without attributing it in your turnin is cheating.

That said, collaborating is, for many people, an effective way to learn. Learning isn't cheating. Helping each other write programs that are not assignments isn't cheating. Misrepresenting that you've learned something, or done the work that implies you've learned something, almost certainly is.

CSE logo Computer Science & Engineering
University of Washington
Box 352350
Seattle, WA  98195-2350
(206) 543-1695 voice, (206) 543-2969 FAX
[ comments to gribble ]