About me

Blog Posts Blog Tags Blog Feed

2023 2022 2021 2020 2019 2018 2017

Log in

Copyright © 2022
Jeffrey Elkner

Remixing OER Textbooks for Computer Science

OER Poster

I've begun remixing two OER textbooks for use in my computer science classes:

I'm hosting both books on the Open Book Project website.

Arlington Tech, located where I work, is developing an Associate in Science degree in computer science concurrent with our high school diploma. My goal over the next few years will be to develop OER resources for each of the CS courses in this degree program.

The CS Principles: Big Ideas in Programming text is wonderful. I've been struggling for years to find the best way to introduce new computer science students to Python that balances data types and control structures so that students early on can develop a solid understanding of both of these without getting lost in the details of either of them. I've long felt that successfully being able to do this would offer the best path to making computer programming engaging to the broadest possible student audience, but I kept coming up short in my own efforts to develop curriclum to do it.

CS Principles uses an example driven, learn programming by looking at programs approach that spirals through the teaching of control structures using a brilliant choice of four data types:

  1. Numbers
  2. Strings
  3. Turtles
  4. Images

I'll have more to say about the text itself in future posts. Here I just want to describe the initial motivation for remixing the text and the setup of the build process.

Why Am I Remixing CS Principles?

The original version of the text is on Runestone Academy with the git repository at While I loved the book as soon as I saw it, there were several reasons I wanted to remix it:

  • Having my own remix gives me the ability to respond in real time to student feedback on the text and to involve students in the process of reviewing and editing it.
  • The original Runestone Interactive hosting site is designed for teachers to create student accounts in its own integrated learning management system (LMS). The school system in which I work has its own LMS which we are required to use, so using the Runestone Interactive LMS was not an option for me. I found the links to the LMS throughout the text distracting for students without accounts needed to use it, and I wanted to remove those links.
  • In order to make the interactive textbook require nothing but a web browser to use it -- essential if the text is going to be usable in the often very restrictive IT environments in schools -- it uses a JavaScript implementation of Python called Skulpt. Skulpt implements a version of Python 2, and I wanted all code in the text to run unchanged in Python 3, so that I can have my students do extension projects outside the browser. I needed to be able to edit the examples in the text to meet this goal.
  • The image examples in the text used a Skulpt Python wrapper for JavaScript image manipulation tools, completely violating my desire to have the examples run unchanged on in a desktop Python 3 environment. I wanted to be able to rewrite all the image manipulation examples using the syntax of the Python Imaging Library (PIL). I will be able to do this with the help of Marco Sirabella, who kindly hacked on Skulpt to support PIL like syntax for images that I will be able to use to change the image examples in the book.

Installation and Setup

To install the textbook on my KVM development server I did the following:

$ git clone
$ cd StudentCSP
$ pip3 install -r requirements.txt
$ runestone build


These instructions assume you have installed git-lfs and other tools as described in my previous post.

That's all there is to it. Edit the text files that make up the book, written in reStructedText with Runestone extensions.

A Software Addition to Support Book Development

The text has step-by-step "audio tours" through many of the code examples. They are stored as collections of wave files, which take up a huge amount of space. To convert them to the much smaller and equally supported mp3 format, which makes them less than a tenth their original size, I installed FFmpeg:

$ sudo apt install ffmpeg

With this I can run:

$ ffmpeg -i audiofilename.wav audiofilename.mp3

and then remove the .wav file, reducing the size of the book source significantly.

Let the Remixing Begin!

I've now been remixing and updating the text for more than a month, a process which has been helped immensely by Shushantika Barua, who is both a thoughtful reader and a gifted proof reader. She is reading the book to learn computer programming, so she has the "beginner's eye" so crucial to testing the clarity of the text, and she catches errors I would never see.

In addition to her introduction to programming, she is also being introduced to git through filing issues for errors and needed clarifications she finds while reading. While I don't want to speak for her, I believe her motivation and engagement in learning has been greatly enhanced by being a protagonist in the learning process.