Now that we've completed our study of Abelson and Sussman's Structure and Interpretation of Computer Programs, here's a quick recap of the topics we've covered.
Notes and exercise work from each meeting can be found on Github.
Chapter 1: Building Abstractions with Procedures
In the first chapter, we got acquainted with the simple syntax of scheme, and learned how to build up layers of abstraction using functions.
Important Concepts
- Evaluation
- The Substitution Model
- Compound Procedures
- Recursion
- Higher-Order Procedures
Chapter 2: Building Abstractions with Data
In the second chapter, we learned how to build more complex data structures, and how to write functions to operate on them at different levels of abstraction.
Important Concepts
- The Closure Property
- Sequences
- Symbolic Data
- Data-Directed Programming
- Generic Operations
Chapter 3: Modularity, Objects, and State
With a firm grasp on the core concepts of functional programming, we took a look at assignment with a fresh perspective, and examined the pros and cons of including assignment and state in our programs.
Important Concepts
- The Costs and Benefits of Assignment
- The Environment Model of Evaluation
- Mutable Data Structures
- Concurrency
- Streams
- Delayed Evaluation
Chapter 4: Metalinguistic Abstraction
We moved up another level of abstraction, and started to look at the scheme language and how to implement it. We learned how delayed evaluation works by implementing it in our own version of scheme, and explored the declarative world of logic programming.
Important Concepts
- Data as Programs
- Separating Syntactic Analysis from Execution
- Lazy Evaluation
- Normal vs. Applicative Order
- Non-deterministic Computing
- Logic Programming
Chapter 5: Computing with Register Machines
Finally, we moved out of the language a bit and implemented a virtual machine to explore low-level implementations of computer programs and to better understand how the physical limitations of processing speed and memory space affect the programs that we write.
Important Concepts
- Abstraction in Machine Design
- Using a Stack to Implement Recursion
- Storage Allocation and Garbage Collection
- Monitoring Machine Performance
- Compilation