Runestone Interactive is the home for several projects that provide interactive textbooks for computer science. We currently have two books in use for our Introductory Computer Science classes. You can link to them from the library on the right.
In addition to the books we are also have a set of tools for creating interactive eBooks. The tools as well as the book are open source and available for you to use. If you do use the tools to create a book let us know and we'll add a link.
After writing two textbooks for introductory computer science I became very interested in what could be done if a textbook was truly interactive. During my sabbatical in 2010/2011 I started to experiement with programming on the iPad as well as a bunch of HTML5 features. After stumbling on some great open source tools, and the open source text from How to Think Like a Computer Scientist this project was born. The books in our library have the following unique features:
Activecode: A Javscript implementation of Python right in the book. Every example is runable and editable.
Codelens: Like having a debugger in the textbook. You can step forward and backward through the code and observe the value of the variables as they change.
Interactive Exercises for self assessment
Problem solving videos to help you understand important Python programming concepts
You are welcome to use either of these books in your course, or you can even make a custom build of the book with just the chapters you want to use.
There is still tons of work to do in developing tools and improving the books. Our hope is to create a resource where an instructor can create a custom book for their class.
The source code for this project is hosted on github. The eBook content is divided up into modules. Modules are short lessons or you might think of them as the sections of a chapter in a book. You are invited to fork the project and contribute back any updated modules, exercises, or new modules! github/bnmnetp/runestone If you are interested in extending the runestone tool set you should check out the developer docs.