About COMP 40

Why COMP 40?

COMP 40 presents the hardware foundation on which software is built.

We require all students to study computation at the machine level because When you master the material in COMP 40,

Pair programming

On all COMP 40 design and coding assignments you will work in pairs with your fellow students. Working in pairs allows you to tackle more complex challenges, you benefit from the expertise and differing perspectives of your partners, and you have an opportunity to make friendships that will enrich the rest of your time in the CS department at Tufts. Although pair programming is a new experience for most COMP 40 students many COMP 40 graduates report that it was a particularly enjoyable and rewarding aspect of the course.

Details of the COMP 40 pair programming policies are available on the course administration page.


You must grasp basic algorithms, data structures, and good programming practice. Moderate proficiency in either C or C++ is required. In particular,

If you have successfully taken COMP 15 at Tufts, it should have provided you with the experience and skills you will need. If not, you will need the instructor's permission to take COMP 40. Students in the bachelor-certificate program or other graduate programs will be granted permission provided they are confident they can make up any missing material.

You need some Unix experience. You must understand the basics of files, directories, creating and editing files, printing, and compiling programs. You will be much, much happier if you also can write a simple shell script (sh, ksh, or bash) and use Awk and grep effectively. Kernighan and Pike cover these topics at the appropriate level

This course uses the 64-bit x86-64/AMD-64 instruction-set architecture, which may be the most complicated architecture money can buy. To avoid spending many, many hours thrashing out written assignments, you must have or develop the ability to identify relevant information buried in a sea of irrelevant detail. Your course staff will help as we are able.

You must be able to write clear, straightforward technical documentation in English. Properly documenting a program can be as important as correctly coding it, particularly in cases where you expect your program to be used or maintained by others. Furthermore, preparing good documentation is an excellent way to be sure you have thought carefully about the design choices you are making. For all of these reasons, you will be judged on the quality of your technical writing as well as on the quality of your program code.

The Programmer's Mindset

To do well in this or any other systems course, develop these habits:

If you have these habits, the other prerequisites are almost irrelevant. If you don't, you can expect to have difficulty no matter what your background.
Noah Mendelsohn (noah@cs.tufts.edu)
Last Modified 5 January 2014