CSCI 2330
Foundations of Computer Systems

Bowdoin College
Spring 2021
Instructor: Sean Barker

Course Overview

This course will provide a broad, programmer-oriented introduction to how modern computer systems execute programs, store information, and communicate. We examine the hardware and software abstractions and implementations required to go from a program expressed in a high-level programming language like C to the computer actually running the program. Topics include concepts of program compilation and assembly, machine code, data representation and computer arithmetic, caching and the memory hierarchy, processes, and system-level I/O.

Primary course goals include:


CSCI 2101 (Data Structures). Prior knowledge of C is not required or expected.


Instructor: Sean Barker
Office: Searles 220
Phone: 207-798-4220
Virtual Office Hours: Tuesdays and Fridays 11:00-12:30, or by appointment.

Learning Assistants (LAs):
Joshua Lin (jlin)
Braden Fisher (bfisher)
Nhi Nguyen (nnguyen2)
Stephen Crawford (scrawfor)

Evening Virtual Lab Schedule (Zoom link available on Blackboard):
Sundays: 7-9 PM (with Sean)
Mondays: 6-8 PM (with Braden)
Tuesdays: 6-8 PM (with Stephen)
Wednesdays: 6-8 PM (with Nhi)
Thursdays: 6-8 PM (with Josh)

Class Information

Mondays, Wednesdays, and Fridays, 9:00 AM - 10:20 AM
Physical classroom: Visual Arts Center (VAC) South 303 (starting February 17)
Virtual classroom: Zoom link available via Blackboard

Prior to Wednesday, February 17, class meetings will be held remotely over Zoom. Starting on February 17 and subject to College approval, all class meetings will be held in person unless announced otherwise. Remote connections will remain available on a best-effort basis, but should only be used as necessary to accommodate health guidelines (e.g., sickness or quarantine). Otherwise, students are expected to attend in-person class sessions for the duration of the semester. Remember that in-person classes are only available to students who are in good standing and in residence. If you are sent home due to breaching the Campus Community Agreement, you will be dropped from the class.

Health Guidelines

Students are expected to follow all College-mandated COVID-19 health guidelines and exercise good judgment with respect to attending in-person classes. If you believe that you are or may be becoming ill but are still well enough to join the class remotely, you should do so. If you are planning to attend an in-person class session remotely, please contact me as early as possible to ensure that I can best accommodate you.

Course Requirements

Course requirements include attendance and participation during class and lab sessions, completion of roughly 6 lab assignments, and 2 exams (midterm and final). Evaluation will be as follows:

Labs will be a mix of individual and group assignments. These assignments will demand a significant time commitment on your part, and it is critical that you start working early!

Temporary Credit/D/F Policy

As stated on the Computer Science website, no course taken to satisfy any requirement of the major or minor may normally be taken Credit/D/F. During this semester, however, exceptions to this policy may be permitted if approved by the course instructor prior to the regular Credit/D/F deadline (Monday, May 3). This exception will normally be permitted for at most one course, though in situations involving extreme circumstances, a student may petition to apply this exception to two courses.

Deadlines, Flex Days, and Checkpoints

To provide reasonable flexibility with deadlines, you are allotted five flex days for the semester, each of which may be used to submit an assignment up to 24 hours late without penalty. A maximum of three flex days may be applied to a single assignment. For group projects, applying a flex day uses a flex day from each group member's allotment (but can be applied as long as at least one group member has a flex day remaining).

Otherwise, assignments submitted after the posted deadline will be penalized 10% per day unless I have approved alternate arrangements in advance of the deadline.

Some assignments include checkpoints, which are intermediate deadlines at which time part of the assignment is due. Checkpoints are designed to help you work steadily and seek out assistance early if needed. If you will not meet a checkpoint, you should contact me in advance of the checkpoint to indicate (1) where you are in the assignment, (2) what difficulties you are experiencing, and (3) what your plan is to catch up. While not otherwise graded, missed checkpoints will result in a 5% penalty per checkpoint if I have not heard from you.


There is one primary textbook that you should acquire:

textbook2 textbook

R. Bryant and D. O'Hallaron. Computer Systems: A Programmer's Perspective, 3rd edition (2015). Available at Amazon or elsewhere.

Note: you must use the 3rd edition; earlier editions are substantially different and will not suffice.

In addition, you may wish (but are not required) to acquire a good reference on the C programming language. As an example, below is the gold standard of C programming books (concise but fairly dense):

B. Kernighan and D. Ritchie. The C Programming Language, 2nd edition (1988). Available at Amazon or elsewhere.

Discussion Forum

We will use Slack to facilitate communication and discussion outside of class. In general, you should prefer posting to Slack over sending me email, as it will allow your classmates to both see and respond to your questions, possibly quicker than I alone can. You can also send me a direct message (DM) on Slack such that only I can see your question.

Here is the CSCI 2330 Slack page (you will need to be invited first). More detailed instructions on getting set up in Slack will be part of the first lab assignment.

Guidelines on Group Work

Collaboration is important and valuable in computer science, and some assignments in this course will permit working in a group. This section describes expectations and requirements for completing group work in this course.

For all group work, a single copy of the assignment will be submitted. Group members are expected to fully collaborate on the work, and all group members are responsible for understanding all parts of the assignment. In other words, it is not acceptable to simply split the work between the group members and complete the parts independently.  For programming assignments completed in groups, most or all programming should be done with all group members working in front of a single (virtual) computer.  Group members should take turns ‘driving’ (writing code) and ‘directing’ (looking at the code and offering suggestions).

Note that this requirement means that you should choose your group members carefully and deliberately.  In particular, you should consider both your working styles and schedules; you cannot be an effective team if you cannot find suitable chunks of time to collaborate synchronously.

Forming a group: Each assignment that permits group work is given a "group deadline", which is the date by which groups must be determined (typically a few days after the assignment is released). To form a group, DM me on Slack with your group members. If you want to work in a group but don't have a partner in mind, let me know and I can try to match you. If I do not hear from you and you previously worked in a group, I will assume that you are working in the same group as before. You may also opt to dissolve a group and work solo, even if you worked in a group on a prior assignment. Group changes following the group deadline are not permitted without prior approval.

In the event that your group is not working smoothly for any reason and you do not believe it will be resolved, you should let me know as soon as possible. I can't address a problem that I don’t know exists!

Group reports: Each student working in a group is required to send me an individual group report at the conclusion of each group assignment. Your group report must (1) identify your partner(s), (2) summarize your own contributions to the assignment, and (3) summarize your partners' contributions to the assignment. The purpose of these reports is to provide mutual accountability within your group and to ensure that groups are functioning well. These reports do not need to be overly detailed and are often of the form "I worked with my partner on the entirety of the project together at the same time." Note that I reserve the right to adjust individual grades up or down from the group grade in cases of clear inequity, although this is not done routinely. Group reports should be DM'd to me on Slack and are due at the same time of the assignment itself. Your assignment will not be considered submitted until both the assignment and your group report is received!

Collaboration Policy and Honor Code

Please review the Computer Science Collaboration Policy. You are responsible for reading, understanding, and adhering to this policy.

Group work follows the standard guidelines described above, with the exception that collaboration between members within the group is unrestricted and does not need to be cited. Any collaborations outside of the group must follow the standard guidelines.


Feedback is welcome on all aspects of the course as we go, either by DM on Slack or by using the anonymous feedback form. Of course, the sooner that feedback is provided, the more likely it is that adjustments can be made in response.