Bryn Mawr College
CMSC 246: Systems Programming
Spring 2018
Course Materials
Prof. Deepak Kumar

Texts  Important Dates  Assignments  Lectures Course Policies Links

General Information


Deepak Kumar
202 Park Science Building
dkumar at brynmawr dot edu

Lecture Hours: Mondays & Wednesdays 1:10p to 2:30p
Room: Room 336 Park Science Building
Lab: Mondays 2:40p to 4:00p in Room 231 (Attendance in Lab is REQUIRED)
(additional lab hours will also available, see below).
Office Hours: Tuesdays, 1:30-2:30p & Wednesdays, 10a to 11:00a, or by appointment.


Lab Assistants: The following Lab assistants will be available during the week (names and schedules will be posted by the end of this week) for assistance on lab assignments.

  1. Ju-Han Tarn Thursdaya from 6:00 to 8:00p in Room 231, PSB.

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.

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 souvenier 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

January 22: First lecture
February 21: Exam 1
April 2: Exam 2
May 2: Exam 3


  1. Assignment#1 (Due on Wed, January 31): Click here for details.
  2. Assignment#2 (Due on Wed, Feb 7): Click here for details.
  3. Assignment#3 (Due on Wednesday, Feb 14):Click here for details.
  4. Assignment#4 (Due in class on Monday, February 19):Click here for details.
  5. Assignment#5 (Due on Wednesday, March 7): Click here for details.
  6. Assignment#6 is posted (Due on Monday, March 26): Click here for details.
  7. Assignment#7 is posted (Due on Monday, April 2): Click here for details.
  8. Assignment#8 is posted (Due on Wednesday, April 18):Click here for details.
  9. Assignment#9 is posted (Due Monday, April23) Click here for details.
  10. Assignment#10 is posted (Due Monday, April30) Click here for details.


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: 20%
Exam 2: 20%
Exam 3: 20%
Lab Attendance: 10%
Assignments: 30%
Total: 100%

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! Yyou 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.


Created on January 3, 2018.