Principles of Computer Science: An Invigorating, Hands-on Approach

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

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. The primary target audience for this book is individuals who do not have a background in Computer Science. We assume that readers possess only high-school level knowledge of algebra, and for the majority of the text, we relax the requirement for trigonometry. While an interest in computing is preferred, it is not strictly necessary, as we aim to cultivate that interest through each successive chapter. The book is structured linearly, intending that readers progress from the beginning to the end in most cases. Those with a background in discrete math or some aspects of computer science, however, have the option to skip the first five chapters should they so choose. Similarly, programmers proficient in C may skip Chapter 5.2. By this point, our goal is that all readers are at least familiar with the topics presented, thereby leveling the playing field, so to speak.

Author(s): Joshua Crotts
Publisher: J. Ross Publishing
Year: 20232

Language: English
Pages: 759

Front Cover
Title Page
Copyright
Dedication
Acknowledgments
Table of Contents
List of Figures
Preface
1. A Computing Mindset
1.1 Computer Heuristics
2. A Logic Primer
2.1 Zeroth-Order Logic
2.2 First-Order Logic
2.3 Sets
2.4 Functions
2.5 Proofs
2.6 Natural Deduction
2.7 Numbering Systems
3. Data Structures
3.1 Motivation for Data Structures
3.2 Arrays
3.3 Lists
3.4 Stacks
3.5 Queues
3.6 Sets
3.7 Maps/Dictionaries
3.8 Trees
3.9 Graphs
4. Formal Languages
4.1 Languages
4.2 Finite Automata
4.3 Syntactic Analysis
4.4 Analyzing ?-Calculus
5. Programming and Design
5.1 Recitation of Elementary Arithmetic
5.2 LPF1: Our First Language
5.3 LPF2: Now With Environments
6. Interpretation
6.1 LCOND: Conditionals and Decisions
6.2 LLOCAL: Local Identifiers and Values
6.3 LPROC1 & LPROC2: Recursive Procedures
6.4 Working with Even More Data
7. Functional Programming
7.1 Quotes, Pairs, Lists, and Quasiquotes
7.2 Variadic Arguments
7.3 First-Class and Higher-Order Functions
7.4 Evaluation and Application at the Interpreter Level
7.5 Constructive Recursion
7.6 Nested Interpreters
7.7 Types and Type Systems
8. Imperative Programming
8.1 Side-Effects
8.2 LBEGIN: Sequential Expressions
8.3 LOUT: Fancier Output
8.4 Parameter Passing Styles
8.5 L*EVAL: A Metacircular Evaluator
8.6 L*ASM: A Micro-Assembly Interpreter
8.7 L*IMPERATIVE: Thinking Imperatively
8.8 Object-Oriented Programming
8.9 LVECTOR: Static Data Structures
8.10 LLIB: External Libraries
8.11 L*GRAPH: Graph Library Implementation
8.12 LBIGNUM: Arbitrarily-Precise Numbers
8.13 LIN: Improved User Input
8.14 LFILE I/O: File Input and Output
8.15 LLOOP: An Iterative Approach to Problem-Solving
8.16 LMACRO: A Simple Macro System
8.17 L*MATCH: A Pattern Matcher
8.18 L*SCHELOG: Logic Programming
8.19 LGRAPHIC: Turtles and Graphics Galore
8.20 L*COROUTINE Coroutines and Continuations
9. Compilation
9.1 Code Generation
9.2 Compiling L-PF1 to L-PF1x64
9.3 Compiling LPF2 to LPF2x64
9.4 Compiling L-COND to L-CONDx64
9.5 Compiling L+COND to L+CONDx64
9.6 Compiling L-PROC to L-PROCx64
9.7 Compiling LPROC to LPROCx64
9.8 Compiling LARRAY to LARRAYx64
9.9 Compiling LFLOAT to LFLOATx64
9.10 Optimizing Generating Assembly
10. Memory Management
10.1 Memory Allocation
10.2 Reference-Counted Garbage Collection
11. Event-Driven Programming
11.1 Concurrent Programming
11.2 Multi-threading and Garbage Collection
11.3 A Powerful Garbage Collector
Epilogue
Environment and Code Setup
Graphics Library Source Code
Assembly Environment Setup
Bibliography
Index