Nisan and Schocken (2005). The Elements of Computing Systems. MIT Press.

It is not free, but it is cheap as textbooks go. The text has a companion web site at

Learning Activities

This class meets twice per week on Tuesday and Thursday, 2:30 - 3:50 p.m., in Olin 165.

Each chapter in the textbook corresponds to one implementation project, and we will aim to complete one project each week. Classes will roughly alternate between lecture/discussion to introduce new topics and lab days in which you will begin to implement what you have learned.

Because our time in class is limited, you should come prepared to each class. What does it mean to be prepared? First, check the schedule for today's class meeting to find out what we will be working on.  Second, if there is a reading listed for today's class meeting, read it before class and answer the reading journal questions. Third, come to class on time, with paper and a writing instrument, ready to be an active participant. After class, you should review your notes, and possibly the reading as well, to gain their full benefit.

As well as practicing new concepts through their implementation, you will have the opportunity to demonstrate your learning through two in-class exams.


To help you prepare for class, most days will have a short pre-class "Readback" form for you to fill out. Your average score on Readbacks is worth 10% of the final grade.

You can find the Readback form on the class syllabus next to the reading for the day. Remember it's timestamped and is due at least one hour before the start of class. No late Readbacks will be accepted.

To get the most out of the readings, try the SQ3R method:
Skim the material, especially the introduction, summary, and headings, to get the big picture and an idea of what is important.
Formulate questions that you expect the reading to answer.
Read thoroughly, with particular attention to how the questions are answered.
Check that you can answer the questions, in your own words, from memory.
Go back over the whole, focusing on parts for which you can't answer the questions. Also note any questions you have that the reading doesn't answer or that you are still confused about, so that you can ask these questions in your readback or in class.

Class meetings

Class meetings will involve a mix of lectures, discussions, collaborative activities, and hands-on exercises. During every other class, you will have time to get started on the week's project, and you should be prepared to do so. In short: You are expected to attend and actively participate in class. I am expected to make class worth attending. I encourage you to take notes with pen and paper during class.

Participating in class involves:

If your participation or non-participation is problematic, I will invite you to visit office hours to discuss the issue.


This is mostly a hands-on course, evolving around building a series of hardware (simulated) and software modules. Each module development task is accompanied by a design document, an API, an executable solution, a test script (illustrating what the module is supposed to do), and a detailed implementation plan (proposing how to build it). Most of this information can be found in your textbook. Some will come in the supporting projects directory in which you will do your work.

The projects are spread out evenly, so there will be no special pressure during the semester's end. Although the projects build on each other, you will always have a suitable basis to build on, so that difficulties in one project will not inhibit your ability to succeed in subsequent projects. Each project will be due at 11 p.m. the night before the class in which we start the next project. Projects will be submitted through a web form. The projects are worth 60% of your overall grade.

Wrappers. To help you monitor your learning, you will be required to complete a "wrapper" for most projects. As part of the readback on the day you read the project specification, you will estimate the amount of time you will need to complete the project and think about how it will challenge you. When you submit the project, you will reflect on your experience and what you learned.

Teamwork. Because students can often learn and accomplish more in teams, I encourage collaboration on projects. Moreover, teamwork is an important skill for hardware and software developers. However, good friends do not always make good collaborators.During the first week of class, we will assign a rota of team partners for the semester.

When you work with a partner, you must inform me in a comment at the top of your assignment the names of the two contributors to the homework.

A general structure. Because the projects are fully specified in our textbook, I won't be posting lengthy homework assignments on the course web site. Instead, find brief instructions for getting started and submitting your work.

Significant Bits presentation

At the beginning of most class periods, student will give a brief 5 minute presentation on some topic related to computer systems. During the first week, you will sign up for a date. More information can be found in the Significant Bits assignment. The Significant Bits presentation is worth 5% of your overall grade.


There will be one midterm exam (in class on March 3) and one final exam (9 - 11 am, Tuesday, May 17th). Each exam will cover roughly half of the course material.The two exams together will be worth 25% of your final grade.


Academic Honesty and Collaboration

I encourage collaboration when it promotes learning. However, it is also important for you to understand your homework solutions and to demonstrate your own learning on exams. As explained in the Catalog:

Any form of falsification, misrepresentation of another’s work as one’s own (such as cheating on examinations, reports, or quizzes), or plagiarism from the work of others is academic dishonesty and is a serious offense.

Plagiarism occurs when a student, intentionally or unintentionally, uses someone else’s words, ideas, or data, without proper acknowledgement. College policy regarding plagiarism is more fully explained in the Whitman College Student Handbook. Each student is required to sign the Statement on Academic Honesty and Plagiarism. Cases of academic dishonesty are heard by the Council on Student Affairs.

Here are my policies:

Do your own work. Programming is hard. The only way to learn is to do it yourself. As such, while you may discuss general approaches to homework problems with anyone, you may discuss code only with your designated partner(s) and not with other students. You may also seek help as described below. You may discuss your code with others after the assignment deadline has passed.

When you work with a partner, you should not divide up the problems to work separately. You will not get the full benefit of the assignment if you divide the work. Instead, you should use a pair programming approach to work together on the problems.

All the work you submit to me is implicitly understood to be your own (unless otherwise attributed). If it is discovered that it is not, you will be prosecuted under the College's plagiarism guidelines. If you are tempted to plagiarize to complete a pressing assignment, instead, please talk to me about it.

I also expect you to abide by the textbook author' terms:

We developed this course and made all its materials freely available because we want to help people learn applied computer science on their own terms. We believe that students and self-learners who set out to do the hardware and software projects should have the benefit and challenge of doing original work, without seeing published solutions.

Therefore, we request that you don't post solutions publicly on the web, e.g. in blogs or forums. If your course instructor or organizer creates a private space in which work can be shared outside the public domain, that's fine. Likewise, you can share your work with others using a password-protected space, if it's permitted by the specific course in which you are enrolled.

Please use your judgment and help ensure that many more students, like you, will not be denied the thrill of original work and self-discovery.

– Noam Nisan and Shimon Schocken,

Attribute the contributions of others. When you explicitly work as part of a group or team, you need not identify the work of each individual (unless I specify otherwise). It is assumed that each of you contributed to all parts of the assignment. Any conceptual contributions by individuals not in your group should be acknowledged and attributed in your report. That is, you must give specific attribution for any assistance you receive. The suggested acknowledgment format is "[Person X] helped me to [do thing Y] by [explaining Z]."

Exams. Because I intend the exams to assess your own individual understanding of the material, collaboration on exams is not permitted. If you have questions about the exam, bring your questions directly to me. Of course, I encourage you to collaborate while studying for exams. 

I will offer a small amount of extra credit for turning in a one-page, 8.5"x11", single-sided "cheat sheet", handwritten by you, along with your exam. Preparing a "cheat sheet" serves at least three functions: First, it may save you time and uncertainty during the exam. Second, writing important information may help you to remember it, so that you don't even need to look at your cheat sheet. Third, and most importantly, preparing a "cheat sheet" requires you to reflect on what kinds of problems are likely to appear on the exam and what information will help you solve them.


If you are a student with a disability who will need accommodations in this course, please meet with either Julia Dunn, Associate Dean of Students (Memorial 325, 509-527-5213, or Rebecca Frost, Director of Student Success and Disability Support Services (Memorial 325, 509-527-5213, for assistance in developing a plan to address your academic needs. All information about disabilities is considered private; if I receive notification from Ms. Dunn or Ms. Frost that you are eligible to receive an accommodation, I will provide it in as discreet a manner as possible.


Class is time for learning and practice which you cannot obtain by reading someone else's notes. Thus, 1.5% will be deducted from your overall grade for each unexcused absence.

I will excuse your absence if you have a legitimate reason to miss class and you manage your absence responsibly:

I understand that sometimes "things happen." Therefore, you will be granted one unexcused absence from class without penalty. However, this rebate is cancelled upon a second unexcused absence.


Readbacks are due one hour before class, without exception.

Projects will be due at 11 p.m. the night before the specified class date. Deadlines may be extended for individuals and groups in accordance with the attendance policies described above or, rarely, by negotiation between the instructor and the entire class.

Because I am concerned about your health and well-being, I will also accept late homework according to my "health and well-being" policy. You may invoke this policy under the following conditions:

Getting help

I encourage you to come see me as soon as possible if you are having difficulties with the readings, class sessions, or homework. I also welcome discussions about course content and assignments, related current events, and your interests or career plans.

You are welcome to drop in during my official office hours, posted on my home page, and you may knock any time my door is open. If your need is known at least 24 hours in advance, you are very welcome to schedule an appointment with me for a chat in my office, a walk, or lunch.

Want help with your Significant Bits presentation? The COWS has tutoring hours with speaking fellows Tuesday, Thursday, and Sunday, 8 - 10 p.m. Or schedule an appointment online.

Math & CS Technical Specialist Dustin Palmer in Olin 166 can help with technology problems.

Please see me for everything else.


I will use the following scheme as an initial basis for assigning final grades:

Type of work
Significant Bits presentation

Letter grades will be assigned according to the following scale:

Grade   Percentage
A - 92-100
A- - 90-91
B+ - 88-89
B - 82-87
B- - 80-81
C+ - 78-79
C - 72-77
C- - 70-71
D+ - 68-69
D - 62-67
D- - 60-61
F - 0-59

I do not believe in grading on a curve; I would be thrilled to give you all As. However, I reserve the right to make adjustments if this weighting scheme produces grades which are lower than I believe are deserved. Any such adjustments will only raise your grade, never lower it.

Janet Davis ( with thanks to Sam Rebelsky, Henry Walker, Jerod Weinman, and Albert Schueller

Created January 17, 2016
Last revised April 14, 2016, 11:30:58 AM PDT
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.