CSCI 2330
Foundations of Computer Systems

Bowdoin College
Spring 2026
Instructor: Sean Barker

Course Overview

This course will provide a broad, programmer-oriented introduction to how modern computer systems store information and execute computer programs. 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. Core topics include data representation, memory management, machine code, caching, and processes.

Primary course goals include:

Prerequisites

CSCI 2102 (Data Structures and Advanced Programming II). Prior knowledge of C is not required or expected.

People

Instructor: Sean Barker
Office: Searles 220
Email:

Learning Assistants (LAs):
Caroline Berney
Jack Luehrman

The regular schedule of instructor office hours and evening lab hours (with the LAs) will be posted to the #schedule channel in the Slack.

Class Information

Mondays, Wednesdays, and Fridays, 10:05 am-11:30 am.

Classroom is TBD.

Health Guidelines

Students are expected to exercise good judgment with respect to attending in-person classes, office hours, and LA sessions. If you have active symptoms of contagious illness, you should take reasonable precautions and, if appropriate, temporarily pause in-person attendance and let me know so that I can properly support you.

Textbook

While no textbooks are required, the following textbook will closely follow much of the class, and is recommended if you would like to have a textbook reference:

textbook2 textbook

R. Bryant and D. O'Hallaron. Computer Systems: A Programmer's Perspective, 3rd edition (2015). Available at Amazon (hardcover or paperback) and elsewhere. You should only use the 3rd edition; earlier editions are substantially different.

In addition, you may wish to acquire a 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.

Course Requirements

Course requirements include completion of roughly 6 lab assignments, 3 exams (two midterms and a final, each covering roughly a third of the semester), and attendance and participation during all classes and lab sessions. Evaluation will be as follows:

Labs will involve a mix of programming and problem solving, broadly defined. Mastering the material covered in class will require rigorously and thoughtfully engaging with the labs, and you should expect to commit a significant amount of time to completing them.

Keep in mind that labs serve primarily to develop your understanding of the material rather than to evaluate it. In contrast, exams serve primarily to demonstrate your understanding. Lab scores in this class are typically only weakly correlated with exam scores. This observation should not discount the importance of the labs, but rather emphasize the importance of how you engage with the labs. You should approach the labs with the objective of rigorously engaging with the conceptual material, rather than simply completing the labs as expediently as possible and getting a good score (since such an approach may lead to a lack of real understanding and, as a result, the likelihood of low exam scores). If you feel like you are struggling to understand the lab material (even if you are still completing them and getting good lab scores), you should come to talk to me early so that we can make a plan to assist you!

Assignment Logistics and Deadlines

Each assignment has several important dates: a release date, an acceptance deadline, possibly one or more checkpoints, and a final due date. Further details are given below.

The assignment writeup is posted on the release date. Following this date, the acceptance deadline is the date by which you must "accept" the assignment on GitHub, which will initialize your repository and allow me to add any student-specific files. Accepting the assignment only takes a minute or two, and the acceptance deadline is normally a few days after the release date. Failure to accept the assignment by the acceptance deadline may result in your inability to work on the assignment for a significant length of time. Avoid introducing unnecessary time crunches by accepting each assignment prior to the deadline!

For some assignments, checkpoints 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. Checkpoints are ungraded, but failure to meet a checkpoint is a warning that you are not currently on track to comfortably complete the assignment. If you will not or do not meet a checkpoint, you should contact me to indicate (1) where you are in the assignment, (2) what difficulties you are experiencing, and (3) what your plan is to catch up. Extra flexibility with deadlines will not be offered if you have missed checkpoints without contacting me.

To provide reasonable no-questions-asked flexibility with final due dates, 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. Flex days do not need to be applied towards checkpoints, but you should let me know regardless if you will not meet a checkpoint. Beyond the use of your flex days, work will not be accepted after the due date unless alternate arrangements have been approved in advance of the deadline.

Electronic Communication

We will use Slack to facilitate communication and discussion outside of class. Slack supports both traditional 1-to-1 communication (Direct Messages / DMs) and forum-style discussions with multiple participants. You should prefer messaging me over Slack instead of sending email, as it is will be easier to keep track of class-related communication and will result in faster responses. You will get set up on Slack as part of the first class assignment.

You will normally receive a response to Slack messages within one business day. While you may get a response outside of regular working hours (evenings, weekends, etc.), you should not expect as such. If you have not received a response within two business days, please feel free to send a followup reminder. Your randomly generated Slack string is cadari (save this).

Collaboration Policy and Honor Code

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

Guidelines on Generative AI

Any use of generative AI (e.g., systems like ChatGPT) should follow the same basic guidelines as for any other external resources, as detailed in the collaboration policy above. For example, any use of ChatGPT should be cited, and you should not blindly ask ChatGPT for solutions (in the same way that you should not Google for solutions). As a rule of thumb, feel free to ask AI for help understanding concepts (while being aware of the possibility of AI hallucinations) but be very cautious of asking for any direct help with specific coursework. You should never use AI to write your code for you. Even aside from concerns regarding the Honor Code, improper use of AI is likely to compromise your learning and lead to poor performance on exams.

If you have any questions regarding the use of generative AI, please ask!

Feedback

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