Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ivanjovanovic/sicp

Structure and Interpretation of Computer Programs study notes with exercise solutions
https://github.com/ivanjovanovic/sicp

Last synced: about 2 months ago
JSON representation

Structure and Interpretation of Computer Programs study notes with exercise solutions

Awesome Lists containing this project

README

        

# A Year of SICP

On 1st of August 2011. I started a project which was to raise my
programming skills to a new level of understanding the magic of computer
programming. Somehow it turned out that it took me exactly one year to
finish. On 31st of July 2012. I have finished the section 5.5 of the book.
By finishing, I mean to do almost all exercises in the book and to
try to understand every concept presented in the book. As I figured out
towards the end, the goal of the book in fact is to destroy all the
magic that incompetent eye could see in the programming job. Maybe
better said, to lead the reader into the skills needed to bridle the
core concepts of the domain and to use them as magician would do to
produce magical things.

SICP (Structure and Interpretation of Computer Programs) is a masterpiece of
Harold Abelson and Gerald Jay Sussman on basics of computer science and software engineering.

### Goal

My goal is to

* Read the [SICP book](http://mitpress.mit.edu/sicp/full-text/book/book.html)
* Watch the [MIT 6.001 course](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/) videos
* Do exercises from the book
* Keep track of my progress in written form so other can eventually
have benefit from this.

### Process

At start, I used [Heist](https://github.com/jcoglan/heist) Scheme interpreter
written in Ruby.

After I passed more then a third of examples I have installed
[CHICKEN](http://call-cc.org/) Scheme compiler and interpreter to run
examples. It is better in supporting standards, comes with additional
libraries that can be installed, it is MUCH faster and gives much better
error messages with proper backtraces.

Also I used [Racket](http://racket-lang.org/) for deeper debugging and
analysis of the problems where needed. After I got some parenthesis
parsing powers I did not need it that much.

Usually I go this way through the material:
1. Watch the video lecture, or the part of it while taking notes
2. Get through notes and clarify concepts and ideas explained mostly
trying to reflect on them myself without external help
3. Go through book and do exercises one by one. I save exercises in
separate files where I add notes and reflections on them.

Of course, I don't tend to do this in one take, I do it continuously
when I have free time but trying to dedicate as much time as I can to
this so I don't lose the track of where I stopped.

### Used references

* [R5RS Standard specification](http://schemers.org/Documents/Standards/R5RS/r5rs.pdf)
* [Scheme at Glance](http://www.troubleshooters.com/codecorn/scheme_guile/hello.htm)
* [Schemers.org](http://schemers.org/)

## Other SICP solutions online
* http://eli.thegreenplace.net/category/programming/lisp/sicp/
* https://wqzhang.wordpress.com/sicp-solutions/
* http://community.schemewiki.org/?SICP-Solutions
* https://github.com/Pluies/SICP