Textbooks and Resources

There is no required textbook for this course. However, we do highly recommend C: A Reference Manual by Harbison and Steele. I have found it to be invaluable and always near my desk. I asked Baker Library to obtain a copy and place it on reserve. There may be copies available in local bookstores, or you can order it from Amazon or Barnes & Noble. Look for the most recent (fifth) edition.

When we need a more traditional C text, we refer to The C Book, second edition, by Mike Banahan, Declan Brady and Mark Doran, originally published by Addison Wesley in 1991. This book is available online here.

The UNIX operating system and the C programming language have both been around for quite some time. UNIX was originally developed in the late 1960’s in assembly language and was mostly reimplemented in the new C programming language by the early 1970’s. The first book on C, Kernighan and Ritchie’s C Programming Language, is still in print, and is owned by most UNIX geeks – not because it’s such a great reference, but, well, just because. There are a large number of number of books on UNIX and all of its variants, including Linux (see below).

UNIX systems contain lots of documentation in the form of what are called man pages, which is short for “manual pages”. Thus, a hardcopy book on UNIX may not be really necessary – I didn’t own a UNIX book until many years after I began using UNIX.

Documentation for many of the tools we will be using will either be found in man pages or will be supplied as URL’s on this page. Of course, you’re welcome to employ your favorite search engine, but beware that there are subtle variations in UNIX tools across its many flavors and distributions. For CS50, the man pages on CS department servers are the definitive reference.

Other resources, papers, and references will appear on in this page as they are identified. If you find others that you like, please let me know and we’ll share them with everyone.



Here are some good links to bash scripting information.


Editor software is a very personal choice. I have primarily been using sublime text editor for longer sessions and vi for quick fixes, while others prefer emacs. They are all excellent tools. For quick fixes and slow ssh connections the vi editor is a workable alternative.


A file with extension .md is assumed to be a text file in ‘Markdown’ syntax, which provides very simple (and readable) markup for headings, lists, italics, bold, hyperlinks, code snippets, and embedded images. (This course website is written in Markdown and render with Jekyll.) Many source-code web portals (like our Gitlab and the popular Github) allow you to browse the files in your repository - automatically rendering any that are in Markdown format, making such files much nicer to look at than plain-text files. You can edit Markdown files in any text editor, but there are some specialized editors available. Markdown is easy to learn and there are many useful resources online:


Great references for the git distributed version control system that we use


Software tools we may be using

  • valgrind: a family of tools for dynamic analysis of programs.
  • quick guide to valgrind

  • GNU make is a utility for determining what needs to be done (e.g., compile, link, copy, etc.) to build a program or other target, and then issues the commands to do it.

  • pandoc: A universal document converter.

  • gtk: A popular toolkit for creating graphical user interfaces. Follow the X11 instructions below to learn how to compile and use gtk.

  • X11 and XQuartz: to run window-based (or graphical) applications on the CS50 Unix servers, but allow them to pop open windows on your Mac, you’ll need to install XQuartz. Installation is simple; this link has instructions for installing and using XQuartz, and for compiling gtk applications.

Unix books

Unix & Linux books / links


Remember that we’re not suggesting you buy all these books. The text by Harbison and Steele is highly recommended for this course and may be in local bookstores.