← Back to context

Comment by skybrian

12 days ago

This seems like a misunderstanding of what other people find limiting. The problem some people have with this book is that it’s about computing in isolation. Scheme is an island with text-based I/O (as far as the textbook is concerned). You interact on the command line and do calculations. The ideas you learn about are deep, but internal, disconnected from other systems. There are engineering problems, but they aren’t about building systems, they’re about doing calculations or simulating systems using math. Functions and data structures and a bit of text data is all there is.

This is great in its own way, but nowadays, there’s a preference for a programming course that’s more extroverted, that lets you build interesting things by including a program as one component of a larger system. I believe even MIT switched to an introductory course where they program robots using Python, or something like that?

That’s fine, but it feels a bit like getting annoyed at a Drawing Fundamentals course for not teaching Photoshop. I understand the pedagogical advantages of fun, API-based project learning. I just reject the implication that what SICP has to teach is ivory-tower theory. It’s stuff programmers use every time their hands touch the keyboard.

> Scheme is an island with text-based I/O (as far as the textbook is concerned).

See section 2.2.4: https://mitp-content-server.mit.edu/books/content/sectbyfn/b...

> there’s a preference for a programming course that’s more extroverted, that lets you build interesting things by including a program as one component of a larger system.

Black box abstraction is a huge theme throughout all of SICP.

  • Neat! I had forgotten about that. Not entirely text-based, then.

    I went looking for what primitive drawing commands it was built on, and it’s barely mentioned:

    > The details of how primitive painters are implemented depend on the particular characteristics of the graphics system and the type of image to be drawn. For instance, suppose we have a procedure draw-line that draws a line on the screen between two specified points. Then we can create painters for line drawings.

    That’s a pretty typical avoidance of I/O. (Also, generating static pictures is rather different than reacting to input.)