Resources
All kinds of resources useful for the course, from physical books to virtual websites. If you find something good out there, please tell us about it so we can add it here.
Books
First the required text for the course, a recently updated and very comprehensive classic. I'll make frequent reference to chapters in this one as we go along.
-
W. Richard Stevens,
Stephen A. Rago:
Advanced Programming in the UNIX Environment,
Second Edition, Addison-Wesley, 2005.
[Buy]
- W. Richard Stevens: Advanced Programming in the UNIX Environment, Addison-Wesley, 1992. [Buy]
Next two additional Unix books: The first is a direct competitor to the recommended text above, the second provides lots of interesting background on Unix and its philosophy.
- Marc J. Rochkind: Advanced UNIX Programming, Addison-Wesley, 2004. [Buy]
- Eric S. Raymond: The Art of UNIX Programming, Addison-Wesley, 2003. [Buy]
If you need to catch up on your C programming skills, just go with the classic introduction by the designers of the language. Okay, you won't find the latest C99 stuff in here, but it's still the gold standard of introductory C books.
- Brian W. Kernighan, Dennis M. Ritchie: The C Programming Language, 2nd edition, Prentice Hall, 1988. [Buy]
While C started out pretty simple, there's by now quite a lot of stuff to remember. And that's what reference manuals are for, here's the best one for C (include C99 and all that).
- Samuel P. Harbison III, Guy L. Steele, Jr.: C: A Reference Manual, 5th edition, Prentice Hall, 2002. [Buy]
Next some additional books on C. The first is a helpful "advanced" text, written in a particularly entertaining style; the interviewing tips are priceless as well. The second addresses software development strategies and provides (somewhat) higher-level abstractions for C. The third covers a variety of errors that C programmers tend to make again and again.
- Peter van der Linden: Expert C Programming: Deep C Secrets, Prentice Hall, 1994. [Buy]
- David R. Hanson: C Interfaces and Implementations: Techniques for Creating Reusable Software, Addison-Wesley, 1997. [Buy]
- Andrew Koenig: C Traps and Pitfalls, Addison-Wesley, 1989. [Buy]
Trying to write efficient code? Don't pass this classic by, it's a true gem (and quite entertaining as well):
- Jon Bentley: Programming Pearls, Addison-Wesley, 2000. [Buy]
Here are two somewhat more general books on programming, both well worth their money and the time it takes to work them through; in fact, I used to teach a course a while ago that used these as text books:
- Brian W. Kernighan, Rob Pike: The Practice of Programming, Addison-Wesley, 1999. [Buy] [Errata]
- Andrew Hunt, David Thomas: The Pragmatic Programmer, Addison-Wesley, 1999. [Buy] [Errata]
This list is hardly exhaustive. Feel free to email me suggestions if you find a good book on any of the topics we deal with in the course. :-)
Pocket Books
I like small books, and in that spirit I'd like to recommend a few really small books that can be very helpful in the course. Here they are:
Standards
- The Open Group: Single UNIX Specification (SUS), 2004.
- Dinkumware: Dinkum C99 Library Reference Manual, 2002.
Notes
Let's start with an excellent set of notes (and the course they come from) that supplement the C text by Kernighan and Ritchie chapter-by-chapter:
- Steve Summit: C Programming Notes, 1996.
- Steve Summit: C Programming, 1999.
This looks promising:
- Steve Oualline: C Elements of Style, 1992.
Two great sets of notes from Stanford University's Department of Computer Science:
Exams
Here are some old exams for practice. On average I like my questions quite a bit, so I tend to ask them again and again. But every now and then I add a new twist, so be prepared!
Miscellaneous
- Eric S. Raymond: How to Become a Hacker, 2006.
- The International Obfuscated C Code Contest
- Jim Gettys: The Two-Edged Sword, 1998.
- Andrew Koenig: C Traps and Pitfalls (PDF, short paper).
- Steven Pemberton: Enquire (tool)
- Steven Pemberton: Dhrystone (benchmark)
- Rob Pike: Notes on Programming in C, 1989.
- Henry Spencer: The Ten Commandments for C Programmers.
Tools
Previous Offerings
- Dwight Wilson: 600.211: Unix Systems Programming, Fall 2004
- Dwight Wilson: 600.211: Unix Systems Programming, Fall 1998
Related Courses
- Tanu Malik: 600.111: Practical C, Spring 2003
- Cristina Nita-Rotaru: 600.111: Practical C, Summer 2002