Course Syllabus

Links: [ prereqs | objectives | resources | class | setup | assessments | exams | grades | participation | texts | policies ]

Prerequisites

CSE351 (The Hardware/Software Interface): CSE 351 provides students with 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 programming languages and assembly-level compiled code; simple data structures such as linked lists, trees, hash tables, and queues.

CSE 123 (Intro to Computer Programming III): CSE 123 is not a direct prerequisite (CSE 351 prerequisite), but some of its topics are beneficial to review for CSE 333. This includes classes, inheritance, good style practices, and simple data structures such as linked lists, trees, hash tables, and queues.

Although we review these topics in CSE 333, we expect students to have deeper familiarity of these pre-requisites courses (or equivalent).

Learning Objectives

At the end of this course, students should be able to:

  • Write C/C++ code using pointers to create and manipulate complex data structures
  • Debug significant C/C++ programs using GDB and Valgrind
  • Read and write basic Makefiles
  • Explain the process of making a system call
  • Describe fundamental differences between C and C++
  • Write programs that interact with files, directories, and the network using the POSIX library
  • Write multi-threaded C programs using pthreads
  • Display courage and perseverance, even in the face of complexity and uncertainty

Course Resources

We use a few education platforms and tools throughout the course.

Tool How we use it
Canvas Our gradebook. It also hosts lecture recordings and Zoom links.
Gradescope Where assessments are graded, released, and regraded. Used for all code or exam submissions.
Ed Discussion Discussion board for all questions you may have related to the class (or otherwise).
GitLab Hosts your Git repos; submit by tagging commits. See Git Basics and GitLab Setup.
Poll Everywhere In-class polls for participation.

Lectures and Sections

Lectures will be hosted at these times:

  • Lecture: MWF 09:40–10:40 in IEB G106
  • Section AA: Th 12:00–13:00 in SIG 227
  • Section AB: Th 13:10–14:10 in SIG 230

We will try our best to record lectures via Panopto. Sections will not be recorded.

Although we try to record lectures, we can make no guarantee that the recordings will be available immediately or at all. This class is not a distance-learning or hybrid class so our ability to provide recordings is best effort.

You should plan to attend class regularly. Historically, students who skip lectures have struggled later in the course.

Computing Environment

All assignments and exercises in CSE 333 are written, built, and graded in the Allen School's Linux environment (currently Rocky Linux with gcc/g++ version 11). Although your code may compile on other systems (including other Linux distributions), always do a final check on a CSE machine before you submit.

There are several supported ways to get a working environment. These are described in detail on the Environment Setup page:

  • CSE lab workstations: the machines in the Allen School instructional labs come preconfigured with everything you need.
  • attu: the Allen School's shared Linux servers, which you can reach over SSH from anywhere.
  • CSE Home VM: a virtual-machine image you can run on your own computer to get the same environment locally.

Many students use VS Code to remotely connect to one of these environments. This gives them the benefits of an IDE on their local machine, even though their code builds and runs on our CSE systems.

You will also the Allen School's GitLab to track your work and submit it; follow the GitLab Setup and Git Basics guides to get your repositories set up.

Assessments

All assessments are due at 11:59pm unless specified otherwise. That means you must commit your submission to the appropriate Gitlab repository AND tag that commit before midnight to receive credit.

Your submissions are evaluated on two dimensions: correctness (do you follow the spec) and code quality (do you follow the style guide).

Exercises

Every week, we provide students with an exercise to practice material from the recent lectures. Students have ~4-5 days to complete these. They are designed to be short, stand-alone assessments that test a specific set of concepts.

Exercises are distributed and submitted through your exercise GitLab repository. We grade them on the CSE Linux environment and return feedback. Exercise solutions are posted 24 hours after the due date. After they are posted, we can no longer accept late work related to the exercise.

Homework

There are four major programming assignments over the quarter, each substantially larger than an exercise. They are designed to build on top of one another. Cumulatively, they give you experience building a real system. Since all of the homeworks assessments are in a sequence, errors may compound. We recommend you fix any issues in earlier homeworks before moving on to later parts.

Like exercises, homework is submitted through your homework GitLab repository by tagging a commit.

If you find an error in grading, please let us know within one week of the assignment being returned.

Late Days

Assignments are expected to be done on time, but we know that sometimes you just need a little slack for an unexpected problem or that "last" stubborn bug. For the entire quarter, you start with four free late days, and you can earn more by participating in the course or by instructor discretion (see the participation section below).

Late days can be used on both exercises and homeworks:

  • On exercises, you may use at most one late day per exercise, since we release sample solutions 24 hours after the deadline.
  • On homeworks, you may use up to two late days per assignment.

If you are not finished with an assignment and have no remaining late days, turn in your best effort for partial credit. This policy may not be the same as in other classes, so you are responsible for understanding it if you choose to submit late work.

And of course, there are always truly unusual situations that require some flexibility. We'll do our best to work with you if you're having problems, or if unexpected emergencies or illnesses occur. Please contact the course staff as soon as you can using the cse333-staff[at]cs email address.

Exams

We will have one midterm exam and a final exam. The midterm exam will be held during lecture about halfway through the quarter. The final exam will be held during the last week of classes during the summer quarter.

The primary purpose of exams is to provide an opportunity to review and solidify understanding of course material, especially concepts that are not covered comprehensively in programming assignment or exercise code.

Grades

The initial plan is the following. We reserve the right to make reasonable adjustments to this as the quarter evolves:

  • project assignments: 35%
  • exercises: 25%
  • midterm: 15%
  • final: 25%

Project assignments are assigned two scores: one for program operation (correctness) and one for code quality (style). These two scores are converted to a percentage and weighed roughly equally in the overall project assessment, even though the raw point scales may be quite different.

If you discover an error in grading, please bring it to our attention within one week after the assignment or project is first returned.

Participation

We want this class to be an active, collaborative space, and we reward showing up and engaging with the material. You can earn up to 4 participation points per week:

  • up to one point for participating in lecture or section
  • up to one point for participating in an office hours
  • up to one point for posting on the Ed discussion board or sending an email
  • up to one point for “special” participation opportunities

Participation is not part of the grade calculation… so what can you do with these points? As you reach certain milestones, you unlock perks:

  • At 5 points, you get three more late days.
  • At 10 points, we will drop your lowest exercise score when computing final grades.
  • At 15 points, we will increase your homework score by 10% of the maximum.
  • At 20 points, you get a 10% bump on the midterm or we drop your worst question (whichever helps you more).
  • At 25 points, you get a 10% bump on the final or we drop your worst question (whichever helps you more).
  • At 30 points, you will (at a minimum) get a sincere thank you email from the course staff. Perhaps something more.

Engineering classes tend to treat technical material as the only thing that matters. That focus is understandable, but it can lead new graduates to undervalue the skills that shape a career: being kind, staying engaged, and collaborating well with others. The students who thrive, both in this class and beyond it, are the ones who pair strong technical ability with the ability to work alongside and learn from the people around them. Rewarding students who invest in those habits is exactly what this participation system is meant to do.

Texts

There are no required texts for this courses. However, most people will find it useful to have both a C and a C++ reference; suggestions are given below.

Many of these books are freely available to UW students through the UW Library's subscription to Safari Books Online. Go to https://www.oreilly.com/, click sign-in at the top right, and enter your @uw.edu email address. You will then be directed to a standard UW netid login, after which you can access everything on the site.

Strongly Recommended

Suggested

The course web resources page has links to several useful C, C++, and Linux reference and tutorial sites.

Policies

Accommodations

Please refer to university policies regarding disability accommodations and religious accommodations.

In general, we are always trying to improve the course. If something seems inaccessible or difficult, just reach out to the course staff. We make adjustments (even within the same quarter) based on student feedback.

Cheating

Cheating is a serious offense that can lead to a failing grade and a formal misconduct case. In short: the work you submit must be your own, and you may not use generative AI tools (like ChatGPT, Claude, or Gemini) or IDE auto-complete to produce any part of your graded work.

You may use AI to understand course concepts in general, but never on a specific graded assignment, directly or indirectly (for example, by pasting in a spec, starter code, or tests). If you are ever unsure whether something is allowed, ask the instructor first. Please read our full Academic Integrity policy, which includes concrete examples of allowed and disallowed AI use.