Goals of the course

This course aims to give a deeper understanding of:

Programming

Systems software

How the two interact

We will mostly do this through practical examples, using the Unix
operating system, and C and C++ programming. The emphasis of the
course is on drawing lessons from practical solutions to concrete
problems. Our goal is to create simple, clear and general solutions
to real problems. The resulting software should be simple, correct
and maintainable.

Recommended Reading

The Practice of Programming Kernighan and Pike

Programming Pearls Jon Bentley

You don't need to buy any of these books.
If you are interested in also learning C++, it may be worthwhile to read Thinking in C++. This book is available free online.