Bryn Mawr College

CMSC 246: Systems Programming

Fall 2019

Prof. Geoffrey Towell

Texts  Important Dates  Assignments  Lectures Course Policies Links

General Information


Geoffrey Towell
204 Park Science Building
gtowell at brynmawr dot edu

Lecture Hours: MW 10:10AM - 11:30AM
Room: Park 336
Lab: Park 231 Mo 1:10PM - 2:30PM (Attendance in Lab is REQUIRED)
Office Hours: T 10:00-11:00AM, W 1:00-2:00PM, or by appointment


Computer Science Lab Room 231 (Science Building)

Lab Assistants: The TA for the course is Sara Golobish. She will be available in the CS labs (either Park 230 or Park 231) every Thesday and Thursday evening 7-9PM. Class assignments will typically be due either Thursday or Friday evening. Please be aware that there will be several other TAs in the lab at this time. Try to find Sara for 246 questions.

Texts & Software

Required Texts
  • C Programming: A Modern Approach by K. N. King (2nd edition). W. W. Norton & Company, 2008. Available at the campus bookstore.

  • The Linux Command Line: A Complete Introduction by William E. Shotts, Jr. No Starch Press, 2012. Available at the campus bookstore and for free download through both the Bryn Mawr and Haverford libraries.
  • In the Beginning was the Command Line by Neal Stevenson, 1999. Click here

Not for purchase...

  • Head First C by David Griffiths and Dawn Griffiths. O’Reilly Media, 2012. This is an alternative introduction to C that may be helpful to you. Readings will not be assigned from it, however.
  • The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie (2nd edition). Prentice Hall, 1988. The first edition of this book is what introduced C to the world. Do not purchase this book unless you'd like a souvenir in your collection of CS books.



Course Description: This is a course in systems programming using the C programming language in the Linux environment. C undergirds the world of modern computers and runs on anything. Learning C will also teach you how a computer really works under the hood and it will power your knowledge of programming and system building on any platform.

A secondary goal of this course is to give you a chance to learn some fundamental technologies in widespread use. As a computer scientist, you will be expected to know about Makefiles, version control, and command-line execution in the Linux environment.

By the end of this course, you will be able to…

During the course, you will…

Course Philosophy

In order to learn any programming skill, you must simply do it. Reading a book or watching me code will not help you get better. This course is thus programming-intensive. You will be expected to spend a significant amount of time weekly (6-8 hours) outside of class programming to complete the homework assignments. If you run into a snag, the programming burden may prove to be even higher. Of course, programming is fun, so the time should fly by.

Class time in CS246 will be spent primarily working with peers to solve small programming problems, conduct peer reviews, and complete other exercises. It is expected that you complete the reading before class and come with questions; I will try to avoid spending large chunks of class time repeating what the book says so well.

Important Dates


  1. Assignment #1 (Due on Friday, Sep 13): Click here for details.
  2. Assignment #2 (Due on Friday, Sep 20): Click here for details.


  1. Lab 1: Sept 9 Click here for details.