CS 241 - Systems Programming

Course Information

Lectures: Hours: M/W/F, 11-11:50AM
Location: King 239
Instructor: Roberto Hoyle (rhoyle@oberlin.edu)
Office: King 229
Office Hours: Wednesday, 15:00-16:30pm
Thursday, 2:30-4:00pm
or by appointment
Phone: 775-8424
Discussions: We'll be using a Piazza board for discussion questions. Sign up at https://piazza.com/oberlin/spring2016/cs241/home. The Blackboard site will be used for grades, and possibly for quizzes. I will make sure all announcements are sent to email and Piazza, as well as to Blackboard.
Textbooks: We'll be using the canonical K&R C textbook for this class as well as a number of online reading supplements.
The C Programming Language

Required: The C Programming Language by Kernighan and Ritchie

You might also be interested in the following books as personal references:

  • C: A reference manual by Harbison and Steele [website]
  • Advanced Programming in the UNIX Environment by Stevens (and Rago) [Online Copy | website]
Prerequisites: CSCI 151 or consent of the instructor. You should be comfortable with programming with higher level languages, such as Python. No prior experience with Unix or C is expected.

Course Description

From the Oberlin catalog course description:

This course will consider the C programming language and its relationship to the Unix operating system. Students will be introduced to various Unix tools and shell scripting. Some Unix system programming issues will also be included. The course will require a significant amount of programming.

Course Goals

My goals and objectives for students taking this course are as follows:

  1. Understand the role of C in the field of computing
  2. Understand the interrelationship of C and Unix
  3. Become fluent in C programming including
  4. Develop the habit of thorough testing and become comfortable in using debugging tools including gdb, valgrind, etc.
  5. Learn and regularly use a version control system
  6. Become acquainted with the Unix tool philosophy and some common tools
  7. Be able to write a Unix tool
  8. Be able to compose Unix tools into shell scripts