Here are useful materials and references about the tools and topics covered in CS107. If you are a prospective student, check out the course FAQ page. If you are a current student, check out the course logistics and policies in Handout 1 - General Information.
Here are some references for the C programming language:
- Nick Parlante's Essential C
- The CS107 guide to the C standard library functions
- Kernighan and Ritchie's classic text The C Programming Language (requires authentication, accesses Stanford's subscription to Safari Books Online in the left sidebar)
Stanford Libraries also includes some excellent online book collections, such as Safari Books Online (includes Nutshell books on Linux, programming tools, languages) and Books 24x7 ITPro (includes "for Dummies" series, Sams, Osbourne/McGraw-Hill, MIT Press, Peachpit Press, and Sybex). Search Stanford's online book collection
In CS107, we will be working remotely on the
myth machines in the Gates building with the following tools to write, compile, and debug our programs.
Here is a guide for how to remotely log in to the Myth computers: click here
Once you are remotely logged in, you can use the various tools we have installed to work on your programs. Here is some more information about each of these tools. There are walkthrough videos for many of the tools listed below - visit each page for a link. You can also view all the walkthrough videos here.
- Emacs or Vim (text editor; see Choosing a Text Editor)
- Make (compiles your program for you using a set of commands)
- GCC (how to manually compile C programs)
- GDB and Debugging (how to debug your programs)
- Valgrind Memcheck (finds memory leaks and memory errors)
- Valgrind Callgrind (CPU/cache profiling)
- Extra: Git (manage versions of your work)
- Tip: some students have found it helpful to use web annotation/highlighter tools (e.g. roohit, Marker.to, getliner...) to mark key passages of the assignment writeups when working.
- Click here for software testing strategies for the assignments.
- Click here for a guide to good style on CS107 programs.
Common Unix Commands
There are walkthrough videos for many of the commands listed below - visit each page for a link. You can also view all the walkthrough videos here.
Navigating the File System
- The working directory and
- What is the difference between an absolute and a relative path?
cat(print a file to the screen)
ls(list a folder's contents)
popd(easily move back and forth between folders)
- Extra: Symbolic Links (create a link to a file in a different directory)
man(view manual pages)
mv(copy and move files and folders)
mkdir(create new folders)
rmdir(delete files and folders)
grep(search files for text)
find(search for files)
diff(view differences between two text files
wc(count the chars/words/lines in a file)
- View and re-execute your previous unix commands
- Speed up typing unix commands with tab-completion
- Chain commands, and save output to a file, with
tar(archive and unarchive)
Assembly language is one of the topics covered during the quarter. Here are some assembly references:
- The CS107 guide to x86-64 basics
- The CS107 x86-64 reference sheet that lists commonly used instructions and addressing modes.
- There are a lot of additional books/web sites on x86-64 but one quirky thing to note is there are two distinct assembler syntaxes in use so best to stick with resources that use the same syntax we did (that would be GNU/att, not Intel).