42 Computing Science and Software Engineering

Agent-Based Evolutionary Game Dynamics

Authors: Luis R. Izquierdo, Segismundo S. Izquierdo, and William H. Sandholm

Description: This book is a guide to implement simple agent-based evolutionary models using NetLogo.

All the models we implement are agent-based, i.e. individual agents and their interactions are explicitly represented in the models. To formalise agents’ interactions we use the basic framework of Evolutionary Game Theory.

NetLogo is a multi-agent programmable modeling environment used by hundreds of thousands of students, teachers and researchers all around the globe. No coding experience is necessary to fully understand the contents of this book.

Book of Proof

Approved by the American Institute of Mathematics and adopted widely by other universities, this textbook is an introduction to the standard methods of proving mathematical theorems.

Includes: instructor resources, workbook.

May suit: COMP 232.

Blueprints: Creating, Describing, and Implementing Designs for Larger-Scale Software Projects – version 2.3

Author: Stephen Davies

Description: Blueprints is a concise yet comprehensive coverage of Object-Oriented Analysis and Design concepts, suitable for a second programming course in Computer Science. It introduces and teaches application development in a command-line environment, and assumes basic expertise with the Java programming language.

Includes: LaTeX source code

A Brief Introduction to Engineering Computation with MATLAB

Specifically designed for students with no programming experience, the strategic goal of the course and book is to provide learners with an appreciation for the role computation plays in solving engineering problems.

Includes: study guide, problem sets.

Computer Networks: A Systems Approach

Authors: Larry Peterson and Bruce Davie

Description: Suppose you want to build a computer network, one that has the potential to grow to global proportions and to support applications as diverse as teleconferencing, video on demand, electronic commerce, distributed computing, and digital libraries. What available technologies would serve as the underlying building blocks, and what kind of software architecture would you design to integrate these building blocks into an effective communication service? Answering this question is the overriding goal of this book—to describe the available building materials and then to show how they can be used to construct a network from the ground up.

Includes: Source text

Computer Science I – Version 1.3.7

Author: Chris Bourke

Description: This textbook covers the traditional introductory Computer Science I topics but takes a unique approach. Topics are covered in a language-agnostic manner in the first part with supplemental parts that cover the same concepts in a specific language. The current version covers C, Java, and PHP. This textbook as been used in several Computer Science I sections over multiple years at the University of Nebraska-Lincoln

Includes: Download complete Latex source code.

Computer Science 20 – Saskatoon

Through its text and videos, this resource provides an interactive experience on learning to write and execute Python code. In addition to simply executing code, there is a unique feature called codelens that allows control of the flow of execution in order to gain a better understanding of how the program works.

Includes: videos, quizzes, exercises.

The Crystal Ball Instruction Manual – version 1.1 Volume One: Introduction to Data Science

Author: Stephen Davies

Description: A perfect introduction to the exploding field of Data Science for the curious, first-time student. The author brings his trademark conversational tone to the important pillars of the discipline: exploratory data analysis, choices for structuring data, causality, machine learning principles, and introductory Python programming using open-source Jupyter Notebooks. This engaging read will allow any dedicated learner to build the skills necessary to contribute to the Data Science revolution, regardless of background.

Includes: LaTeX source code

Database Design

An introductory textbook that covers database systems and database design concepts.

Includes: end-of-chapter exercises, sample ERD exercises, SQL lab with solution.

May suit: COMP 353.

Defend Dissent

Author: Glencora Borradaile

Description: Defend Dissent is an introduction to cryptography paired with the social impacts of surveillance and the protective potential of encryption, with a focus on US social movements. Each chapter ends with a story that brings social context to the material—from surveillance used against contemporary US protests to the African National Congress’s use of partially manual encryption in fighting apartheid in South Africa in the 80s.

This book can be read linearly, or you can pick and choose what you would like to learn about. Each chapter is prefaced with what you should read first (for background) and concludes with what you might want to read next.

Delftse Foundations of Computation

The textbook is designed for an introductory course in theoretical computer science. It includes topics from propositional and predicate logic, proof techniques, set theory and the theory of computation, along with practical applications to computer science.

May suit: COMP 335.

The Discipline of Organizing: 4th Professional Edition

Author: Robert J. Glushko

Description: We organize things, we organize information, we organize information about things, and we organize information about information. But even though “organizing” is a fundamental and ubiquitous challenge, when we compare these activities their contrasts are more apparent than their commonalities. We propose to unify many perspectives about organizing with the concept of an Organizing System, defined as an intentionally arranged collection of resources and the interactions they support. Every Organizing System involves a collection of resources, a choice of properties or principles used to describe and arrange resources, and ways of supporting interactions with resources. By comparing and contrasting how these activities take place in different contexts and domains, we can identify patterns of organizing. We can create a discipline of organizing in a disciplined way.

The 4th edition builds a bridge between organizing and data science. It reframes descriptive statistics as organizing techniques, expands the treatment of classification to include computational methods, and incorporates many new examples of data-driven resource selection, organization, maintenance, and personalization. It introduces a new “data science” category of discipline-specific content, both in the chapter text and in endnotes, marked with [DS] in editions that contain endnotes.

Discrete Mathematics: An Open Introduction

Approved by the American Institute of Mathematics, this textbook grew out of a discrete mathematics course at the University of Northern Colorado.

Includes: questions, answers, instructor resources upon request.

May suit: COEN 231.

Eloquent JavaScript: A Modern Introduction to Programming

This book covers the principles of programming and introduces JavaScript. It is written by a programming language enthusiast. 

Includes: Code sandbox and exercise solutions.

May suit: SOEN 287.

Foundations of Computation

The textbook is designed for a one-semester course in theoretical computer science.

May suit: COMP 335.

Introduction to Computer Graphics

Author: David J. Eck

Description: Introduction to Computer Graphics is a free, on-line textbook covering the fundamentals of computer graphics and computer graphics programming. This book is meant for use as a textbook in a one-semester course that would typically be taken by undergraduate computer science majors in their third or fourth year of college.

Includes: Source code files, copy of book website

An Introduction to Computer Networks – Second Edition

Author: Peter Lars Dorda

Description: An Introduction to Computer Networksis a free and open general-purpose computer-networking textbook, complete with diagrams and exercises.It covers the LAN, internetworking and transport layers, focusing primarily on TCP/IP. Particular attention is paid to congestion; other special topics include queuing, real-time traffic, network management, security and the ns simulator.

The book is suitable as the primary text for an undergraduate or introductory graduate course in computer networking, as a supplemental text for a wide variety of network-related courses, and as a reference work.

Introduction to Probability

The textbook is intended for use in a standard one-term course, in which both discrete and continuous probability is covered.

Includes: exercises and solutions.

May suit: COMP 233.

Introduction to Probability, Statistics and Random Processes

This textbook is intended for undergraduate and first-year graduate-level courses in probability, statistics, and random processes.

Includes: exercises, solutions, code.

May suit: COMP 233.

Introduction to Programming Using Java, Eighth Edition

Author: David J. Eck

Description: Welcome to the Eighth Edition of Introduction to Programming Using Java, a free, on-line textbook on introductory programming, which uses Java as the language of instruction. This book is directed mainly towards beginning programmers, although it might also be useful for experienced programmers who want to learn something about Java. It is not meant to provide complete coverage of the Java language.

The eighth edition requires Java 8 or later, and it uses JavaFX for GUI programming. Version 8.1 is a small update of Version 8.0. This version briefly covers some of the new features in Java 11 and makes it clearer how to use this book with Java 11 and later.

Includes: Source code, exercise solutions, Source files for the book

Java, Java, Java: Object-Oriented Problem Solving

Authors: Ralph Morelli, Ralph Walde

Description: We have designed this third edition of Java, Java, Java to be suitable for a typical Introduction to Computer Science (CS1) course or for a slightly more advanced Java as a Second Language course. This edition retains the “objects first” approach to programming and problem solving that was characteristic of the first two editions. Throughout the text we emphasize careful coverage of Java language features, introductory programming concepts, and object-oriented design principles.

The third edition retains many of the features of the first two editions, including:

  • Early Introduction of Objects
  • Emphasis on Object Oriented Design (OOD)
  • Unified Modeling Language (UML) Diagrams
  • Self-study Exercises with Answers
  • Programming, Debugging, and Design Tips.
  • From the Java Library Sections
  • Object-Oriented Design Sections
  • End-of-Chapter Exercises
  • Companion Web Site, with Power Points and other Resources

The In the Laboratory sections from the first two editions have been moved onto the book’s Companion Web Site.

Includes: self-study exercises with answers, end-of-chapter exercises, and a companion website with instructor resources upon request

Mathematical Reasoning: Writing and Proof

This textbook is designed for the first course in a mathematics curriculum that introduces students to the processes of constructing and writing proofs. It focuses on the formal development of mathematics.

Includes: questions, answers, instructor resources upon request.

May suit: COMP 232.

The Missing Link: An Introduction to Web Development and Programming

This textbook provides the developer with an understanding of the various elements of web development by focusing on the concepts and fundamentals through the examples within, providing a foundation that allows easier transition to other languages and a better understanding of how to approach their work.

Includes: questions, discussions, solutions.

May suit: SOEN 287.

A Person-Centered Guide to Demystifying Technology

Editor: Martin Wolske

Contributors: Betty Bayer, Henry Grob, Sara Rasmussen, Dinesh Rathi, Stephanie Shallcross, and Vandana Singh

Description:  Digital technologies old and new are not objects that can be packed inside a box. They are a seamless, indivisible combination of people, organizations, policies, economies, histories, cultures, knowledge, and material things that are continuously shaped and reshaped. Every one of us innovates-in-use our everyday technologies, we just do not always know it. Not only are we shaped by the networked information tools in our midst, but we shape them and thereby shape others. For us to advance individual agency across diverse community knowledge and cultural wealth within the fabric of communities, we need to nurture our cognitive, socio-emotional, information, and progressive community engagement skills along with, and sometimes in advance of, our technical skills which then serve as just-in-time in-fill learning. This is the call placed by Rev. Dr. Martin Luther King, Jr. – to rapidly shift from a ‘thing-oriented’ society to a ‘person-oriented’ society. In support of this shift, each session of the book begins first with a social chapter with background knowledge probe, conceptual introductions, and a lesson plan for the session. A technical chapter follows with technical introductions and hands-on activities, and a concluding wrap up and comprehension check. The technical of the Orange Unit especially focuses on electronics and physical computer components; the Blue Unit highlights software through a series of introductory programming activities, with possibilities for alternate pathways for those who bring in some existing programming experience; the Rainbow Unit then brings the hardware and software together into networked systems, concluding with a final design adventure. The general learning outcome objectives of this book are to help readers: • Develop a clear hands-on working understanding of the physical and software layers of computers and networks; • Evolve a more holistic and nuanced understanding of the sociotechnical artifacts we use as a daily part of our professional lives; • Develop a critical approach to sociotechnical artifacts to counter systemic injustices related to race, class/caste, gender, and other cultural dynamics; and • Advance community agency in appropriating technology to achieve our individual and community development goals through a reconsidered digital literacy learning and practice.

Programming Fundamentals – A Modular Structured Approach, 2nd Edition

This is the second edition to Programming Fundamentals – A Modular Structured Approach using C++. The goal is to make it programming-language neutral, so that it may serve as an introductory programming textbook for students using any of a variety of programming languages, including C++, C#, Java, JavaScript, Python, and Swift.

Includes: pseudocode, flowcharts, and example code in C++, C#, Java, JavaScript, Python, and Swift.

May suit: COMP 348

Programming Fundamentals – A Modular Structured Approach using C++

This reviewed open textbook covers content normally found in an introductory C++ programming course, including decisions, loops, functions, arrays and file I/O.

Includes: instructor and student resources.

May suit: COMP 348

Programming Languages: Application and Interpretation

Written by a computer science professor at Brown University, this textbook takes a non-linear approach to the subject matter.

Includes: exercises and activities.

May suit: COMP 348

Project Management: A Strategic Approach

Author: Associate Professor Carmen Reaiche

Description: Project management is becoming a core competence and not just about managing processes to ensure that the strategic goals of a business are delivered on time, within budget and specification. These days, project management is more about managing strategic goals while adapting to change and responding to ongoing disruptions. The pandemic, rapid urbanisation, digital transformation and environmental challenges are only some of the types of disruption faced by contemporary businesses. It is up to the project manager to ensure that the project management processes, as well as the projects and/or services themselves, are part of the readjustment required for business to survive these new challenges. This freely available ebook introduces some of the core values, concepts and tools as recognised by the Project Management Institute (PMI). This book will be of value to both students and practitioners in Australia and overseas seeking professional development in the field of project management.

Python for Everybody: Exploring Data Using Python 3

Author: Charles Severance

Description: I never seemed to find the perfect data-oriented Python book for my course, so I set out to write just such a book. Luckily at a faculty meeting three weeks before I was about to start my new book from scratch over the holiday break, Dr. Atul Prakash showed me the Think Python book which he had used to teach his Python course that semester. It is a well-written Computer Science text with a focus on short, direct explanations and ease of learning.The overall book structure has been changed to get to doing data analysis problems as quickly as possible and have a series of running examples and exercises about data analysis from the very beginning.

Chapters 2–10 are similar to the Think Python book, but there have been major changes. Number-oriented examples and exercises have been replaced with data- oriented exercises. Topics are presented in the order needed to build increasingly sophisticated data analysis solutions. Some topics like try and except are pulled forward and presented as part of the chapter on conditionals. Functions are given very light treatment until they are needed to handle program complexity rather than introduced as an early lesson in abstraction. Nearly all user-defined functions have been removed from the example code and exercises outside of Chapter 4. The word “recursion”1 does not appear in the book at all.

In chapters 1 and 11–16, all of the material is brand new, focusing on real-world uses and simple examples of Python for data analysis including regular expressions for searching and parsing, automating tasks on your computer, retrieving data across the network, scraping web pages for data, object-oriented programming, using web services, parsing XML and JSON data, creating and using databases using Structured Query Language, and visualizing data.

The ultimate goal of all of these changes is a shift from a Computer Science to an Informatics focus is to only include topics into a first technology class that can be useful even if one chooses not to become a professional programmer.

Includes: YouTube Playlist, Audio lectures, lectures slides and handouts, sample code, lessons

Squeak by Example

Authors: Andrew P. Black, Stéphane Ducasse, Oscar Nierstrasz, Damien Pollet.

Description: Squeak is a modern open-source development environment for the classic Smalltalk-80 programming language. Despite being the first purely object-oriented language and environment, Smalltalk is in many ways still far ahead of its successors in promoting a vision of an environment where everything is an object, and anything can change at run-time.

Squeak by Example, intended for both students and developers, will guide you gently through the Squeak language and environment by means of a series of examples and exercises. The book helps you get started with A Quick Tour of Squeak and guides you through A First Application. The Smalltalk language is introduced in three chapters on Syntax in a Nutshell, Understanding Message Syntax and The Smalltalk Object Model.

Development with Squeak is covered in The Squeak Programming Environment and SUnit. Several of the key classes are presented in chapters on Basic Classes, Collections, Streams and Morphic.

The first edition of the book concludes with chapters on Classes and Metaclasses and Frequently Asked Questions.

Includes: LaTeX source code

A Tale of Two Systems

Authors: René Reitsma and Kevin Krueger

Description: This text is meant as a case study and companion text to many Systems Analysis & Design textbooks used in undergraduate Management Information Systems (MIS), Business Information Systems (BIS) and Computer Information Systems (CIS) programs. The US counts about 1,300 (undergraduate + graduate) such programs (Mandiwalla et al., 2016). These texts typically contain short descriptions of technologies which give students some sense of what these technologies are used for, but do not provide much context or reflection on why these technologies might or might not be applied and what such applications actually amount to in real life. As a consequence, students, having worked their way through these textbooks and associated courses will have had little exposure to the reasoning which must take place when making choices between these technologies and to what goes into combining them into working and successful system architectures. It is our hope that this Tale of Two Systems (pun very much intended) will help mitigate this problem a little.

Think Data Structures

Author: Allen B. Downey

Description: Data structures and algorithms are among the most important inventions of the last 50 years, and they are fundamental tools software engineers need to know. But in my opinion, most of the books on these topics are too theoretical, too big, and too bottom-up:

  • Too theoretical: Mathematical analysis of algorithms is based on simplifying assumptions that limit its usefulness in practice. Many presentations of this topic gloss over the simplifications and focus on the math. In this book I present the most practical subset of this material and eliminate the rest.
  • Too big: Most books on these topics are at least 500 pages, and some are more than 1000. By focusing on the topics I think are most useful for software engineers, I kept this book under 250 pages.
  • Too bottom-up: Many data structures books focus on how data structures work (the implementations), with less about how to use them (the interfaces). In this book, I go “top down”, starting with the interfaces. Readers learn to use the structures in the Java Collections Framework before getting into the details of how they work.

Finally, many present this material out of context and without motivation: it’s just one damn data structure after another!

I try to alleviate the boredom by organizing the topics around an application—web search—that uses data structures extensively, and is an interesting and important topic in its own right.

This application also motivates some topics that are not usually covered in an introductory data structures class, including persistent data structures, with Redis, and streaming algorithms.

I have made difficult decisions about what to leave out, but I have made some compromises. I include a few topics that most readers will never use, but that they might be expected to know, possibly in a technical interview. For these topics, I present both the conventional wisdom as well as my reasons to be skeptical.

This book also presents basic aspects of software engineering practice, including version control and unit testing. Each chapter ends with an exercise that allows readers to apply what they have learned. Each exercise includes automated tests that check the solution. And for most exercises, I present my solution at the beginning of the next chapter.

This book is intended for college students in computer science and related fields, as well as professional software engineers, people training in software engineering, and people preparing for technical interviews.

I assume that the reader knows Java at an intermediate level, but I explain some Java features along the way, and provide pointers to supplementary material.

People who have read Think Java or Head First Java are prepared for this book.

This book is available under a Creative Commons license, which means that you are free to copy, distribute, and modify it, as long as you attribute the source and don’t use it for commercial purposes.

Includes: LaTeX source code

Think OS

Author: Allen B. Downey

Description: Think OS is an introduction to Operating Systems for programmers.

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 is intended for a different audience, and it has different goals. I developed it for a class at Olin College called Software Systems.

Most students taking this class learned to program in Python, so one of the goals is to help them learn C. For that part of the class, I use Griffiths and Griffiths, Head First C, from O’Reilly Media. This book is meant to complement that one.

Few of my students will ever write an operating system, but many of them will write low-level applications in C, and some of them will work on embedded systems. My class includes material from operating systems, networks, databases, and embedded systems, but it emphasizes the topics programmers need to know.

This book does not assume that you have studied Computer Architecture. As we go along, I will explain what we need.

If this book is successful, it should give you a better understanding of what is happening when programs run, and what you can do to make them run better and faster.

The current version of this book is a draft. While I am working on the text, I have not yet included the figures. So there are a few places where, I’m sure, the explanation will be greatly improved when the figures are ready.

Think OS is a Free Book. It is available under the Creative Commons Attribution-NonCommercial 3.0 Unported License, which means that you are free to copy, distribute, and modify it, as long as you attribute the work and don’t use it for commercial purposes.

Includes: Source code

Think Python 2e

Author: Allen B. Downey

Description: 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.

What’s new in the second edition?

  • We’ve upgraded to Python 3: All examples in the book are now Python 3, and the supporting code has been updated to run in both Python 2 and 3.
  • We’ve removed the roadblocks: Based on reader feedback, we know where people had problems, so we’ve fixed or removed the pain points.
  • Python in the browser: For beginners, one of the challenges of getting started is installing Python. For readers who don’t want to install Python right away, we provide instructions for running Python in a browser using PythonAnywhere, a free online programming environment.
  • More Python goodies: We’ve added a chapter to cover some powerful Python features that didn’t make it into the first edition, including list comprehensions and additional data structures.

Think Python 2e is a Free Book. It is available under the Creative Commons Attribution-NonCommercial 3.0 Unported License, which means that you are free to copy, distribute, and modify it, as long as you attribute the work and don’t use it for commercial purposes.

Includes: LaTeX source code, code examples and exercise solutions.

Think Raku: How to Think Like a Computer Scientist – 2nd edition

Authors: Laurent Rosenfeld and Allen Downey

Description: Think Raku is an introduction to computer science and programming intended for people with little or no experience.

This aim of this book is not primarily to teach Raku, but instead to teach the art of programming, using the Raku language. After having  completed this book, you should hopefully be able  to write programs to solve relatively difficult problems in Raku, but my main aim is to teach computer science, software programming, and problem solving rather than solely to teach the Raku language itself.

Think Raku is a free book available under a Creative Commons license. Readers are free to copy and distribute the text; they are also free to modify it, which allows them to adapt the book to different needs, and to help develop new material.

Includes:  LaTeX source code

Think Stats: Probability and Statistics for Programmers

The book is an introduction to the practical tools of exploratory data analysis, especially for Python programmers.

Includes: exercises, experiments, code.



Icon for the Creative Commons Attribution 4.0 International License

The University of Regina OER by Subject Directory Copyright © 2021 by University of Regina is licensed under a Creative Commons Attribution 4.0 International License, except where otherwise noted.

Share This Book