Warning! This site is under development.

Thinking in C and Unix


Samuel A. Rebelsky

Meeting Times
  • Th 2:30–3:50 p.m. CT
Office Hours
  • TuTh 8:30–10:00. Book office hours at https://bit.ly/book-samr. You may also propose other meeting times. Please check my Outlook schedule first.
Class Mentors
  • Ned Watson
Mentor Sessions
  • TBD

About this course

Welcome to ! The official course description for this class is:

The most successful software designers master a variety of languages, algorithms, and software design methodologies. In this course, you will examine the Unix approach to software design. You will ground that examination, in part, by developing programs that deepen your understanding of advanced techniques of the C programming language. Includes laboratory work.

In other words, we will help you think in C and Unix/GNU Linux.

Learning Goals

Our major objectives for this course include:

  • Improving your overall software design skills
  • Enhancing your understanding of the C model of programming
  • Making you a more facile *nix user

Important Notices

  • As is typical, I am over-booked this semester. I apologize.
  • I have also committed myself to a reasonable work life (40–50 hours per week). That means that I may get less work doen than you or I would like.
  • I wrote a series of essay for this course one of the previous times that I taught it. I’m probably revising them this semester and writing a few more. I apologize if they are less clear than professional writing.
  • Our course syllabus will change to adapt to the needs and interests of the class.

Accommodations and adjustments

Please read my policy on accommodations and adjustments and my statement on accessiblity.


This course is offered for one credit and is graded as S/D/F. College guidelines dictate that one-credit courses require about forty-five hours of total work. All students are expected to …

  • attend at least twelve of the fourteen class meetings;
  • do all of the assigned readings (about 30 minutes per class);
  • spend an appropriate amount of time on each homework assignment (about 60 minutes per class); and
  • participate actively in class.

Students who meet these criteria will earn a grade of S. Students who do not will likely earn a lower grade.

Textbooks and Other Readings

Chacon, Scott and Straub, Ben (2014). Pro Git, 2nd Edition. Apress. Also available online at https://git-scm.com/book/en/v2.

Mecklenburg, Robert (2004). Managing Projects with GNU Make, Third Edition. Sebastapol, CA: O’Reilly and Associates. Also available online at http://oreilly.com/catalog/make3/book/index.csp.

Raymond, Eric S. (2003). The Art of UNIX Programming. Addison-Wesley, Professional. Also available online at http://www.catb.org/esr/writings/taoup/html/.

Rebelsky, Samuel A. (2022). Don’t Embarrass Me; Don’t Embarrass Yourself: Thoughts on Thinking in C and *nix. An e-book (or something similar) in progress available at http://www.cs.grinnell.edu/~rebelsky/musings/index-cnix.

Additional Readings

Here are some other things you might find useful.

Gancarz, Mike. 1994. The Unix Philosophy. Digital Press.

Kernighan, Brian W. & Ritchie, Dennis, M. (1988). The C Programming Language, 2nd Edition: ANSI C. Upper Saddle River, NJ: Prentice-Hall.


Your classmates and partners depend on your contributions to learn new material and complete the required work for this course. Don’t let them down! You are expected to arrive on time and actively participate in every class.

If you are sick, please do not come to class. Stay in your room, rest, and seek medical care as needed. Student Health and Counciling Services (SHACS) offers health and mental health services to students.


Because much of our work in this course involves collaboration and discussion, you will be evaluated on your participation. Participating in class involves:

  • being present in class (physically and mentally)
  • coming to class on time
  • coming to class prepared
  • asking questions when appropriate
  • making positive contributions to class discussion by volunteering and when called upon
  • staying on task during lab exercises, and
  • working effectively with your partner(s)

In my experience, students come to this class with incredibly varied backgrounds.

Academic Honesty

Please read my policies on academic honesty and the CS department’s academic integrity policy. I expect you to follow these policies.