If I could send email two years into the past, I'd tell myself to spend a lot less time making videos for Software Carpentry, and a lot more time exploring interactive formats. One that I've been following recently is the IPython Notebook, a "live" lab notebook that allows scientists to mix, share, and explore text, code, graphs, and the like. Another, which I've just come across through this post on Mark Guzdial's ever-informative blog, is an interactive version of "How to Think Like a Computer Scientist". As Brad Miller says in his description:

this book is really a triumph of open source. Here are the open source components we've used and modified for this project:

  • The text in the book is based on the original How to Think Like a Computer Scientist by Jeff Elkner, et. al. You can find the non-interactive version here
  • The Python Interpreter is by Scott Graham and you can find out information about it at Skulpt.org. This was a really key piece and although I've spent a ton of time creating a turtle graphics module for it, the book wouldn't have gotten off the ground without it. In the book the pieces we refer to as activecode all make use of Skulpt, along with the really nice Javascript editor Codemirror.
  • What we call codelens in the book is based on work by Philip Guo. I really like this part because students can step through the code a line at a time both forward and backward.
  • Finally, the glue that holds the whole thing together is the excellent Sphinx publishing system. This really turned out to be the key as Sphinx lets you create new directives to use in writing. I was able to add directives to Sphinx to make it really easy to include the interactive features without getting in the way of the writing.

To get a feel for what it can do, try working through the turtle graphics chapter. It's pretty impressive...

My questions are:

  1. Given a choice between a traditional (static) book, either printed or electronic, and something like this, which would you prefer us to build?
  2. How do we adapt this to teach things like the Unix shell, version control, databases, etc.? Like the IPython Notebook, this is a single-language system, but real-world computing is almost always multilingual.

This post originally appeared in the Software Carpentry blog.