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 processor 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:

  • understand the multi-step process by which a high-level program becomes a stream of instructions executed by a processor;
  • know what a pointer is and how to use it in manipulating complex data structures;
  • be facile enough with assembly programming (x86-64) to write simple pieces of code and understand how it maps to high-level languages (and vice-versa);
  • understand the basic organization and parameters of memory hierarchy and its importance for system performance;
  • be able to explain the role of an operating system;
  • know how Java fundamentally differs from C;
  • be more effective programmers (more efficient at finding bugs, improved intuition about system performance).

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:

  • Lectures: There will be 26 lectures. Attendance and participation is expected at all of them.
  • Online Assignments (Homework): There are 5 homework assignments, due roughly every other week, that will be mostly problems from the text. Homework is done online via Canvas. Students may receive slightly different problems on homework.
  • Programming Assignments (Labs): There are 6 total labs, due roughly every other week. All the undergraduate lab machines (and the VM) 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.
  • Reading: We will assign readings from the course textbook that correspond to lecture topics.
  • Exams: There will be a midterm and a final — see the for more information.

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

We will compute your course grade as follows:

  • Homework: 20%
  • Labs: 35%
  • Midterm: 15%
  • Final: 30%

Extra Credit

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 only have a small effect on your overall grade (possibly none if you are not on a borderline) and 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 assignments are due at 11:59pm (and zero seconds) on the dates specified. This means that if your clock reads "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.

  • Written assignments (homework) are autograded via Canvas and late submissions are NOT allowed. You are allowed 20 attempts for each quiz and you will receive credit for every question that you answer correctly. As long as you make a submission before the deadline, you will be able to review the homework questions and your responses at any time.
  • Programming assignments (labs) are submitted by uploading files to Canvas assignments. Late lab submissions are subject to the late day policy described below. Labs are graded by a combination of grading scripts and TAs.
  • Exams are taken by everyone at the same time. See the schedule or the for dates.

Lab Late Day Policy

Labs are due at the assigned due date. Late submissions are allowed through the end of the 4th day (or 96 hours) after the due date, but incur a late penalty of 20% per day late.

  • A late day is defined as the 24 hour period after an assignment's due date: num_late_days = ceil(hours_late / 24).
  • Score = min(graded score, points possible * (1 - .2*num_late_days))
  • E.g., if your raw graded score was 89%, but you submitted it within 24 hours after the due date, you would receive an 80%.
Note that all assignment submissions close at most 4 days (96 hours) after the due date.

Collaboration and Cheating

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:

  • 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 be preparation for the exams.
  • Labs: 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).
  • Exams: Exams are taken individually and any attempt to use unpermitted materials or copy off of another student's exam will be heavily punished.

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.
  • 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 department and major 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 department's .

Solutions and Regrades

  • 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 on the 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. 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:

  • Note that if 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.
  • Lab regrades: Send an email to the grader (find who commented on your assignment submission) and CC the instructor.
    • Include a written summary describing why your work should be looked at again.
    • Regrade requests should be submitted within a week of when the lab was graded.
  • Exam regrades: Requests are made via .
    • Submit separate regrade requests for each subquestion. Each regrade box is for only that particular part of the exam.
    • Regrade requests will typically be closed 2-3 days after grades are released. Pay attention to lecture announcements for exact dates.

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.

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 Piazza 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, religious observations, 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 .