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
While there are lots of useful books for this course, the two most important books are the following required texts on C and C++:
- Brian W. Kernighan, Dennis M. Ritchie: The C Programming Language, 2nd edition, Prentice Hall, 1988. [Buy]
- Andrew Koenig, Barbara E. Moo: Accelerated C++, Addison-Wesley, 2000. [Buy]
While the first of these is an obvious classic, I debated quite a bit about the second. In the end, I decided to err on the side of concision: Shorter books are less expensive and less of a drag to read, especially if you have to read two books in a semester. :-) In Fall 2006 I used a much longer book:
- Harvey Deitel, Paul Deitel: C++ How to Program, 5th edition, Prentice Hall, 2006. [Buy]
It was, overall, a good C++ text, but I doubt that too many students read it simply because it's so huge. And funky colors are not exactly the hallmark of good writing either, but that's just a personal judgement. Speaking of personal, I learned C++ from the following, and it's still the definite source these days:
- Bjarne Stroustrup: The C++ Programming Language, 3rd edition, Prentice Hall, 1997. [Buy] [Buy Special Edition]
If you're not willing to shell out huge amounts of money for a C++ book, you could always try this one for free (at your own risk, but I hear it's quite decent):
- Bruce Eckel: Thinking in C++, 2nd edition, Prentice Hall, 2000. [Buy Volume 1] [Buy Volume 2]
If you really want to become proficient in C++, there's no way around these three books either (but I wouldn't recommend reading them until you know what you're doing):
- Scott Meyers: Effective C++, 3rd edition, Addison-Wesley, 2005. [Buy]
- Scott Meyers: More Effective C++, Addison-Wesley, 1995. [Buy]
- Scott Meyers: Effective STL, Addison-Wesley, 2001. [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:
- Samuel P. Harbison III, Guy L. Steele, Jr.: C: A Reference Manual, 5th edition, Prentice Hall, 2002. [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:
- C Pocket Reference
- C++ Pocket Reference
- STL Pocket Reference
- GDB Pocket Reference
- UML Pocket Reference
If you think that you won't need text books that hold you by the hand while you learn, you could of course try to just buy pocket references and nothing else. I don't recommend that unless you already have a lot of programming experience. If you decide to "skip" the officially required texts, you do so at your own risk!
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:
Apparently helpful sites with library (and some language) documentation:
- Dinkumware Manuals
- C/C++ Reference
- Another C/C++ Reference
- UCSD Standard C Documentation
- Wikipedia's C Library Documentation
- Wikipedia's C++ Library Documentation
Here are the manuals for the GNU implementation of the standard C and C++ libraries that you're actually using. However, you should not use any features that are GNU-only, so basically you should never even look at these:
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!