[post] SICP Recap

This commit is contained in:
Correl Roush 2015-05-26 22:44:37 -04:00
parent 63e61924d2
commit e1022debba

View file

@ -0,0 +1,86 @@
---
layout: post
title: SICP Recap
author: Correl Roush
---
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](https://github.com/extreme-tech-seminar/sicp).
# 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