Course Goals

This course should develop students' sense of what really happens when software runs — and that this question can be answered at several levels of abstraction, including the hardware architecture level, the assembly level, the C programming level, and the Java programming level. The core around which the course is built is C, assembly, and low-level data representation, but this is connected to higher levels (roughly how basic Java could be implemented), lower levels (the general structure of a processor), and the role of the operating system (but not how the operating system is implemented).

For (computer science) students wanting to specialize at higher levels of abstraction, this could, in the extreme, be the only course they take that considers the “C level” and below. However, most will take a subset of , , , etc.

For students interested in hardware, embedded systems, computer engineering, computer architecture, etc., this course is the introductory course after which other courses will delve both deeper (into specific topics) and lower (into hardware implementation, circuit design, etc.). Of particular interest are , , , and .

Course Themes

The course has three principal themes:

  • Representation: How different data types (from simple integers to arrays of data structures) are represented in memory, how instructions are encoded, and how memory addresses (pointers) are generated and used to create complex structures.
  • Translation: How high-level languages are translated into the basic instructions embodied in process hardware with a particular focus on C and Java.
  • Control Flow: How computers organize the order of their computations, keep track of where they are in large programs, and provide the illusion of multiple processes executing in parallel.

Course Objectives

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

  • Describe the multi-step process by which a high-level program becomes a stream of instructions executed by a processor;
  • Describe the basic organization of the memory hierarchy and the effect of its parameters on system performance;
  • Trace the execution of assembly code (x86-64), map the assembly to high-level language constructs, and write simple pieces of assembly programs;
  • Write C code using pointers to create and manipulate complex data structures;
  • Write (or rewrite) code to take advantage of the computer execution model to improve execution efficiency;
  • Debug small-ish C and assembly programs using GDB;
  • Explain the role of an operating system;
  • Describe fundamental differences between Java and C.

Course Syllabus

Approximate list of topics:

  • Memory and data representation
  • Number representation for integers and floats
  • Machine code and the C programming language
  • x86-64 assembly language
  • Procedures and stacks
  • Arrays and other data structures
  • Memory and caches
  • Operating system process model
  • Virtual memory
  • Memory allocation
  • Implementation of high-level languages (e.g., Java)

Note that even more important than the topics at various levels of abstraction is the connection between them: students should get an informal sense of how Java could be translated to C, C to assembly, and assembly to binary.

Course Components

The course consists of the following elements:

  • Pre-Lecture Reading: The main technical material will be introduced via interactive readings and check-in questions on the platform. These should be completed before engaging with lecture material. Pre-lecture readings are due at 11:00am PST of the corresponding lecture day.
  • Lectures: There will be 29 lectures. In-person attendance is highly encouraged, but lecture recordings and activities will be made available afterward. Any lecture activities not completed during lecture will be due at 11:00am PST on the day of the NEXT lecture meeting on .
  • Sections: There will be one section meeting per week on Thursdays. Section will provide additional practice with the course material and sometimes introduce new topics.
  • Online Assignments (Homework): There are approximately 25 online homework assignments, one roughly every lecture. These are intended to solidify the lecture concepts and are generally due two lectures later, though they are intended to be completed before the next lecture. Homework assignments are due at 11:59pm PST on the date indicated in the assignment lesson on .
  • Programming Assignments (Labs): There are 6 total labs, due roughly every other week. The CSE VM (as well as the CSE-only server attu) will have access to the necessary tools. We will use these assignments to reinforce key concepts and will strive to have them be as practical as possible.
  • Programming Lab due dates are found on the individual lab assignment webpages, linked from the course schedule.
  • Reading: There will be corresponding optional readings from that correspond to lecture topics. Note: We will be using the (North American) 3rd edition. (list of changes from 2nd edition 2011, Errata) Additionally, you may find a good C programming language reference quite useful. Examples are Kernighan and Ritchie, The C Programming Language, 2nd edition and Harbison and Steele, C: A Reference Manual.
  • Exams: There will be a midterm and a final exam. Both exams will be take home exams held over multiple days. Exact dates and more details about these will be announced later.

We will try to ensure that the workload is typical for a 4-credit course, namely, 9-12 hours per week outside of the lectures. If we do not succeed, please let us know in whichever way you feel the most comfortable (in-person, email, ) and explain which parts of the course are causing you to spend too much time non-productively.

We have structured the course so that spending a few hours per day will maximize your efficiency. You will work this way in the real world – you cannot cram a three-month design assignment into the last night – so you may as well work this way now. Plus, you will understand the material better. If you leave an assignment for the day before it is due you will not have time to ask questions when (not if) the software misbehaves.


Grading Policies

Your final grade will be a reflection of your level of mastery of the topics and material covered throughout the quarter. The following assessments will be used to compute your grade. We will compute your course grade approximately as follows (percentages may be modified):

  • Pre-Lecture Readings: 5%
  • Homework: 20%
  • Labs: 40%
  • Midterm: 16%
  • Final: 16%
  • Participation: 3%

The course grading policies are designed to be relatively forgiving, such that everyone can succeed in the course. Grading for this class is not curved in the sense that the average is set at (say) 3.0 and half of the class must receive a grade lower than that. If everyone does well and shows mastery of the material, everyone can receive an A.


Part of your grade will be determined by your participation in various parts of the course. We will look at participation on the Ed message board in terms of not only asking questions, but also importantly: answering questions, as well as reading posts from others. Posting anonymously on Ed Lessons is fine! Your identity will be unknown to other students in the course, but not to the staff.

We will be using using for polling activities during lecture. Students who are not able to attend lecture will still be able to submit answers to these questions asynchronously.

Lecture Polling

You will receive credit for voting on multiple choice questions in lecture. This quarter we will be using , which you should have open during lecture (whether live or recorded).

These questions are designed to give you a chance to check your understanding of the material by applying it on-the-spot, as well as an opportunity to interact with your classmates. These are intended to be low-pressure and lenient so the grading primarily reflects participation (i.e., your answer does not need to be correct). Earning ~80% of the possible points should get you full credit for lecture questions.

Extra Credit (Labs)

We will keep track of any extra credit items you complete on labs. You won't see these affecting your grades for individual labs, but they will be accumulated over the course and will be used to bump up borderline grades at the end of the quarter.

The bottom line is that these will likely have NO effect on your overall grade (and only a small amount if you are on a borderline). You want to be sure you have completed the non-extra credit portions of the lab in perfect form before attempting any extra credit. They are meant to be fun extensions to the assignments, so if you complete some extra credit it *may* positively impact your overall grade.

Assignment Policies

All assignment submission deadlines have an implied "and zero seconds" attached to them. This means that if your clock reads the deadline time (e.g., "11:59"), then your assignment is late! In addition, online submission can be fickle, so we highly recommend making partial submissions as you go and not waiting until the last (literal) minute to submit.

  • Pre-Lecture Readings have quiz questions and are graded on completion, so late submissions are NOT allowed. After submitting an answer, you are encouraged to revisit your work and submit again, though you are able to reveal the correct answer and solution if you are short on time. Pre-lecture readings are intended to be done before lecture, and are due at 11:00am (30 min before the start of Lecture A).
  • In-class activities are hosted as Ed Lessons and will be completed during class. If we do not complete all questions during lecture, you should complete the remainder by 11:00am on the day of the NEXT lecture.
  • Online assignments (homework) are autograded and late submissions are NOT allowed. You are allowed an unlimited number of attempts for each quiz and you will receive credit for every question that you answer correctly. Homework assignments are due at 11:59pm on the date indicated in the assignment lesson on Ed.
  • Programming assignments (labs) are submitted by uploading files to Gradescope assignments. Late lab submissions are subject to the late day policy described below. Note that you will sometimes need to submit the same file(s) to the separate extra credit assignments if you would like to have those graded. Labs are graded by a combination of grading scripts and TAs. Programming Lab due dates are found on the individual lab assignment webpages, linked from the course schedule.
  • Exams are "take-home" and must be completed within the allotted window of time. There will be a midterm and a final exam, and both exams will be held over multiple days. Exact dates and more details about these will be announced later. Exams are graded by the staff and will be handled via .

Late Day Policy (Labs)

While turning in assignments on time is the best way to stay on top of the material and on schedule, we realize that we all may face unexpected challenges occasionally. This quarter we are giving each student a total of 5 late days for the entirety of the quarter to utilize on labs (NOT homeworks) should the need arise. Please do not use these casually, as they are meant to provide a buffer to help you get over unexpected events.

  • A late day is defined as the 24 hour period after an assignment's due date: num_late_days = ceil(hours_late / 24).
    • An exception is made for weekends, which count as a single late day. That is, if an assignment is due at 11:59 pm on Friday, submitting before Sunday at 11:59 pm counts as using only ONE late day (submitting by 11:59 pm on Monday would count as using TWO late days).
  • All lab submissions will close two late days past the original due date. (e.g. If a lab is due on a Friday, the last day it will be accepted is Monday at 11:59pm.) No labs will be accepted after two late days past the original due date.
  • There is no bonus for having leftover late days at the end of the quarter.
  • For 22sp: A maximum of one late day may be applied to Lab 5. Submitting Lab 5 by Sunday June 5 at 11:59pm will count as using one late day. Lab 5 submissions will close and Lab 5 will NOT be accepted after Sunday June 5 at 11:59pm.

What happens if I have used up all my late days? You may still submit any lab up to two late days past the original due date (except Lab 5 as noted above). However, for each late day you use that exceeds the total late days given to you, you will be penalized 20% of your score on one of the items that you submitted late. The penalties will be applied in a manner that maximizes your overall grade (i.e. minimizes your total penalties).

Solutions and Regrades

  • Pre-Lecture Reading: Solutions will be provided for most quiz questions once answered correctly or revealed.
  • Homework: Solutions will not be provided. Since you are allowed multiple attempts, make sure to go to office hours or talk to classmates if you feel stuck.
  • Labs: Solutions will not be provided. Most labs will include testing tools to allow you to evaluate whether or not your solution is likely working. Your lab grades will provide comments for any portion deemed incorrect.
  • Exams: Solutions will be posted after all students have taken the exam.

Learning from our mistakes is often one of the most memorable ways of learning and the staff is not immune from making them, too! If you have a question about a graded assignment or exam, please don't hesitate to ask a staff member about it during their office hours or via private post on Ed Discussion. If, after discussing your question, you feel that your work was misunderstood or otherwise should be looked at again to see if an appropriate grade was given, we ask that you submit an electronic regrade request via the interface, which will open and close automatically. Note that when an assignment is regraded, the entire work will be regraded. This means that while it is possible to regain some points, it is also possible to lose points.

  • Pre-Lecture Reading regrades: These are autograded, but if you believe there might be an error in our answers, please email the instructor or make a private post on Ed Discussion.
  • Homework regrades: These are autograded, but if you believe there might be an error in our answers, please email the instructor or make a private post on Ed Discussion.
  • Lab regrades: Make sure to include a short summary describing why your work should be looked at again.
  • Exam regrades: Submit separate regrade requests for each subquestion. Each regrade box is for only that particular part of the exam. Make sure you explain why you believe that your exam has been misgraded based on the provided solutions and Gradescope rubrics.

COVID-19 Safety

According to the email President Cauce sent on March 8th, we will be resuming in-person instruction on March 28th and onwards. In her email, she outlines the following recommendations:

  • Students, staff, and faculty are encouraged to get tested before coming back to campus.
  • Students, staff, and faculty are encouraged to get a booster shot as soon as they are able.
  • Mask recommendations (more below) have been updated to encourage surgical masks that fit well, including KN95 or KF94 masks as being excellent options.
Masking is now optional, but it is encouraged that you continue to wear a mask. President Cauce strongly recommends the continued usage of masks during the first two weeks of the quarter as our peers and colleagues return from potential travel. Please see more here. Everyone is also encouraged to make sure they have a higher quality mask based on the increased transmissibility of the Omicron variant.

From UW's masking policy:

  • While not required in most indoor settings, face coverings remain an important intervention against respiratory illnesses of all kinds and offer an additional layer of protection. Individuals may choose to wear a face covering if they are in close contact with someone who is at high risk for severe illness (such as a household member) or have close contact young children who are not yet eligible for vaccination.
  • Some people may choose to wear a mask out of consideration for people who may be at high risk in public settings, or if they want to further reduce their own risk for any reason. Please remember that individuals may need to or choose to wear — or not wear — masks for a wide range of reasons. Thank you for respecting those needs and choices.

What should I do if I feel sick?:

  • Do NOT come to lecture, section or in-person office hours if you are feeling sick. The course has been designed such that you can take advantage of lecture recordings (also streamed on Panopto), section materials, Zoom office hours and Ed Discussion board without coming to campus. You will not be penalized for staying home and keeping our community safe.
  • See this FAQ by UW on what you should do if you get sick.
  • If you are potentially exposed to COVID-19, Follow the recommendations outlined in this flowchart by EH&S.

Academic Conduct

In general, we encourage collaboration, but there is a very fine line between collaboration and cheating. We can learn a lot from working with each other and it can make the course more fun, but we also want to ensure that every student can get the maximum benefit from the material this course has to offer. Keep in mind that the overall goal is for *YOU* to learn the material so you will be prepared for the exams and for job interviews etc. in the future. Cheating turns the assignments into an exercise that is a silly waste of both your time and ours; save us both by not doing it.

Permitted collaboration:

  • Pre-Lecture Reading: Collaboration and discussion is encouraged to help prepare you for the lecture.
  • Homework: Collaboration and discussion is encouraged (find a homework group!), but you are responsible for understanding the solutions on your own, as the problems are meant to solidify your grasp of the material, which is helpful for exams.
  • Labs: Outside of your (optional) partner, collaboration should be restricted to high-level discussion (i.e., ideas only). A good rule of thumb is that you should never show your own code while helping another student (viewing their code is highly discouraged, as it often leads to problematic situations).

Cheating consists of sharing code or solutions to assignments by either copying, retyping, looking at, or supplying a copy of a file. Examples include:

  • Coaching a friend to arrive at a solution by simply following your instructions (i.e., no thinking involved). An example is helping a friend write a program line-by-line.
  • Copying code from a similar course at another university or using solutions/code on the web, including GitHub and Chegg.
  • Communicating your solution with another student via electronic or non-electronic means.

Cheating is a very serious offense. If you are caught cheating, you can expect a failing grade and initiation of a cheating case in the University system. Cheating is an insult to the instructor and course staff, to the school and program, and most importantly, to you and your fellow students. If you feel that you are having a problem with the material, or don't have time to finish an assignment, or have any number of other reasons to cheat, then talk with the instructor. Just don't cheat.

If you are in doubt about what might constitute cheating, send the instructor an email describing the situation and we will be happy to clarify it for you. For more information, you may consult the school's .

Disability Resources

The is a unit within the Division of Student Life and is dedicated to ensuring access and inclusion for all students with disabilities on the Seattle campus. They offer a wide range of services for students with disabilities that are individually designed and remove the need to reveal sensitive medical information to the course staff. If you have a medical need for extensions of exam times or assignment deadlines, these will only be granted through official documentation from DRS. Browse to to start the process as soon as possible to avoid delays.

You can refer to the university policies regarding for more information.

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 . Accommodations must be requested within the first two weeks of this course using the .

Extenuating Circumstances and Inclusiveness

We recognize that our students come from varied backgrounds and can have widely-varying circumstances. If you have any unforeseen or extenuating circumstance that arise during the course, please do not hesitate to contact the instructor in office hours, via email, or private Ed Discussion post to discuss your situation. The sooner we are made aware, the more easily these situations can be resolved. Extenuating circumstances include work-school balance, familial responsibilities, military duties, unexpected travel, or anything else beyond your control that may negatively impact your performance in the class.

Additionally, 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 sending or contacting the .