Beautiful Online SICP
sarabander.github.io
sarabander.github.io
If it's your ambition to follow in the footsteps of others or otherwise just prefer the classic Lisp-haqr experience, you can use a TexInfo version of SICP and have both the text and your REPL in Emacs: http://zv.github.io/note/sicp-in-texinfo
Also, just to pimp my own ride: I put together a SICP guide for new explorers of this great text: https://github.com/zv/SICP-guile
It contains both meta-information about which dialects of Lisps and languages are most suited to SICP, overviews of subchapters, helpful hints for those who are following along at home as well as answers to the exercises in Elisp, Guile scheme & Racket.
Did a little research and found the TextInfo format from Neil Van Dyke here:
Or have it all in your browser (every code block is a REPL; CTRL-Enter to run):
As others have mentioned, the linked version has some definite improvements over the web version provided by MIT Press [0], which doesn't have particularly clear diagrams.
In fact, MIT Press does have an alternative version with larger diagrams [1], but the footnote links don't work.
Do also check out the 1986 Abelson and Sussman lectures [2] that accompany the text. Those two present the course in such an interesting and (dare I say it) fun way.
And for those who have already watched that and are curious, I've recently uploaded a 2004 version of the lectures to YouTube [3]. They're sourced from the SICP iCampus site [4], which is another fantastic resource, though I find the way that site presents the lectures to be a bit annoying. Completing the problem sets is a good way to check your understanding, though!
[0] http://mitpress.mit.edu/sicp/full-text/book/book.html
[1] https://mitpress.mit.edu/sicp/full-text/sicp/book/
[2] http://www.youtube.com/playlist?list=PLE18841CABEA24090
[3] http://www.youtube.com/playlist?list=PL7BcsI5ueSNFPCEisbaoQ0...
Really curious. Can you share a bit more details about this. Like specific instances of how it changed your thinking..
It also helped me finally 'get' functional programming. Even in situations where other programming paradigms make more sense, I'll still opt for a functional style a lot of the time and avoid state.
I'm also a lot more confident with higher-order functions and closures after SICP help me understand them better. Seeing how cons pairs can be implemented as functions was simply mind-blowing. I think being able to use some of these techniques have improved the way I code.
There are a lot of other topics, such as the meta-circular evaluator, that I haven't had the opportunity to put into practice, but are nonetheless absolutely fascinating.
ps: beside the very bad quality images, I'm still in love with the old layout.
If I was going to teach things like type systems and such and was ok with exotic syntax, I might teach Haskell or something.
Later I have been assisting a professor during python classes and I have come to appreciate the benefits of a purely functional language for introductions (our teachers have strategically chosen not to talk about the `begin` keyword in Scheme). Many students have had really hard time grasping the idea of variables and scopes.
Remember the kids for whom this course was designed were going to be doing circuit design concurrently or the following semester. So the point was to learn composition, abstraction, modularity, algorithms etc, not syntax.
And Sussman was not the only one who used scheme to do a lot of engineering computation as well.
I have never considered Lisp syntax exotic. In any case, remember SICP was the text for a fundamental CS and Engineering class, not a programming class.
The book was written a long time ago, yet they described MapReduce, and the industry took over 30 years to finally see the light. They described functional programming, and similarly, the industry took forever to catch up, though sadly FP is mostly being done very wrong.
In this day and age of "get a job at CompanyX with 2 months of study," I'd argue that this book is even more valuable. It is an introductory text (where nearly every intro text is water-down; online isn't worth speaking on) that teaches the implementation details of common data structures, along with many clever approaches and tricks, all written and explained without being overly abstruse. Sure current resources may teach you to set up RoR and plug in flavor-of-the-day javascript, but those who built the meta-circular evaluator rightfully roll their eyes at yet another JS... evaluator.
"Third Addendum: Things go in spirals. We explored the powers of Texinfo and LaTeX at typesetting the PDF book. Now it’s time to come back to HTML. This turn it shall be HTML5. “It can be a dangerous place, but it’s our last, best hope for peace.” (Sinclair, Babylon 5.)"
That said, it seems that the font in this version is insanely large. I know large fonts are trendy right now, but 27pt text is just too much for long-form content like a book. (Compare with printed material at 10-12pt.) If the author's trying to improve readability, I'd recommend a higher-contrast font color instead.
On the other hand, the PDF version looks fantastic and addresses both concerns.
https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-15.htm...
http://sarabander.github.io/sicp/html/2_002e2.xhtml#g_t2_002...
However, the fact that they're not tiny and pixelated is definitely an improvement.
As for the content of SICP itself, it's extremely interesting and enlightening but perhaps encourages a little too much "abstraction-worship" --- not surprising given that computers were still getting faster exponentially when the book was first written.
I see this on the GNU website and in the HTML versions of their manuals, so am assuming it's from a design choice made there ...
Making the empty side margins Clickable to indicate "next page" / "continue" or binding the arrow keys, or spacebar-if-scrolled-to-bottom would make this much more tolerable to navigate, I surmise that the emacs / info readers must have more usable controls. Are there nav controls I'm missing?
t: top of page
b: bottom of page
n: next page
p: previous page
u: up one level
c: table of contents
Unfortunately, they seem to be a bit iffy (partly because some of them are set on multiple elements).Without an easily verifiable way to test your solutions as you go I think these kinds of books really do themselves a disservice as you lose the ability to struggle and think hard about the problem if you can't immediately solve it.
In order to use this, you will need to install Racket first: http://racket-lang.org/
DrRacket is a great starting point if you don't want to bother with setting up Emacs and the SICP package even supports the image elements that are covered in the course.
Imagine reading through SQLAlchemy's documentation [1] in that format.
Quick link to the repo: https://github.com/sarabander/sicp
The format this book is made out of seems to be Texinfo: https://en.wikipedia.org/wiki/Texinfo
anyone know how `Figure 1.5: The tree-recursive process' is generated? it's not an image.
http://sarabander.github.io/sicp/html/1_002e2.xhtml#g_t1_002...
> Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman with Julie Sussman is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License by the MIT Press. [1]
That's not an "ND" (no derivative works) license, and this version also says it's licensed under CC-BY-SA 4.0 International, which should cover the "ShareAlike" part.
https://github.com/sarabander/sicp-epub/blob/master/sicp.epu...