Lectures: T/Th, 11:00AM – 12:15PM, King 241
Instructor: Roberto Hoyle (roberto.hoyle@oberlin.edu)
Office: King 223C
Office Hours: Tu 15:00 – 17:00, Weds 10:00 – 12:00 or by appointment
Phone: x58424

Discussions

Discussions will be held using Piazza. The enrollment link is on 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:

I have copies of these in my office and am happy to loan them out for a few hours.

Mask Policy

The Oberlin Computer Science Department is dedicated to making Computer Science accessible to all students. Because of this, we will be requiring that all students wear masks in our classrooms and lab spaces this semester. By masking, you are not only demonstrating respect and kindness for your classmates, but also making sure that medically at-risk students have a learning experience where they can feel comfortable and safe. Masking will be required for classes, lab periods, drop-in lab helping, and anytime you are using the CS labs or offices. If you have forgotten to bring a mask with you, an instructor can provide you with one.

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
    • Compound data types such as structs and unions
    • Dynamically allocated structures (including cleanup)
    • Binary and bit-wise manipulations
    • Making system call requests of the OS
  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
  9. Explain information presented in mathematical forms and/or within a formal reasoning system.
  10. Translate information into a formal system or mathematical model; translate real world phenomena into formal/mathematical symbols.
  11. Use formal reasoning/mathematical methods, tools, technology, and calculation to solve problems.