This page collects documentation of several tools we use in CS 251. [Reorganized 1 October 2015]

The goal of CS 251 is to learn enduring concepts underlying programming languages, not specific contemporary languages and tools. However, you will learn a few new programming languages and pick up several useful operational skills along the way, since we use real languages to illustrate the concepts we learn and real tools to manage our work. These same languages (and their relatives) and tools are used by many programmers to build major (and minor) pieces of software. Incidentally, all software we use is also free software or open-source software.

CS 251 Computing Environments

We recommend using a CS 251-approved computing environment.

We provide and support two computing environments for CS 251 with all the tools you need for the course. It is usually feasible to install the tools in your environment of choice, but we are unable to offer support or guarantees if you choose to work on environments other than ours.

We provide all CS 251 software tools on two fully-supported computing environments running versions of the GNU/Linux operating system:

  • CS Linux machines are available in the SCI microfocus lab and SCI 173.
  • The wx appliance is a self-contained CS 251 GNU/Linux computing environment for your Mac or Windows computer.1
    • No CS account is required.

Key Software Tools

We use a few key software tools for CS 251. Most of these tools are likely new to you and some will require practice. This page page contains documentation (some tailored specifically to learning these tools for use in this course).


The CS 251-specific resource for using the Mercurial version control system also contains links to other Mercurial resources.

GNU/Linux and the Terminal

Resources for using GNU/Linux (available on CS Linux machines or in the wx appliance on your personal computer), especially via the command-line terminal and the Bash shell.


Resources for using the Emacs text editor.

  1. The wx appliance can also be installed on Linux, but if you run Linux already, it is likley you will have good luck installing tools directly, with less overhead.