
Structure and Interpretation of Computer Programs (1996) [pdf] - susam
https://opendocs.github.io/sicp/sicp.pdf
======
pixelmonkey
I took a one-week SICP course with 5 or 6 other professional programmers last
year. It was amazing. I wrote about my personal motivation for doing so here:

[https://amontalenti.com/2018/08/26/sicp-
expanding](https://amontalenti.com/2018/08/26/sicp-expanding)

As for an update: SICP was as good as I expected and definitely makes a
professional programmer regain some love for the art and magic of computer
science. (However, the book is a hard read without a guide. But it's really
fun if you alternate between coding and reading, by using a local Racket &
DrRacket install.)

One can find recorded courses from MIT with the SICP authors on YouTube, so
that may be one way to do this from home.

Hal Abelson was recently interviewed about the lasting influence of the book
in this podcast. It's a good conversation:

[https://pca.st/wmrdiyvq](https://pca.st/wmrdiyvq)

~~~
Stormwalker
Does it make sense to use Clojure while reading the book?

~~~
ahuth
I think it makes sense to use whatever language you want, and the ideas in the
book don't only apply to Scheme.

I've been working through the book in Javascript -
[https://github.com/ahuth/sicp/](https://github.com/ahuth/sicp/). Maybe I'm
losing something by doing it in JS instead of Scheme, but I'm still learning a
lot and having a ton of fun.

Wrote a little bit about SICP here: [https://ahuth.github.io/articles/the-
first-time-sicp-blew-my...](https://ahuth.github.io/articles/the-first-time-
sicp-blew-my-mind).

~~~
antonvs
I think if a language has decent lambdas - JavaScript qualifies - it'll work
for SICP. That said, using Scheme for it will give you a much better
appreciation of an underrated language.

------
sriram_malhar
SICP shows up every few months on HN, and I upvote enthusiastically every
single time!

I am a self-taught programmer, and survived a long time on C/C++/Java etc. I
was smugly confident in my confined space.

Then I came across SICP. I discovered a world of closures, streams, object-
orientation done using closures, infinite series using streams, lazy
evaluation, functional programming, and so much more. It was such a sharp
pivot that I registered for a PhD because I just had to know what else I took
for granted. I was 42 when I registered (graduated at 48)!

~~~
elteto
Wow that is a fantastic story! Kudos for completing your PhD!

Would you mind expanding a bit more about your PhD? Which school did you go
to? Did you find that your age made it more difficult to get in/stay in once
accepted? How did you handle family commitments (if you had them)?

Reason I ask is because I've been considering going back to school to get a
PhD.

Again, that is quite an achievement, so congrats!

~~~
sriram_malhar
Thank you much. Sorry for the wall of text, but you got me going!

I had been living and working in California, and found myself at the crest of
the dot-com wave of the late 90's and early '00s. But post-SICP, I _had_ to
dig deeper.

I didn't feel prepared for the schools I wanted to apply to: Berkeley &
Stanford. I am totally self-taught, and not having taken an exam in any CS
subjects, the subject GRE was a huge mental barrier. So I applied to the Univ.
of Cambridge in the UK.

That was a miscalculation. I was expecting to sit through a number of courses
before figuring out what I wanted -- the US model -- but no, I was thrown into
the deep-end right away, as an independent researcher. In my earlier life, I'd
prided myself in knowing a whole lot of stuff just by building things in my
own time (a TCP-IP stack from scratch, a Java compiler etc). But at Cambridge,
I was told the "Dragon Book" (Compilers, by Aho, Ullman and Sethi) was so
1970's! I can't tell you how inadequate and how unprepared I felt.

In just the areas I was interested in (PL, concurrency, distributed systems),
I was surrounded by researchers (at the cs dept and the microsoft research lab
in the adjoining building) who _defined_ world-class. Robin Milner working on
Distributed Pi Calculus, Tony Hoare on separation logic, Simon Peyton Jones on
Haskell and type systems, Alan Mycroft, Jon Crowcroft advising the creation of
the Raspberry Pi, Ian Pratt and Steven Hand on the Xen hypervisor, Peter
Sewell on a rigorous (machine-checked) definition of systems and protocols.

But me, I didn't understand any of it, at least in the first year! I had never
read a non-systems paper in my life; I didn't know the meaning of academic
rigor. Those four years were the hardest of my life. Age was a factor. There
was a distinct difference in stamina. Later I discovered that it was more fear
that stymied my progress. I used to love math in my younger days, but I
realized that lately, I was putting the more formal books back on the shelf
"to get back to later". In contrast, Younger kids (and particularly the ultra-
bright ones who land up at Cambridge) had no such fear at all because their
formative math education had been top-notch.

On the other hand, my age served me well elsewhere. I had money, I was happily
married (and still am, thank you!), so half my brain wasn't stuck on
relationship issues. I didn't have to impress my peers with my ability to
drink. I could travel freely to conferences on my own dime. I could quit any
time (or so I told myself; I'd probably have regretted it if I had quit). It
helped that we didn't have kids and that my wife was immensely supportive.
There was another "mature" student also with the same background and outlook
as me who'd sold his company for a few tens of millions (he was on the
original Pentium design team!) and come in search of knowledge. He had two
kids. He had a tougher time than I did not because of his family, because of
the choice of his subject (quantum computing). But ultimately, he too has done
well from himself.

Any how, I knew all along I would be very glad when the program ended, on two
different axes. First, that the hard period was behind me. Second, that all
this learning would fundamentally change me. I'm happy to say it did. I'm
happy to report that I fared well -- my dissertation was nominated for a
British Computer Society dissertation award. Privately, I felt I was trained
just well enough to _start_ a PhD program. That imposter syndrome never left
me! I have met many many PhDs who have felt that. I wish someone had counseled
me on it.

I'll leave you with this. The amount I learnt makes my toes curl with
pleasure. Then there's the meta-learning. When you spend so much time reading
papers and rigorous arguments, you begin to have confidence in reading a paper
completely beyond your ken, and getting to its essence. That's the real value.

~~~
elteto
Thank you so much for the detailed answer! Such an inspiring story and told
with such humbleness. You are inspiring.

Your note on "fear" holding you back rings a bell. As I have aged (and I have
not aged that much!) I have noticed the same. And I feel like it gets worse
every year. I haven't found a better solution than just jumping in outside my
comfort zones, but alas, this is so hard that I find myself barely doing it.

But people like you remind me that it can be done! And this is very important
because knowing that someone else did it cancels some portion of that internal
discourse of "You can't do it.".

Thanks again.

~~~
sriram_malhar
Very kind of you to say this. Happy to hear that my 99% perspiration is your
1% inspiration :)

------
Lammy
The contents of the book are wonderful, but I can't stop admiring the TeX
typesetting itself. It's startling how effortless it is to read this document
compared to 99% of Web-based reading I do every day. The things that stand out
to me most are the lack of vertical whitespace "rivers" due to the smart
kerning & tracking, the small-caps for technical initialisms like 'HTML', and
the beautiful beautiful Garamond of the body text. I should use LaTeX more :)

~~~
musicale
TeX isn't so bad when you use a typeface other than the eyeball-scarring,
madness-inducing Computer Modern.

~~~
svat
Computer Modern looks decent in print, which it was designed for (pick up any
book by Knuth, _not_ a modern book typeset with LaTeX). It looks less good on
screen, partly because on-screen output barely existed at the time it was
designed, and partly because what you've seen is probably not really Computer
Modern:
[https://tex.stackexchange.com/a/361722/48](https://tex.stackexchange.com/a/361722/48)

~~~
Mikhail_Edoshin
A similar story happened to Courier, which, afaik, was digitized from the
designs meant for printing and thus accounting for print ink gain. On its own
the the font's forms look too thin too.

------
nealabq
The authors also make the book available at MIT press, but not as PDF. Thanks!

[https://mitpress.mit.edu/sites/default/files/sicp/index.html](https://mitpress.mit.edu/sites/default/files/sicp/index.html)

[https://mitpress.mit.edu/sites/default/files/sicp/full-
text/...](https://mitpress.mit.edu/sites/default/files/sicp/full-
text/book/book.html)

Other versions, again not as PDF:

[https://news.ycombinator.com/item?id=13918465](https://news.ycombinator.com/item?id=13918465)

[https://news.ycombinator.com/item?id=19049834](https://news.ycombinator.com/item?id=19049834)

[https://news.ycombinator.com/item?id=3034587](https://news.ycombinator.com/item?id=3034587)

[https://news.ycombinator.com/item?id=10178544](https://news.ycombinator.com/item?id=10178544)

~~~
libria
Thanks for the links.

>
> [https://news.ycombinator.com/item?id=3034587](https://news.ycombinator.com/item?id=3034587)

This one is a link to a .mobi/Kindle version, for anyone searching.

------
chrisa
The original course videos are on youtube too! I found them a bit easier to
watch than reading the book:

[https://www.youtube.com/watch?v=-J_xL4IGhJA&list=PLE18841CAB...](https://www.youtube.com/watch?v=-J_xL4IGhJA&list=PLE18841CABEA24090)

~~~
globnomulous
I just started the first video. This guy is a phenomenal lecturer. Thank you
for posting the link!

------
formalsystem
Anyone else feel like this book is really overrated? I've enjoyed the
classical mechanics book by the same authors a lot more since it goes over a
particularly good application where functional ideas shine

~~~
jholman
I do think it's a book of quality, which admittedly is a relatively rare
category. But yes, I think it's _hugely_ overrated, especially when
characterized as the "one true best way" or something, to learn programming.

(Note that I am commenting on the first half or so of the book, never having
gotten past that. Maybe the last half of the book is the best book ever
written, I do not know.)

For one thing, half of the examples are calculus. If you are an engineering
graduate student with experience in fortran (which is the original intended
audience, just watch the original lectures), that's a _great_ idea. For humans
with little to no formal mathematical training, it's pretty poor. I once
helped to lead a study group on SICP with half a dozen highly motivated
junior-to-intermediate programmers, and everyone found the exercises insanely
hard for this reason. (Of that group, btw, I would say one student greatly
benefited, two dropped out, and the rest got some benefit.)

For second, I strongly disagree with the claim that functional is a "more
natural" or "more intuitive" way to think about programming. I've helped teach
hundreds of adult students to program (and become working developers), most of
them with no prior experience, and I would say that less than 1% of them found
recursion anything other than a crushing mindfuck. Whereas more than half of
them took to imperative programming in a much shorter length of time (a few
weeks, say). (None of these students were given SCIP, tho.)

Based on the perennial praise in threads like this, I concede that _must be_
those in the world for whom it's a great book, and that's great. I am firmly
convinced that these people are atypical.

On the other hand, it _is_ a book that concerns itself with important
questions, where IMO most books do not, so that alone makes it, as I said at
the beginning, a member of a rare and distinguished category.

~~~
branweb
Not sure about the video lectures, but I'm fairly certain the original course
was taught to MIT undergrads as an intro to CS and EE. See
[https://people.eecs.berkeley.edu/~bh/sicp.html](https://people.eecs.berkeley.edu/~bh/sicp.html)
and
[https://mitpress.mit.edu/sites/default/files/sicp/course.htm...](https://mitpress.mit.edu/sites/default/files/sicp/course.html).

I don't totally disagree with you btw. Pretty sure in that interview with Hal
Abelson someone mentioned above, he admitted the book leaned a little heavily
on calculus because all MIT freshmen had to take that course, so it seemed a
natural source for examples. Perhaps not as natural to someone who hasn't
taken a calculus course in a decade (me). I still got a lot out of the book
though.

~~~
jpmattia
> _but I 'm fairly certain the original course was taught to MIT undergrads as
> an intro to CS and EE_

This is correct: The course number was 6.001 and was a requirement in EECS in
those days. I took it while SICP was still only notes in 1983, and the notes
ended up as a book shortly after.

~~~
raible
Actually, the course number back then was 6.031. I only become 6.001 later on.

~~~
jpmattia
Must not have been clear in my post: It was 6.001 in 1983, when I took the
class with Sussman and Abelson. The book was still not published, and they
gave it to us as xeroxed notes.

------
neilv
I'm glad about SICP being promoted and accessible to people around the world.

Maybe 20 years ago, the authors put the full text for their textbook on the
Web, as HTML. This made it more accessible to people, and set an early
precedent for freely-available top textbooks on the Web (even though they
presumably could've made more money by only selling print copies).

Then, since not all students' computers could run a Web browser, Lytha Ayth
manually converted the HTML to Texinfo, with ASCII art of all the figures.

If one has the means to buy the printed book, doing so would seem like a nice
gesture, in response to the authors' and publisher's generous sharing and
example-setting.

------
ashton314
This book more than any other has made me the programmer I am. The hardest
part about telling people about this books was how to find it. +1 to the guy
with the short URL to this PDF.

~~~
sdwa
I'm a relative late comer to programming and having read the first 3 chapters
within a year or two of starting to program "in earnest", I echo your
sentiments. I feel like it really taught me how to think like a programmer. I
should really finish it.

------
acgan
Heavily inspired by SICP, I am co-teaching CS43 during Stanford Winter
quarter.

Code:
[https://github.com/stanfordhaskell/cs43](https://github.com/stanfordhaskell/cs43)
Site: [https://stanford-lambda.gitlab.io](https://stanford-lambda.gitlab.io)

All of the course materials will be open-sourced @
[https://github.com/stanfordhaskell/cs43](https://github.com/stanfordhaskell/cs43)
(previously Clojure, now Haskell!)

If anyone has concrete suggestions on how to improve our curricula, I would be
happy to take any suggestions.

~~~
26702670
Where might I find the class materials from when you were using Clojure?

------
jcoffland
We read SICP back in college. I loved it but I remember a lot of moaning from
my classmates. I wish I had more practical need for Lisp because I loved
programming in it.

My favorite part of SICP is where a streaming lazy evaluated version of sin()
is defined using cos() which is defined using sin().

------
zelphirkalt
Pictures in the PDF are garbled. The Version built from
[https://github.com/sarabander/sicp-pdf](https://github.com/sarabander/sicp-
pdf) is much better.

~~~
susam
The PDF in this post is built from [https://github.com/sarabander/sicp-
pdf](https://github.com/sarabander/sicp-pdf). See
[https://opendocs.github.io/sicp/](https://opendocs.github.io/sicp/) for more
details. If you have a direct link to a better rendering of this book, could
you please share it? I would like to see which pages are rendered better in
it.

------
Recursing
The ebook on [https://github.com/sarabander/sicp-
epub/](https://github.com/sarabander/sicp-epub/) seems to be inaccessible,
trying to fetch it via git lfs gives "This repository is over its data quota.
Purchase more data packs to restore access."

Does anybody know where I can/should host a copy?

~~~
aplaice
> Does anybody know where I can/should host a copy?

With torrent or IPFS, perhaps? (Given the CC BY-SA license, this would be
completely legal.)

Also, GitHub's behaviour wrt to LFS is really disappointing — the epub file
could have been stored normally with git (its size of ~ 3 MB is far less than
the hard limit of 100 MB), in which case there would have been no issues of
exceeding a data quota...

For comparison, the linked PDF is normally indexed with git, despite weighing
at 7.7 MB.

Since LFS is supposed to reduce total bandwidth use for the hoster, GitHub is,
in effect, punishing people for reducing GitHub's bandwidth usage...

Actually, the linked PDF is originally[0] by the same author as the EPUB
version you linked. However, in the original repository[0] the PDF is managed
with LFS, so it's inaccessible...

[0] [https://github.com/sarabander/sicp-
pdf](https://github.com/sarabander/sicp-pdf)

------
dmitryminkovsky
> You are probably reading it in an Info hypertext browser, such as the Info
> mode of Emacs. You might alternatively be reading it TEX-formatted on your
> screen or printer, though that would be silly.

I'm read a PDF :/

~~~
ilammy
I guess that’s talking about reading the TeX markup itself.

------
jwilk
SICP = Structure and Interpretation of Computer Programs

------
morty_s
This book is both art and magic.

It is poetic in its treatment of introductory computer science.

------
golergka
I first found out about this book from someone reposting on HN a few years
ago, and decided to explore it because of discussion in the comments. It
significantly influenced me as a developer, and I still point junior
developers toward it as one of the main books they should read (and by read, I
obviously mean go through excercises) about the craft. Thanks for reposting
this again.

Please, do it every couple of months.

------
zabzonk
The foreword of this book must be the only one I have ever read where I
disagree with almost every statement it makes. This doesn't encourage you to
carry on, but I have (first couple of chapters), and find the whole structure
and direction of the thing inimical to me.

It seems to me that this is somewhat like the "dragon book" \- people were
exposed to it before they had read other better books.

~~~
madhadron
> The foreword of this book must be the only one I have ever read where I
> disagree with almost every statement it makes.

I just went an reread the forward, and nothing struck me as controversial.
Could you elaborate a bit?

------
linuxhansl
Ohh... This was one of the books we used when I studied computer science.
Great book and it brings back memories.

State is only introduced on page 294!!

------
tejaswidp
I read the book a while ago, It was quite an eye opener. The one thing I
haven't been able to go through was the last chapter, building a "metacircular
evaluator. I saved it for a time when I understood compilers/interpreters
better.

Diving into codebases, like the octave and supercollider interpreters
recently. might be quite interesting to re-read it.

~~~
inimino
My experience of the last chapter is: it's not as satisfying or as easy as the
previous chapters where the solutions to exercises are self-contained. It's
also less suited to doing outside of school, if you only have nights and
weekends and must re-establish the context every time you sit down again with
the book. However, it is still worthwhile, and definitely doesn't require any
previous compiler/interpreter exposure (in fact, it might be an advantage to
come in fresh, as a lot of what you do in chapter 5 is really easier than you
might think if you have exposure to advanced compiler techniques).

------
yumraj
Question: will you recommend SICP as an intro to programming book for say high
schoolers?

Or, does it assume some prereqs?

~~~
harry8
[http://people.eecs.berkeley.edu/~bh/ss-
toc2.html](http://people.eecs.berkeley.edu/~bh/ss-toc2.html)

Bills itself as an intro to SICP for high schoolers.

~~~
jedberg
Amusingly, the author of that book (Brian Harvey) was my professor for my
first CS class, in 1996, where we used this very edition of SCIP.

------
r-s
I went through SICP a few years after finishing my computer science degree and
enjoyed it greatly. It was a great experience and I think made me quite a bit
better developer. I also became a huge fan of lisp which I think is one of the
side effects of this book.

------
8458e112e7b2
I would like to tackle SICP. I am a programming novice and would like to
improve my skills.

The last time I did any kind of math that was more complex then simple
operations was a long time ago and math was never my strong subject.

I have pretty much forgotten any kind of algebra, calculus etc I learnt. So
assuming I know very little math, what is the best way/book/method to learn
algebra/calculus etc to tackle SICP ? I would like to do that before I begin
my SICP journey.

Any suggestions appreciated!!

~~~
Scarbutt
[https://openstax.org/subjects/math](https://openstax.org/subjects/math) are
pretty good.

Start with the Pre-Algebra book, then Algebra and Trigonometry, and then
Calculus volumes, the first two volumes are more than enough for SICP.

This can take you two years depending on your time.

------
watersb
My favorite class in college, also the very first class in our Computer
Science curriculum. I still use it.

~~~
blendo
When I took it at Boston University in 1987, it was my last class for the
BS/CS. And one of the toughest because I had so much imperative/side-effect
ridden code to unlearn.

Does the MIT Python replacement go "functional first"?

------
ryanmarsh
This is so great. I've been working from a terrible scanned copy for years.

~~~
tobinfricke
The full text has been freely available online for years:

[https://mitpress.mit.edu/sites/default/files/sicp/full-
text/...](https://mitpress.mit.edu/sites/default/files/sicp/full-
text/book/book.html)

Also, the physical book is available for only $40.

~~~
fierarul
Last I looked in Europe the price is more like $65, about the same as a
Raspberry Pi 4 with 4GB of RAM.

I know technical books are expensive and the book has 688 pages but it seems
expensive.

If somebody wants to ship their used SICP book in Romania I would love to take
it. It's on my wish list since forever.

~~~
molteanu
Check some second-hand online stores like abebooks (mostly ships from US so
it's way too expensive) or from biblio which has more accessible shipping
rates [1]

Salutari din Romania!

[https://www.biblio.com/search.php?author=&title=structure+an...](https://www.biblio.com/search.php?author=&title=structure+and+interpretation+of+computer+programs)

------
wbillingsley
One of my favourite books, by some of my favourite authors.

------
susam
Easy-to-remember short URL created with GitHub URL shortener:
[https://git.io/sicp.pdf](https://git.io/sicp.pdf)

