Hacker News new | ask | show | jobs
by pdamoc 2246 days ago
"Do not seek to follow in the footsteps of the wise; seek what they sought." - Basho

One of the reasons that the wizards stopped teaching SICP was the fact that the world changed. Back in the 80s, most programming was done from first principles, since the middle of the 90s it switched to programming against an API.

While learning to program from first principles is still amazingly useful, it is not what beginners need because most of them will never end up programming like that.

7 comments

Love the quote (and totally agree with that), but I'm not sure MIT's decision to teach their freshers on a different track needs to apply to every kind of beginner. Needless to say, there would be a sizeable audience (of whatever background), who would find it extremely useful to learn the ideas in SICP.

All the more because they might not otherwise get the experience of rigorous constructionist thinking, and instead get too used to gluing libraries and slinging boilerplate.

More importantly, for many people, it is an eye-opening spiritual experience where they realize there is more to computing than they previously imagined, and then learn to expect more from their computing tools, and set higher goals for themselves.

I’m not so sure. SICP gives a deep understanding of programming principles like abstraction.

I agree that gluing APIs is essentially what modern programming has become, but it is helpful to have that extra understanding, especially in the long term. We don’t know how programming will look in 2050, but abstraction will remain abstraction, and I wouldn’t bet against Lisp being more popular then than it is now.

Indeed. APIs do not just appear from the void, someone has to write them for anyone to have an API to glue together.

Somewhere at the bottom, fundamental code is always present.

> Back in the 80s, most programming was done from first principles

That's one of the secret revelations in SICP. If you go in with some knowledge of assembly or C, you can quickly feel it's really high-level and not all that fundamental.

That is, until it addresses your precious "fundamental" bits and bytes, and you suddenly realise the model it is showing you is a model you can build computational platforms with, including your up-to-then understanding of registers and ALUs, and it illustrates that computing essentially has nothing to do with any specific hardware: all you need is pencil and paper and the command of a natural language, but with some parenthesis, you can optionally instruct a machine to do it for you as a bonus.

> it is not what beginners need because most of them will never end up programming like that.

which makes any "SICP in X" effort so useless: "let's make SICP understandable for people who do not want to understand it."

Actually Sussman teaches it to this day (or at least to a couple years ago). I found it one of the most enlightening classes I took.
But they might want to understand.
> since the middle of the 90s it switched to programming against an API

Yes, people always seek out libraries rather than using what's built into the language. Browser JavaScript would be a lot more efficient if people took a more SICP-like approach. Also, learning IIFEs would be easier in Scheme syntax.

What is an alternative resource that would be applicable to programming against an API?
This would fall on the opposite end of the first principles vs practical knowledge continuum of learning.

https://automatetheboringstuff.com/