Extreme Tech Seminar

nerds learning together

SICP Recap

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