Open Educational Resources and Computer Science

This collection was curated by an ASCCC OERI discipline lead. A comprehensive list of current discipline leads is available.

Introduction to Programming Concepts and Methodologies (C-ID COMP 112) and Programming Concepts and Methodology I (C-ID COMP 122)

The following resources are compatible with both C-ID COMP 112 and 122.

  • A Byte of Python

    A Byte of Python – LibreTexts (CC BY-SA)
    This book serves as a guide or tutorial to the Python programming language. It is mainly targeted at newbies. It is useful for experienced programmers as well. The aim is that if all you know about computers is how to save text files, then you can learn Python from this book. If you have previous programming experience, then you can also learn Python from this book.

    Submit an adoption report for A Byte of Python
  • Introduction to Computer Science and Programming in Python (CC BY-NC-SA)

    This is part of MIT’s OpenCourseWare website. It includes a course syllabus, reading list, lecture videos, Powerpoint slides and code, in-class questions and video questions as well as assignments – all available for download. The course is intended for students with little or no programming experience. It aims to provide students with an understanding of the role computation can play in solving problems and to help students, regardless of their major, feel justifiably confident of their ability to write small programs that allow them to accomplish useful goals. The class uses the Python 3.5 programming language.

    Submit an adoption report for Introduction to Computer Science and Programming in Python (CC BY-NC-SA)
  • Introduction to Python Programming (OpenStax) (CC BY)

    Introduction to Python Programming provides a comprehensive foundation in programming concepts and skills, and it is aligned to the scope of most introductory courses. A wide array of scenarios, contexts, and problems reflect programming applications in many disciplines and careers. The offering is suitable for a diverse learner audience, including those pursuing computer science, business, science, social science, statistics, data science, and related areas of study and employment.

    Submit an adoption report for
  • Python for Everybody

    Python for Everybody – LibreTexts (CC BY)
    An excellent book on introductory computer programming topics. The book’s website has a great deal of additional information and resources. The book itself has great vocabulary words, it has exercises, and includes the use of Jupyter Notebooks, where you can edit and run code right in the LMS environment. The material has been translated into several different languages, see the book’s website for a complete list.

    Submit an adoption report for Python for Everybody
  • Think Python 2e

    Think Python 2e – LibreTexts (CC BY-NC)
    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.

    Submit an adoption report for Think Python 2e

Programming Concepts and Methodology II (C-D COMP 132)

  • C++ reference

    (CC BY-SA and GNU Free Documentation License)
    A complete online reference for the C and C++ languages and standard libraries, i.e. a more convenient version of the C and C++ standards.

    Submit an adoption report for C++ reference
  • CISC 187 Course Reader (Parillo) (GNU Free Documentation License)

    Any user should ensure they read the GNU Free Documentation license in its entirety.

    Submit an adoption report for CISC 187 Course Reader (Parillo)
  • Open Data Structures (in C++) (CC BY)

    This resource is a well-written text that covers the material quite well. It is a bit older than other material, but it is still a very valid resource. The main website has some other variations of this text. It is intended to teach the design and analysis of basic data structures and their implementation in an object-oriented language. In this edition, the language happens to be C++. This book is not intended to act as an introduction to the C++ programming language. Readers of this book need only be familiar with the basic syntax of C++ and similar languages. Those wishing to work with the accompanying source code should have some experience programming in C++.

    Submit an adoption report for Open Data Structures (in C++) (CC BY)
  • Open DSA (Copyrighted)

    OpenDSA is infrastructure and materials to support courses in a wide variety of Computer Science-related topics such as Data Structures and Algorithms (DSA), Formal Languages, Finite Automata, and Programming Languages. OpenDSA materials include many visualizations and interactive exercises. Our philosophy is that students learn best when they engage the material and then practice it until they have demonstrated their proficiency. OpenDSA provides a place for students to practice skills and develop knowledge with a variety of exercises including small code writing problems, proficiency exercises where students demonstrate knowledge of an algorithm by interacting with a data structure, and questions about knowledge.

Computer Architecture and Organization (C-ID COMP 142)

  • Below C Level (CC BY-ND)

    (CC BY-ND; “ND” indicates “no derivatives”, editing is not permitted)
    This book is NOT about assembly language programming. There is assembly language sprinkled throughout the book, so you will in fact learn assembly language—but only as a means to a different end, the latter being understanding of computer systems. Specifically, you will learn about high-level hardware, the large differences between one machine and the next, and low-level software, meaning operating systems and to some degree compilers.

    Submit an adoption report for Below C Level (CC BY-ND)
  • Introduction to MIPS Assembly Language Programming

    Introduction to MIPS Assembly Language Programming PDF (CC BY)
    This book was written to introduce students to assembly language programming in MIPS. As with all assembly language programming texts, it covers basic operators and instructions, subprogram calling, loading and storing memory, program control, and the conversion of the assembly language program into machine code.

    Submit an adoption report for Introduction to MIPS Assembly Language Programming
  • Programmed Introduction to MIPS Assembly Language (CC BY-NC)

    This is a course in assembly language programming of the MIPS processor. It emphasizes the topics needed for the study of computer architecture: bits, bit patterns, operations on bit patterns, and how bit patterns represent instructions and data. This course is equivalent to a semester-long junior college or university course (except, perhaps, for the emphasis on bit patterns). The emphasis of the course is on understanding how computers work. This will provide a basis for further study of computer architecture and computer software. The MIPS processor, the subject of this course, has a well-designed architecture and is particularly fruitful to study.

    Submit an adoption report for Programmed Introduction to MIPS Assembly Language (CC BY-NC)
  • x86-64 Assembly Language Programming with Ubuntu

    x86-64 Assembly Language Programming with Ubuntu PDF (CC BY-NC-SA)
    The purpose of this text is to provide a reference for university-level assembly language and systems programming courses. Specifically, this text addresses the x86-641 instruction set for the popular x86-64 class of processors using the Ubuntu 64-bit Operating System (OS). While the provided code and various examples should work under any Linux-based 64-bit OS, they have only been tested under Ubuntu 14.04 LTS (64-bit).

    Submit an adoption report for x86-64 Assembly Language Programming with Ubuntu

Discrete Structures (C-ID COMP 152)

  • A Spiral Workbook for Discrete Mathematics (CC BY-NC-SA)

    This text covers the standard topics in a sophomore-level course in discrete mathematics: logic, sets, proof techniques, basic number theory, functions, relations, and elementary combinatorics, with an emphasis on motivation. It explains and clarifies the unwritten conventions in mathematics, and guides the students through a detailed discussion on how a proof is revised from its draft to a final polished form. Hands-on exercises help students understand a concept soon after learning it. The text adopts a spiral approach: many topics are revisited multiple times, sometimes from a different perspective or at a higher level of complexity. The goal is to slowly develop students’ problem-solving and writing skills.

    Submit an adoption report for A Spiral Workbook for Discrete Mathematics (CC BY-NC-SA)
  • Applied Discrete Structures – Website

    Applied Discrete Structures – Textbook (CC BY-NC-SA)
    This is an amazing resource…another one of those cool websites with a plethora of resources and tools.

    Submit an adoption report for Applied Discrete Structures
  • Discrete Mathematics: An Open Introduction (CC BY-SA)

    This is a new open textbook version of the material mentioned above. Applied Discrete Structures is designed for use in a university course in discrete mathematics spanning up to two semesters. Its original design was for computer science majors to be introduced to the mathematical topics that are useful in computer science. It can also serve the same purpose for mathematics majors, providing a first exposure to many essential topics.

    Submit an adoption report for Discrete Mathematics: An Open Introduction (CC BY-SA)
  • Mathematics for Computer Science

    Mathematics for Computer Science – LibreText PDFMathematics for Computer Science PDF (CC BY-SA)
    This text explains how to use mathematical models and methods to analyze problems that arise in computer science. Proofs play a central role in this work because the authors share a belief with most mathematicians that proofs are essential for genuine understanding. Proofs also play a growing role in computer science; they are used to certify that software and hardware will always behave correctly, something that no amount of testing can do.

    Submit an adoption report for Mathematics for Computer Science

No-Cost Resources – Licensing Will Vary


Using an OER resource that is missing from the list above? If so, please let us know.

This page last updated on November 5, 2024.