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 Assistant: The TA for the course is Sara Golobish. She will be available in the CS labs (either Park 230 or Park 231) every Thusday and Thursday evening 7-9PM (except as noted below). Class assignments will typically be due either 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.

On the following dates, the hours of the lab assistant will be other than the norm:

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


Course Policies


Attendance and active participation are expected in every class. Participation includes asking questions, contributing answers, proposing ideas, and providing constructive comments.

As you will discover, I am a proponent of two-way communication and I welcome feedback during the semester about the course. I am available to answer questions, listen to concerns, and talk about any course-related topic (or otherwise!). Come to office hours! This helps me get to know you. You are welcome to stop by and chat. There are many more exciting topics to talk about that I won't have time to cover in-class.

Please stay in touch with me, particularly if you feel stuck on a topic or assignment and can't figure out how to proceed. Often a quick e-mail, phone call or face-to-face conference can reveal solutions to problems and generate renewed creative and scholarly energy. It is essential that you begin assignments early.


There will be 6-8 assignments, weighted equally in the final grading (see below).  Assignments must be submitted according to the instructions provided in each assignment.

At the end of the semester, final grades will be calculated as a weighted average of all grades according to the following weights:

Exam 1: 16%
Exam 2: 16%
Exam 3: 18%
Lab Attendance: 10%
Assignments: 40%
Total: 100%

Midterms will be in class. Closed book, closed notes, no electronic devices.
The final will be self-scheduled during exam week. It is intended to be more of a third mid-term than a true final.

Incomplete grades will be given only for verifiable medical illness or other such dire circumstances.

Technology in the classroom

The class meetings/lectures will be a place to learn the concepts that are a part of the syllabus. I will, in the course of a lecture, write code on the board, and/or even do some live coding in class. The objective of this is to illustrate to you how to go about applying the concepts in practice. It is NOT a place for you to open your laptops and start to code with me. In fact, you are encouraged NOT to bring your laptops to class to use them for any purpose. It is distracting to other students. Phone (smart or otherwise) and tablet use during class meetings is also strongly discouraged. Listen, understand, ask questions, and take notes in a notebook if you need to. You will learn more! You will be doing coding in the labs under my supervision.

The assignments in this course are a place for you to exercise your learning of the concepts and apply them in actual working programs. The best way to get the most of of this course is to try out and code the concepts learned in the class (outside the class!). Do not be afraid to try things! This will improve your understanding and raise questions that you should feel free to bring forward in class. A quick word of advice: stay abreast of the material covered in class, and start your assignments on the day they are announced.

ALL work submitted for grading should be entirely YOUR OWN. Sharing of programs, code snippets, etc. is not permitted under ANY circumstances.

Submission, Late Policy, and Making Up Past Work

All work must be turned in either in hard-copy or electronic submission, depending on the instructions given in the assignment.  E-mail submissions, when permitted, should request a "delivery receipt" to document time and date of submission.  Extensions will be given only in the case of verifiable medical excuses or other such dire circumstances, if requested in advance and supported by your Academic Dean.

No assignment will be accepted after it is past due.

No past work can be "made up" after it is due.

No regrade requests will be entertained one week after the graded work is returned in class.


There will be three exams in this course.  The exams will be closed-book and closed-notes.  The exams will cover material from lectures, homeworks, and assigned readings.

Study Groups

I encourage you to discuss the material and work together to understand it. Here are some thoughts on collaborating with other students:

If you have any questions as to what types of collaborations are allowed, please feel free to ask.


Learning Accommodations

Students requesting accommodations in this course because of the impact of disability are encouraged to meet with me privately early in the semester with a verification letter. Students not yet approved to receive accommodations should also contact Deb Alder, Coordinator of Accessibility Services, at 610-526-7351 in Guild Hall, as soon as possible, to verify their eligibility for reasonable accommodations. Early contact will help avoid unnecessary inconvenience and delays.

This class may be recorded.

Created on August 1, 2019.