Principles of Computer Science

Retail Price: $69.95

Direct Price: $59.95

An Invigorating, Hands-on Approach
Joshua Crotts
Softcover, 7×10, 754 pages
ISBN: 978-1-60427-199-7
e-ISBN: 978-1-60427-852-1
October 2023

This book is also available for rent

ISBN: 978-1-60427-199-7 Categories: , ,


Principles of Computer Science is an invigorating and rapid adventure that covers core introductory theoretical computer science topics, including discrete mathematics, logic, programming languages, and programming language pragmatics. Readers dive deep into the syntax and semantics of constructing a small yet usable programming language (interpreter) containing paradigms from functional and non-functional programming. Additionally, users will gain an understanding of compilation by writing functions that translate code written in their high-level language down to low-level machine language. Moreover, Crotts provides a perspective on event-driven programming, memory management via garbage collection, and much more. Principles of Computer Science assumes no prior programming experience—all topics are taught from scratch, making this a highly approachable and inclusive textbook.

Key Features

  • Geared towards students who are new to computer science or want to see what the field has to offer
  • Written in an accessible, easy-to-use format that marries the mundane behind certain concepts with practicability not found in other texts on the topic
  • Walks readers through a large and complex (but invigorating) project with several embedded sub-projects
  • Complements the theory of computer science with real-world applications, including sections on discrete math, data structures, and algorithms
  • Addresses key programming language and computer science constructs by design and implementation
  • WAV offers instructional material for classroom use (lecture slides, exercise solutions, etc.)—available from the Web Added Value™ Download Resource Center at

About the author(s)

Joshua Crotts is a computer science Ph.D. student at Indiana University with a strong interest in computer science pedagogy, as well as programming languages and compilers. He has spoken and published papers at conferences (e.g., SIGCSE, CMNA, ICEEL) about formal logic education, automatic detection of rhetorical devices (e.g., antithesis), and inductive logic programming as a means of argument mining in science-policy articles. His current research work aims to improve the transition of CS1 (first-semester) students to the CS2 (second-semester) domain. He graduated from the University of North Carolina at Greensboro with both a bachelor’s and master’s degree in computer science.

Table of Contents


Chapter 1: A Computing Mindset
Chapter 2: A Logic Primer
Chapter 3: Data Structures
Chapter 4: Formal Languages
Chapter 5: Programming and Design
Chapter 6: Interpretation
Chapter 7: Functional Programming
Chapter 8: Imperative Programming
Chapter 9: Compilation
Chapter 10: Memory Management
Chapter 11: Event-Driven Programming

Appendix A: Environment and Code Setup
Appendix B: Graphics Library Source Code
Appendix C: Assembly Environment Setup

You may also like…