Some friends recently started a sort of book club, by taking the UofW Programming Languages Course on Coursera together.

Course Structure

The course focuses on learning about programming languages through the lense of 3 very different languages:

  • ML
  • Racket
  • Ruby

The goal of the course is to learn about programming languages in general, but these 3 specific languages are used to get a broad view of different language types.

One of the first things to do in the course is to install Standard ML. Anytime I see installation instructions that take multiple pages, I get nervous that I’ll end up with some weird problem that will eat up time and reduce my motivation to learn the material.

So I decided to try out VSCode Remote Containers which lets you work on code that is running inside of a container.

How To

Instead of following 2 pages of instructions, just make a new directory and open that directory in VSCode. Now do the following:

  • Install the “Remote - Containers” extension in VSCode
  • Create a .devcontainer directory
  • Create a devcontainer.json file in that directory with the following content:
  "image": "ynishi/docker-sml:latest",
  "forwardPorts": [],
  "customizations": {
    // Configure properties specific to VS Code.
    "vscode": {
      // Add the IDs of extensions you want installed when the container is created.
      "extensions": []
  • Now click the Remote Explorer button in the left-side of VSCode
  • Click the “+” button next to “Containers”
  • Click “Open current folder in Container”

You’ll see a little modal showing the progress as it pulls down the image, and installs some extra code inside of the container. Then VSCode will refresh and you now have a terminal inside the container.

Open your terminal and type sml, you’ll get the standard ML prompt and any code you start writing in VSCode will be in the current working directory of your terminal running inside the container.