Advanced Programming in the UNIX Environment


In order to get the most our of this class, it is useful to read up on the topic of the lectures before class as well as to revisit the material after the lecture. Doing this will be part of the requirements of this class.

Note: this is not a request for you to submit whatever notes you are taking in class for yourself. Instead, the format will be as described here:

Prior to each class, please review the linked reading material and any other related documents you might find on your own. Note which exercises your completed. Make a note of any concepts or topics that are unclear to you, or for which you'd like to see clarification or further information.

After each class, please revisit your notes and assess your understanding. Did your questions get answered? Did new ones arise? What did you learn? Was there anything of particular interest that you came across? Share your questions or findings on the class mailing list!

File format and submission

Create a git repository for your class notes. In it, create a plain ascii text file for each lecture. Update this file twice: once before the class, and once after the class. Make sure to git commit.

The following is an illustration what your notes for the first class might look like:

Lecture 01

Before class:
I carefully read the course website and syllabus.
I read chapters 01 and 02 in Stevens.

I wrote a small hello-world program, debugged the
'welcome.c' program, and set up my VM with the
suitable compiler flags and aliases.

I came across this interesting article:

Open questions:
What's the difference between Linux and NetBSD? Aren't
both Unix?

Why are there different sections for the manual pages?
What does the "(1)" in "ls(1)" mean?

After class:
Important take-away:
- always use the right compiler flags ('-Wall -Wextra -Werror')
- despite being "unix-like", Linux and NetBSD are
  different OS with different philosophies and licenses
- I still need to grok the pipeline example from class

At the end of the semester, tar up the directory, including the .git files and submit the resulting file via email to

The due dates for the course notes to be submitted is 2020-12-14 18:00.

The folllowing is an example sequence of commands to create a valid submission:

mkdir $USER-notes
cd $USER-notes
git init
vi 01.txt
git add 01.txt
git commit .
vi 02.txt
git add 02.txt
git commit .
cd ..
tar cf $USER-notes.tar $USER-notes

[Course Website]