CS 241 - Systems Programming

Course Information

Lectures: Hours: M/W/F, 13:30 — 14:20AM
Location: King 241
Instructor: Roberto Hoyle (rhoyle@oberlin.edu)
Office: King 223C
Office Hours: Wednesday 14:30 — 16:00
Thursday, 14:30 — 16:00
or by appointment
Phone: 775-8424
Discussions: We'll be using a Piazza board for discussion questions. Sign up at https://piazza.com/oberlin/fall2017/csci241. 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: While all the textbooks are marked as "Recommended" and not "Required", mandatory reading assignments will be given throughout the semester. Links to electronic resources are provided, but it is your responsibility to make sure you have access to the required materials.

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