CSCI 2330
Introduction to Systems

Bowdoin College
Spring 2016
Instructor: Sean Barker

Course Description

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 components 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, basic microarchitecture, the memory hierarchy, processes, and system-level I/O.

Along the way, we will 'get our hands dirty' working with the low-level components that provide the foundation for modern programs. By the end of the course, you will have a better understanding of many of these details, which will enable you to be a more effective programmer, debugger, and optimizer. Additionally, you will be well-positioned to take other systems courses in the future!

Prerequisites: CSCI 2101 (Data Structures). You are assumed to have some previous exposure to C and/or C++. Students who have previously completed CSCI 2300 (Computer Organization) should consult with the instructor before enrolling.


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

TAs: (drop-in lab hours in Searles 224)
Phil Koch (pkoch): Sunday 7-9 PM, Wednesday 7-9 PM
Chris Lu (clu): Monday 6-8 PM, Thursday 7-9 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 and will be primarily in C. 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 CS 2330 Piazza page.


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.

B. Kernighan and D. Ritchie. The C Programming Language, 2nd edition (1988). Available at Amazon or elsewhere. This book is optional but an excellent (and inexpensive) C reference.

Class Information

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


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, 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.