Skip to Main Content

Open Educational Resources

A guide to textbooks, course materials and multimedia which are free or or low cost for educational use. These resources were created with the intention of being widely used and are legal to use in courses with proper citation.

Open Computer Science Textbooks

Think OS: A Brief Introduction to Operating Systems -Allen B. Downey

In many computer science programs, Operating Systems is an advanced topic. By the time students take it, they usually know how to program in C, and they have probably taken a class in Computer Architecture. Usually the goal of the class is to expose students to the design and implementation of operating systems, with the implied assumption that some of them will do research in this area, or write part of an OS. This book does not assume that you have studied Computer Architecture. As we go along, I will explain what we need. -Allen B. Downey

Author:

Allen B. Downey, Ph.D., Computer Science, Olin College

This text is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.

 

Think Python: How to Think Like  a Computer Scientist -Allen B. Downey

Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters. Some examples and exercises are based on Swampy, a Python package written by the author to demonstrate aspects of software design, and to give readers a chance to experiment with simple graphics and animation. -Allen B. Downey

Author:

Allen B. Downey, Ph.D., Computer Science, Olin College

This text is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.

 

 

Think Java: How to Think Like a Computer Scientist -Allen B. Downey

Think Java is an introduction to Java programming for beginners. It is tailored for students preparing for the Computer Science Advanced Placement (AP) Exam, but it is for anyone who wants to learn Java. Think Java is concise. It uses a subset of Java that lets students work on interesting projects without getting bogged down in the details of Java.  -Allen B. Downey

Author:

Allen B. Downey, Ph.D., Computer Science, Olin College

This text is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.

 

 

Think C++: How to Think Like a Computer Scientist  -Allen B. Downey

The single most important skill for a computer scientist is problem solving. The goal of this book is to teach you to think like a computer scientist. Of course, the other goal of this book is to prepare you for the Computer Science AP Exam. We may not take the most direct approach to that goal, though. For example, there are not many exercises in this book that are similar to the AP questions. On the other hand, if you understand the concepts in this book, along with the details of programming in C++, you will have all the tools you need to do well on the exam.

Author:

Allen B. Downey, Ph.D., Computer Science, Olin College

This text is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.

 

Think Ocaml: How to Think Like a Functional Programmer  -Allen B. Downey, Nicholas Monje

How to Think Like a Computer Scientist is an introductory programming textbook based on the OCaml language. It is a modified version of Think Pythonby Allen Downey. It is intended for newcomers to programming and also those who know some programming but want to learn programming in the function-oriented paradigm, or those who simply want to learn OCaml.

Authors:

Allen B. Downey, Ph.D., Computer Science, Olin College

Nicholas Monje

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License,

 

How to Think Like a Computer Scientist: Learning with Python  -Allen B. Downey

How to Think... is an introduction to programming using Python, one of the best languages for beginners. -Allen B. Downey

Authors:

Allen B. Downey, Ph.D., Computer Science, Olin College

Jeff Elkner, Northern Virginia Community College

Chris Myers

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License,

 

Think Complexity: Exploring Complexity Science with Python  -Allen B. Downey

An introduction to algorithms and data structures in Python, including graphs and arrays, and complexity science, which includes small world graphs, scale-free networks, cellular automata, self-organized criticality, fractals, and agent-based models. -Allen B. Downey

Author:

Allen B. Downey, Ph.D., Computer Science, Olin College

This text is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.

 

 

The Little Book of Semaphores -Allen B. Downey

The approach of this book is to identify patterns that are useful for a variety of synchronization problems and then show how they can be assembled into solutions. After each problem, the book offers a hint before showing a solution, giving students a better chance of discovering solutions on their own. The book covers the classical problems, including "Readers-writers," "Producer-consumer", and "Dining Philosophers." In addition, it collects a number of not-so-classical problems, some written by the author and some by other teachers and textbook writers. Readers are invited to create and submit new problems. -Allen B. Downey

Author:

Allen B. Downey, Ph.D., Computer Science, Olin College

This text is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.

 

Physical Modeling in MATLAB

Most books that use MATLAB are aimed at readers who know how to program. This book is for people who have never programmed before. As a result, the order of presentation is unusual. The book starts with scalar values and works up to vectors and matrices very gradually. This approach is good for beginning programmers, because it is hard to understand composite objects until you understand basic programming semantics.  -Allen B. Downey

Author:

Allen B. Downey, Ph.D., Computer Science, Olin College

This text is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.

 

Learning Perl the Hard Way -Allen B. Downey

This book if for people who already know how to program in another language, but who do not already know Perl. This book spends little time on the basics and emphasizes good programming style in Perl. Additionally, this text focuses on object-oriented Perl programming. 

Author:

Allen B. Downey, Ph.D., Computer Science, Olin College

This text is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.

 

Operating Systems and Middleware: Supporting Controlled Interaction -Max Hailperin

This book is intended for upper-level computer science students who want to understand how contemporary operating systems and middleware work. In this book you will find many forms of balance. The high-level application programmer's view, focused on the services that system software provides, is balanced with a lower-level perspective, focused on the mechanisms used to provide those services. Timeless concepts are balanced with concrete examples of how those concepts are embodied in a range of currently popular systems.

Author:

Max Hailperin Ph. D., Computer Science, Gustavus Adolphus College

This text is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.