In this unit, you will configure a development environment which you will use to learn the basics of the Linux command line, version control with Git, and containerization using Docker.

After reviewing, you'll apply this information to complete and submit your first programming assignment which serves as a practical introduction to jupyter notebooks.


  • create a working UNIX/Linux-based development environment
  • demonstrate competancy with the basics of the Linux command line (navigation, creating directories, etc.)
  • demonstrate competency with Docker containers as a means of managing dependencies
  • demonstrate how to use Git with GitHub to download (clone), complete (commit), and submit (push) programming assignments



Complete these tutorials in the order listed.

Configuring your development environment

The examples and assignments used in this course are all designed to run on a UNIX-like operating system (ex. Linux, Darwin/MacOS). One free(!) option is to use a Linux-based operating system. In order to ensure you can follow along, you'll need to set up a compatible development environment. We'll look at one way of doing so using a virtual machine.

Important note

A note to ARM64 users

If you're using a machine with an ARM64 CPU (ex. a Mac M1), you won't be able to run VirtualBox. If you're on a Mac, you can install Docker Desktop directly and execute the provided commands in the terminal. If you're unsure if your Mac has an ARM64 CPU, see this article from Apple. Note the CLI commands used throughout the course tutorials will not work as-is in Windows PowerShell. Windows users should install Ubuntu (either via VirtualBox or natively on a separate partition).

Linux command line basics

Nearly all of the tools we'll use in this course must be run from the command line. While intitially intimidating for some, knowing your way around a terminal will save you a great deal of time in the long run.

Version control

Version control is an essential tool for software developers. It makes it easy to safely develop and test features, track progress, and revert to a working state if breaking changes are inadvertently introduced to some code base. You'll be developing and submitting all programming assignments in this course using Git and GitHub.

Containerization and Docker

Containerization is a reliable way to manage dependencies as well as create and share uniform development environments. All of your programming assignments in this course will leverage docker for developing and testing your solutions. After you make it over this initial hurdle, you shouldn't have any trouble running future assignments.

Unfamiliar with Python?

This course assumes you have some experience programming. We'll be using Python 3 for all programming assignments. If you're unfamiliar with Python 3, you may want to review the following resources:

XKCD 3531


Before you begin your first programming assignment, ensure you've...

cd ~/Creative Commons License