Welcome to CS 40
Machine Structure and Assembly Language Programming

Course Summary

CS 40 will give you two important experiences:
  1. You will turn the corner from introductory programming to programming as a professional.
  2. You will study in detail the structure of modern computers, and that in turn will add greatly to your understanding of how computer hardware, operating systems, compilers, language runtimes, and other tools work together to influence the performance of your programs.
These two goals are very closely related: all good computer professionals know how to apply deep knowledge of computing systems to their programming projects and to their research in computer science. Whether you are a newly confirmed CS major, someone who is considering a CS major but is unsure, or a student from another field who is interested in a deep look at some of the most important technologies of our time, CS 40 should give you an intense, realistic and (we hope!) exciting look at how modern computers work.

New CS 40 Students

Many students are eager to get a head start on the CS 40 material so that they can arrive as prepared as possible to the first day of class. Here is what you can do to prepare:
  1. When CS 40 begins, you will be making an immediate transition from C++ to C. Be ready for this. Our resources page provides some great tutorials on this transition.
  2. Read our admin page. This page is a comprehensive review of our course policies. You will be expected to adhere to these policies, so a good start is to know what they are. Pay particular attention to our course coding standands and our pair programming conduct guidelines.
  3. Visit the course Piazza forum. (Your instructor will add you to the Piazza roster at the start of the term.)
  4. Make sure that you have access to our course textbooks, which are listed below. In particular, the Hanson book describes the Swiss army knife of tools that will be provided to you for use throughout the semester.
  5. Familiarize yourself with our Halligan Helper system. This is how students can request help from TAs during office hours.


The following two textbooks are required:

Textbook: C Interfaces and Implementations by David R. Hanson
ISBN: 9780201498417
Online access: via Tufts Library
There is also a PDF Quick Reference.

Textbook: Computer Systems: A Programmer's Perspective, 3rd edition by Bryant and O'Hallaron
ISBN: 9780134092669
Important: Make sure you avoid the "International" or "Global" version of this textbook, which is in paperback or the Amazon ebook. While substantially cheaper, many of the chapter practice problems have been rewritten by the publisher and contain many errors and inconsistencies.

Additional books that you may fine useful are listed on our resources page.


Lectures: Tuesdays / Thursdays 1:30 - 2:45 PM EST
Location: SEC Robinson 253

Labs: Friday 10:30 – 11:45 AM, 12:00 – 1:15 PM, and 1:30 – 2:45 PM EST
Location: Joyce Cummings Center 235 and 240

Midterm Exam: See the course calendar
Final Exam: See the course calendar (and the official final exam schedule on the Tufts academic calendar)


Instructor: Mark Sheldon
Zoom ID: mark.sheldon
Email: msheldon@cs.tufts.edu
Office hours: will be posted at www.cs.tufts.edu/~msheldon about the second week of the semester.

Instructor: Noah Medelsohn
Email: noah@cs.tufts.edu
Office hours: will be posted and sometimes updated (check!) at www.cs.tufts.edu/~noah/office_hours.php

Our teaching fellows are Lexi Shewchuk, Randy Dang, Matt Zhou, and Trevor Sullivan. Our graduate TA is Brennan Miller. We also have an army of undergraduate teaching assistants who will hold office hours. Schedules for the undergraduate assistants will be posted and updated on Piazza.

Please refer to our admin page for guidelines on how to contact our course staff with questions and feedback.