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. You can find a copy of the pdf online. You can also order it from Amazon or Barnes & Noble, if desired. 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 necessary.

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 Thayer servers are the definitive reference.



Here are some good links to bash scripting information.


Editor software is a very personal choice. I primarily use vs code or sublime as a 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 rendered with Jekyll.) Many source-code web portals (like 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

Regular expressions

Many Unix tools (such as sed and grep) allow you to use a regular expression to describe a pattern for text matching. The syntax for regular expressions seems arcane, at first, but is very powerful. We found some slides that introduce the concepts.


  • 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.
  • 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 Thayer 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 (or any) of these books.