General information

Instructor: Richard Eisenberg
Office Phone: 610-526-5061
Home Phone (emergencies only): 484-344-5924
Cell Phone (emergencies only): 201-575-6474 (no texts, please)
Office: Park 204
Office Hours: Mondays 1:15-2:30, Tuesdays 2:30-3:30.
If these don’t work, do not fret. Email instead.
Lecture: TR 12:55pm-2:15pm
Lecture Room: Park 336
Lecture Recordings: at Tegrity (Non-BMC students can login through our Moodle page.)
Lab: R 2:25pm-3:45pm
Lab Room: Park 231
TA: Rachel Xu: MW 8:00-10:00pm in Park 231
GitHub Repo:
Mailing List:

Goals of course

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

During the course, you will…

This is a course in systems programming using the C programming language. 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. The labs for this course thus center on this often-untaught topics.

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.


Reading assignments will include significant chunks of both of the following books:

The following book is an alternative introduction to C that may be helpful to you. Readings will not be assigned from it, however:

These books are useful references and will enjoy a long shelf-life in your computer science book collection: