CSCI 2330
Introduction to Systems

Bowdoin College
Spring 2017
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). Note that unlike in the previous offering of this course, you are not assumed to have any previous exposure to C (or C++).


Instructor: Sean Barker
Office: Searles 220
Phone: 207-798-4220
Office Hours: Tuesday/Wednesday/Thursday 12:30-2, or by appointment.

TAs: (drop-in lab hours in Searles 224)
Dylan Parsons (dparsons): Sunday 6-8 PM
Bolor Jagdagdorj (bjagdagd): Monday 6-8 PM
Bo Bleckel (lbleckel): Tuesday 7-9 PM
James Little (jlittle): Wednesday 6:30-8:30 PM

Course Requirements

Attendance and participation in class (including in-class exercises), completion of programming projects, and two exams (one midterm and a final). Evaluation will be as follows:

Projects 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!

You will have 4 flex days to submit projects late without penalty during the semester, which may be allocated however you wish. Beyond the use of your flex days, late assignments will be penalized a letter grade per day.

Discussion Forum

We will use Piazza to facilitate discussion outside of class. In general, you should prefer posting to Piazza over sending me email, as it will allow your classmates to both see and answer your questions (though you can also post privately such that only I can see your question).

Here is the CSCI 2330 Piazza page.


There is one primary textbook that you should definitely 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 to acquire a good reference on the C programming language (particularly if you have no prior C experience). We recommend the 'bible' of C programming books (which is also quite inexpensive):

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

Class Information

Tuesdays and Thursdays
10:00 AM - 11:25 AM
Searles 223

Note that we will sometimes meet in Searles 128 (instead of 223) on Thursdays - this will be announced in advance of class.


Electronic Device Policy

Use of laptops in-class is permitted for note-taking or other class-related purposes. Cell phones should be silenced and put away during class to avoid disruptions.

No electronic devices, including computers, phones, or calculators, are permitted during exams unless specifically indicated by the instructor.

Collaboration Policy and Honor Code

You are expected to follow Bowdoin's Computer Use Policy and its Academic Honor Code. No collaboration whatsoever is permitted on exams. For other assignments, you are encouraged to discuss ideas and techniques broadly with other class members, but not specifics of assigned problems (except as part of group projects). Discussions should be limited to questions that can be asked and answered without using any written medium (e.g. pencil and paper or email). In other words, at no time should a student read any code written by another student unless they are part of the same group. Sharing of code or intermediate designs is expressly prohibited. Remember that providing help beyond what is allowed is as much of an infraction as receiving help. This includes sharing your work with future students after you have completed the course yourself. Automated plagiarism detection software may be used in this course, and violations are much easier to detect than students often think.

Use of the internet (e.g., Google) for reference purposes is allowed on projects, such as looking up the use of a particular library function. However, looking for solutions online, or blindly copying sections of code found online, is not allowed, and you should never submit code that you do not understand or would not be able to clearly explain. It is permissible to use software and materials available from other sources (understanding that you get no credit for using the work of others on those parts of your projects) as long as: 1) You acknowledge explicitly which aspects of your assignment were taken from other sources and what those sources are; 2) The materials are freely and legally available; and 3) The material was not created by a student at Bowdoin as part of this course this year or in prior years. To be absolutely clear, if you turn in someone else's work, you will not receive any credit for it, but if it is properly acknowledged, at least it will not at be considered a breach of this policy.

In the interest of fairness to all students, violations of this policy are grounds to initiate an action that would come before the Judicial Board. If you have any questions about this policy, please do not hesitate to ask for clarification.

Note for version control system users (e.g., git): While you are welcome to use version control systems such as Git or Subversion to collaborate within your team (or to store your own code), you may not store or post any code in publicly-available repositories (such as public repositories on GitHub). If you would like to use a service like GitHub, you must use a private repository.