All times listed on the 373 course website are in Seattle time. If you are in another time zone, it is your responsibility to know how a due date in Seattle time relates to your time zone. You can use this site to translate times.


Not registered for the course, but interested in following along? Check out the materials we provide publicly in 20au.


In this course, you will gain a strong theoretical and conceptual understanding of common data structures and algorithms, as well as how to apply them within larger programming projects.

Specific topics we will cover include:

  • Data structures and ADTs: lists, stacks, queues, sets, dictionaries, linked lists, arrays, trees, balanced trees, AVL trees, hash tables, priority queues, binary heaps, and disjoint sets.
  • Graphs and graph algorithms: graph search, shortest path, and minimum spanning trees.
  • Algorithm analysis: asymptotic analysis, and P and NP complexity classes.
  • Sorting and divide-and-conquer.

This course is also designed to have a practical component to help you gain basic familiarity with techniques used within industry. In particular, you’ll be asked to:

  • Work on large programming projects and integrate your work in an existing codebase.
  • Learn how to use an industrial-strength IDE.
  • Learn techniques for checking correctness: writing unit tests with JUnit, designing and checking invariants, etc.
  • Learn how to collaborate on a single code base using source control repositories.

Finally, this course emphasizes the importance of making and justifying design decisions. Taken together, all of the above skills are chosen to set you up for success in a software-related role, and in particular this course is typically regarded as useful preparation for industry and technical interviews.

Prerequisite: CSE 143, or similar Java programming experience.

Class Sessions

Motivated by the shift to the online quarter, we will be transitioning to a “flipped classroom” model for our instruction. To accomplish this the lecture content (called “lessons”) will be done asynchronously via a series of pre-recorded videos (via ItemPool) and our “in-person” class sessions (via Zoom) will focus on structured activities to practice the skills and ideas you learned in the lesson. This means the majority of your time seeing the course content will be on your own time outside the class session, while the class session will be hosted to give you practice on the material you saw in the lesson you completed earlier.

While it’s possible to just watch the videos and skip the live-sessions, we do not recommend it. For brief motivation for why we are doing all of the work to move lecture content outside of class time and what the class sessions will look like, read below.


In a “traditional classroom” model you go to a classroom and a teacher will lecture at you until the end of the session. You then go home and do the hard work of actually trying to apply that material on practice problems or an assignment. More often than not, you might have felt like while you were able to nod along during the class, you have absolutely no idea where to start in order to solve one of the problems.

Here are two things that are likely true about this classroom model:

  • It is probably familiar to you.
  • It is probably familiar to most of your instructors (it’s how they learned, so it must work, right?).

Notice this list does not contain, “effective for student learning” in it. Unfortunately for the traditional classroom model, most evidence has shown that it’s quite ineffective of achieving that goal!

Think of learning programming (or any skill for that matter) like learning how to ride a bike. How many people know how to ride a bike? Not everyone, but quite a few. How many of them do you think learned how to ride a bike by attending an online Zoom meeting three times a week and then a quiz section once a week? Probably no one! Why? That’s obviously not learning how riding a bike works! To learn how to ride a bike, you have to actually go out there and ride the damn bike!

In more general terms, we are emphasizing that learning some concept or some skill requires active participation in the learning process and deliberate practice from the students. This can be summarized that learning happens by doing. Sitting passively in a lecture listening to someone talk fails at accomplishing this fundamental aspect of learning.

The flipped classroom model is built around fostering an environment for effective practice. Instead of coming to lecture to hear Hunter talk about some idea and then trying to go practice the idea at home (a much harder task), we flip this whole model around! You will watch some videos about the concept first (at your own pace) and then come to our class session to work with your classmates, the TAs, and Hunter on practicing that skill! This has the added benefit of collaborative learning where you can work with your peers to construct a working knowledge of the things you saw from the lesson earlier.


Every Monday, Wednesday, Friday there will be lessons linked on the course calendar that you should complete before our scheduled class session that day. Each lesson is a series of videos focused on that day’s topic. Each video will be hosted on ItemPool, where we will periodically ask you to answer a question on the website that requires you to actively use the concepts you just learned. This will act as a good test of your current understanding to help you focus on what you might need to practice more in class.

We recommend the following workflow to help you get the most out of your time with us during the quarter. For each day of class:

  • Complete the Lessons: Watch the videos for the day. When ItemPool prompts you for a question, actually pause the video and take some time to think through and answer before continuing. Then, when the video explains the answer make sure you had the right reasoning. If you were incorrect, that’s okay! Just take note of it as something you need to revisit later.
    • You should definitely be taking notes to refer to later! The videos will be broken up into smaller portions, so use the time before starting the next video to make sure your notes on the last section are complete.
    • Take pauses to pause and reflect on what you’re learning so far. How does this new concept relate to a past one? What doesn’t quite make sense about this yet?
  • Attend the Class Session: Come to class prepared with your notes from the lesson, ready to practice the concepts you saw with your peers. We will spend a bit of time in class reviewing concepts, but most of the time will be spent with students in breakouts working on practice problems. During this time, TAs will “walk around” to answer questions and help your group if you’re stuck.
  • Reflect: Now that you got some practice with the material for the day, it’s time to reflect on what you learned and you how you felt the day went. Maybe write down a closing section of your notes to summarize what you learned and leave notes to yourself about what you might need to study more.
    • In a few sentences, describe in your own words what you learned learned today.
    • Why did we learn this concept?
    • How does this concept relate to what we’ve learned previously?
    • What parts did you find tricky? Are there things you feel like you still need to work on more before you master the concept?

There are also “quiz sections” on Thursdays that will also operate to provide structured practice. Quiz sections will differ from our M/W/F class sessions in that they are smaller and run by the TAs and will focus on tying together concepts from the various days to help prepare you for your weekly homework assignments! Attendance in the class sessions and quiz sections is not taken or used as part of your grade. However, it is expected that you are showing up and participating as much as you can so that you are maximizing your learning!

Course Components

Grade Breakdown

Your percentage grade in this course will be weighted using these categories:

Category Weight
Programming Projects 45%
Individual Exercises 25%
Exam I 15%
Exam II 15%
Total 100%


There will be five programming projects (P0 through P4). Each project contains an auto-graded programming portion and a writeup component. Starter code is distributed on the CSE GitLab and your solutions to both parts are submitted on Gradescope. We will discuss how to use the technology for the course in the first project, so don’t worry if those tools don’t sound familiar to you!

Starting with P1, programming projects will be partner-based. You could:

  • Work with someone you know. You will have the option of choosing a partner before starter code for P1 is distributed.
  • Join the partner pool. We will randomly pair you up with another student. This is the default if you do not explicitly choose a partner.
  • Work alone. If you would like to work alone, you must explicitly opt-out of the partner pool. We do highly encourage a partner, as our projects are designed with a two-person workload in mind.

A sign-up form will be distributed in advance of projects to allow you to make your selection from the choices above.


There will be five individual written exercises. They focus on mechanical, theory, and basic application problems to reinforce content from lecture, and are explicitly designed to provide practice for the exams. Exercises are distributed via Gradescope. Exercises are to be completed individually, although you may discuss concepts and problems at a high-level as outlined in our Collaboration policy.


There will be two exams during the quarter—see the course calendar for dates. The exams are open-note and unlike the individual exercises, group submissions are allowed. Instead of being timed, each exam will be open for 48 hours. The exams are written to be completed within one sitting, but you can use the entire 48 hours to work on them.

We will announce special Exam Office Hours for you to ask any clarification questions about the problems, but TAs will not give you detailed help or hints on your solutions.

More details about the exams will be published closer to their release.

Extra Credit

There are several opportunities to earn small amounts of extra credit throughout the quarter. The extra credit can affect your grade by potentially pushing you up to the next grade point if you are very close (e.g. 3.0 to 3.1). They are meant to be fun extensions rather than required parts of the course. Our advice is to complete extra credit for your own learning or review, but it is unlikely to be an efficient use of your time if you are completing it solely to boost your grade.

Course Grades

A very common question students ask is: “Is this class curved?” Curving is the process of assigning course grades so that there is a fixed, pre-determined mean or median. We do not curve in this course!

Instead, we will assign course grades using a bucket system: if you earn at least the percentage specified in the left column, your course grade will be at least the grade listed on the right. These are minimum guarantees: your course grade could be higher than what this table suggests. Do note, we do not make any guarantees of the course grades within these buckets.

Percent Earned Course Grade
90 3.5
80 3.0
70 2.5
60 2.0
50 0.7

If you have a specific goal in your course grade, please feel free to reach out to the course staff or directly to the instructor and we can work together to talk about what you can expect in terms of meeting that goal.



Each student receives seven late days for the entire quarter. You may use late days on projects or exercises, and each allows you to submit up to 24 hours late without penalty. For example, if a project is due on Thursday at 11:30pm, you could use 2 late days to submit on Saturday by 11:30pm with no penalty. Once a student has used up all their late days, each successive day that an assignment is late will result in a loss of 5% on that assignment. The deduction will not be immediately applied on Gradescope, but will be reflected in the final grades you see on Canvas.

No assignment may be submitted more than 3 days (72 hours) late without permission from the course instructor. In other words, this means there is a practical upper limit of 3 late days usable per assignment. If unusual circumstances truly beyond your control prevent you from submitting an assignment, you should discuss this with the course staff as soon as possible. If you contact us well in advance of the deadline, we may be able to show more flexibility in some cases.

To use a late day, just submit late and we will keep track of late days used and lateness deductions for you. Note that late days are individual, so a late submission of a partner programming assignment will use a late day from each group member, and lateness deductions will apply to each partner separately according to the current state of their late days.

There is a small grace period for last-minute submission issues, but you should plan ahead to avoid depending on it.

Note on Extenuating Circumstances: If you have extenuating circumstances for an assignment, please contact the instructor as soon as possible to discuss accommodations. See the section below on Extenuating Circumstances.


Learning anything can be challenging! We encourage you to discuss course activities with your friends and classmates as you are working on them. Ask questions, answer questions, and share ideas liberally; we want a class that is open, welcoming, and collaborative, where we can help each other build the highest possible understanding of the course material. However, to encourage everyone to learn the material, we impose restrictions on the information you may share with your classmates (see below).

Whenever you receive help from a third-party source, please cite any help that you receive as a method comment in code or as a footnote in writeups. There is no penalty for working with too many classmates. When in doubt, you should always err on the side of giving credit.

Ultimately, the goal of enrolling in this course is for you to learn this material, so that you will be prepared for exams, for research, for job interviews, etc. Engaging in academic misconduct does not help you towards that goal. If you are in doubt about what might constitute cheating, send the course staff an email describing the situation and we will be happy to clarify it for you.

Collaboration on Projects

You are allowed to fully collaborate with your project partner and submit a single submission together. For working with students outside of your partnership, you must observe these additional guidelines:

  • You should never directly show another student your code.
    • Instead, you are welcome to describe what is happening either verbally or in text.
    • It is okay to share small snippets of code, but this should be only a couple lines at most, never entire methods.
  • You should not be working on assignments in close collaboration (“in lockstep”).
    • Your work should not substantially resemble anyone else’s besides your partner!
    • As a guiding principle, collaborate on specific issues or questions as opposed to the entirety of an assignment.
  • You should never distribute solutions at any time, even after the course is over.
    • “Distribution” includes uploading them to public websites (e.g. a GitHub repo), group repositories (e.g. your club’s/frat’s/sorority’s “answer bank”), or private chats (e.g. a group chat with a few friends).

We may run MOSS (Measure of Software Similarity) on student submissions to detect over-collaboration.

Collaboration on Exercises

You can talk about problems, the process, and your ideas, but you should never show or describe to another person your writeup or final answer. It is cheating if someone else has done the work to get an answer and you see that answer without work. It is awesome if both of you work together to arrive at a common answer.

If you are working with another person over Zoom, you should typically share a whiteboard rather than your screen, so that you are in the process of sharing ideas rather than observing answers.

This is important, so allow us to restate it: please cite your collaborators. There is no penalty for doing so.


After discussing a problem on an exercise, take a break before you go and solve the problem yourself! Go watch an episode of TV or listen to a podcast (I can’t recommend 99% Invisible enough) to give you some time to process the topics you discussed. This will assure that you are able to reconstruct what you learned from the meeting, by yourself, using your own brain.

Collaboration on Exams

You are allowed to fully collaborate with the students in your group and submit a single submission together. For working with students outside of your partnership, you must observe the same additional guidelines as for exercises.

Course Tools

This quarter, we will use a number of different tools in CSE 373. Reach out to the course staff if you have questions about using any of them. Please see the Course Tools page for more information about the particular tools we will use this quarter and our policies surrounding them.

Getting Help from Staff & Peers

Discussion Board

Ed and Discord both serve as online discussion forums. For most questions about the course or materials, they are the right place to ask: the course staff read them regularly, so you will get a quick answer. On Ed, you can also submit questions anonymously or privately to the course if you are more comfortable doing so.

To meet with us, the best way is to visit our virtual Office Hours. Many of us are available at other times by appointment. In Office Hours, you can ask questions about the material, receive guidance on assignments, and work with peers and course staff in a small group setting.

Office Hours

Office Hours are scheduled times where you can meet with members of the course staff to discuss course concepts, get assistance with specific parts of the assignments, or discuss computer science and/or life outside of it.

Because of the unique circumstances in our online quarter, the majority of office hours this quarter will be held via Discord. More information about Discord and its associated privacy policy can be found on the office hours page of this website.

Course Climate

This course welcomes all students of all backgrounds. The computer science and computer engineering industries have significant lack of diversity. This is due to a lack of sufficient past efforts by the field toward even greater diversity, equity, and inclusion. The Allen School seeks to create a more diverse, inclusive, and equitable environment for our community and our field. You should expect and demand to be treated by your classmates and the course staff with respect. If any incident occurs that challenges this commitment to a supportive, diverse, inclusive, and equitable environment, please let Hunter know so the issue can be addressed.

Extenuating Circumstances: “Don’t Suffer in Silence”

We recognize that our students come from varied backgrounds and can have widely-varying circumstances. We also acknowledge that the incredibly unusual circumstances of this particular quarter may bring unique challenges. If you have any unforeseen circumstances that arise during the course, please do not hesitate to contact the course staff or the instructor to discuss your situation. The sooner we are made aware, the more easily we can provide accommodations.

Typically, extenuating circumstances include work-school balance, familial responsibilities, health concerns, or anything else beyond your control that may negatively impact your performance in the class. Additionally, while some amount of “productive struggle” is healthy for learning, you should ask the course staff for help if you have been stuck on an issue for a very long time.

Life happens! While our focus is providing an excellent educational environment, our course does not exist in a vacuum. Our ultimate goal as a course staff is to provide you with the ability to be successful, and we encourage you to work with us to make that happen.


Embedded in the core values of the University of Washington is a commitment to ensuring access to a quality higher education experience for a diverse student population. Disability Resources for Students (DRS) recognizes disability as an aspect of diversity that is integral to society and to our campus community. DRS serves as a partner in fostering an inclusive and equitable environment for all University of Washington students.

DRS Instructions for Students

If you have already established accommodations with DRS, please communicate your approved accommodations to the lecturers at your earliest convenience so we can discuss your needs in this course.

If you have not yet established services through DRS, but have a temporary health condition or permanent disability that requires accommodations (conditions include but not limited to; mental health, attention-related, learning, vision, hearing, physical or health impacts), you are welcome to contact DRS. DRS offers resources and coordinates reasonable accommodations for students with disabilities and/or temporary health conditions.

Reasonable accommodations are established through an interactive process between you, your lecturer(s) and DRS. It is the policy and practice of the University of Washington to create inclusive and accessible learning environments consistent with federal and state law.

Religious Accommodations

Washington state law requires that UW develop a policy for accommodation of student absences or significant hardship due to reasons of faith or conscience, or for organized religious activities. The UW’s policy, including more information about how to request an accommodation, is available at Religious Accommodations Policy. Accommodations must be requested within the first two weeks of this course using the Religious Accommodations Request form.


Our code and our projects are made better by considering a variety of viewpoints. Your course staff is committed to the values outlined in the Allen School’s inclusiveness statement, and you are expected to uphold a supportive and inclusive learning environment.

If, at any point, you are made to feel uncomfortable, disrespected, or excluded by a staff member or fellow student, please report the incident so that we may address the issue and maintain a supportive and inclusive learning environment. Should you feel uncomfortable bringing up an issue with a staff member directly, you may consider submitting anonymous feedback or contacting the Office of the Ombud.