Most active commenters
  • chongli(4)

←back to thread

462 points pieterr | 13 comments | | HN request time: 0.805s | source | bottom
1. abeppu ◴[] No.42158611[source]
> In fact, I’d go further and say that it’s the only computer science book of that age that I’d happily and usefully read again without it being just for historical interest: the content has barely aged at all. That’s not all that unusual for mathematics books, but it’s almost unheard of in computer science, where the ideas move so quickly and where much of what’s written about is ephemeral rather than foundational.

I recall that when MIT stopped teaching with SICP, one of the main claims was that programming now is often not about thinking abstractions through from first principles, and creating some isolated gem of composing definitions. Instead, we interact with and rely on a rich ecosystem of libraries and tools which often have individual quirks and discordant assumptions, and engineering then takes on a flavor of discovering and exploring the properties and limitations of those technologies.

I think now, (some) people also are at the point of not even directly learning about the limitations and capability of each tool in their toolbox, but leaning heavily on generative tools to suggest low-level tactics. I think this will lead to an even messier future, where library code which works on (possibly generated) unit tests will bear some fragile assumption which was never even realized in the head of the engineer that prompted for it, and will not only fail but will be incorporated in training data and generated in the future.

replies(3): >>42158671 #>>42158711 #>>42159102 #
2. FredPret ◴[] No.42158671[source]
I think just like traditional engineers have to learn physics, computer people should learn these fundamentals for exactly the reason you outline.

Then, when you hit the job market, you learn the ecosystem of what other engineers have built and you work in that context.

In this way, you can eventually reach extreme productivity. Just look at humanity's GDP over the last 200 years.

3. chongli ◴[] No.42158711[source]
I recall that when MIT stopped teaching with SICP, one of the main claims was that programming now is often not about thinking abstractions through from first principles, and creating some isolated gem of composing definitions.

Which is a category mistake that they actually address in the lectures. SICP is not a programming course, it’s a computer science course. Computer science is not about computers, let alone programming, just as geometry is not about surveying instruments and astronomy is not about telescopes.

When they stopped teaching SICP — in response to the pressure to teach more modern tools — they abandoned their scientific principles to satisfy commercial concerns. They stopped teaching computer science and became a vocational school for the tech industry.

replies(5): >>42159290 #>>42159490 #>>42159706 #>>42163180 #>>42164796 #
4. chambers ◴[] No.42159102[source]
I've witnessed how abandoning first principles undermines the evolution of a system. If our mental model of a system is not formalized into first principles (i.e. a high-level specification), then successive generations of engineers will have to re-learn those principles through trial-and-error. They'll introduce mutations and dependencies between the mutations-- and when they leave, the next generation of maintainers will repeat the process. Generations of mutations eventually create a brittle, calcified creature of a system which people fear to touch with a ten foot poll.

I imagine people who were taught SICP would be more respectful, if not inclined, towards a formal articulation of a system's principles.

This philosophy is described in depth in the original 1985 article https://gwern.net/doc/cs/algorithm/1985-naur.pdf and in more accessible language in https://www.baldurbjarnason.com/2022/theory-building/. You can also observe engineers opposing/misunderstanding the need for specification in https://news.ycombinator.com/item?id=42114874

5. PittleyDunkin ◴[] No.42159290[source]
> SICP is not a programming course, it’s a computer science course.

I don't see what you mean by this at all. Furthermore this doesn't strike me as a useful distinction when a) it doesn't cover most topics labeled by consensus as "computer science" and b) it very clearly does teach a great deal about programming.

Why not say it teaches computer science and programming skills? Why do these have to be exclusive? There's obviously a great deal of overlap in general.

replies(1): >>42161964 #
6. imglorp ◴[] No.42159490[source]
The quote was about "programming by poking" which I take as highly relevant to actual distributed software. It meant (1) systems are more built by integrating many components, and (2) for many reasons, the components are not understood by the integrator and (3) they must resort to experimentation to validate how things actually work.

Unless you have a TLA+ model of all your components and how they interact, I would argue you don't understand your distributed system either, for all inputs.

https://web.archive.org/web/20160505011527/http://www.poster...

7. medo-bear ◴[] No.42159706[source]
> They stopped teaching computer science and became a vocational school for the tech industry.

Sheldon always said that MIT is a trade school

8. chongli ◴[] No.42161964{3}[source]
I don't see what you mean by this at all

The goal of the course is not to teach programming skills, it's to teach computer science. The difference is explained quite thoroughly in the lectures. One might even say that answering the question "what is computer science?" is one of the core goals of the course and a major part of the philosophy of the professors who created the course.

The argument being made by the comparisons to geometry and astronomy is that in any discipline there is a difference between means and ends: what you are attempting to achieve is distinct from the tools you're using to achieve it. Furthermore, it's a mistake to believe that the discipline is all about the tools. No, the tools are the means, not the end.

replies(1): >>42162046 #
9. PittleyDunkin ◴[] No.42162046{4}[source]
> The goal of the course is not to teach programming skills, it's to teach computer science.

Who cares what the goal is? It teaches programming skills too. The intent is irrelevant and for the most part so too is the distinction (outside the american education system, anyway).

> Furthermore, it's a mistake to believe that the discipline is all about the tools.

Who outside the american education gives a damn about "the discipline", if that refers to anything meaningful outside the american education system in the first place? It's arbitrary and has no purpose or benefit aside from organizing the education system. This is a course that miraculously, against all odds, manages to teach useful skills in addition to jargon patterns of thought. Why not celebrate this?

Anyway, programming is a useful pedagogical tool for teaching CS. CS is a useful pedagogical tool for teaching programming. To brag about not teaching one is just hobbling your own insight into the value you provide students.

I myself have a CS degree from a prestigious institution and largely enjoyed my education. But this attitude you alude to is just jerking off for the sake of jerking off. Particularly in the case of SICP.

10. abeppu ◴[] No.42163180[source]
I'm fine with the claim that CS is not about computers as astronomy is not about telescopes, but there are pure CS courses that don't cover programming and do cover automata, turing machines, computability, complexity etc and don't cover programming. SICP is about programs in a running language rather than abstract idealized computations, and is centered around reading and writing programs as examples. I think its success stems from its grounding in exhibiting such examples that ordinarily would not become accessible to students so quickly.
replies(1): >>42164534 #
11. chongli ◴[] No.42164534{3}[source]
If you watch the lecture videos they make it a point of emphasis that they’re not interested in teaching LISP and that the course is not a LISP course. To show running programs they had to select some programming language. This was a regrettable concession because some students will inevitably think the course is about that language and miss the general principles they’re trying to teach:

1. Primitive operations

2. Means of combination

3. Means of abstraction

These are the three main features of programming languages, according to Sussman and Abelson. They wanted us to stop bikeshedding over the superficial details and just look at a tool for these 3 features, then be able to implement the algorithms and data structures we already know. This is how you become a wizard who can cast magic spells.

12. michaeldh ◴[] No.42164796[source]
You don't think they can address both needs? What are non-MIT schools teaching when they teach CS if it's not SICP? Is everyone else just a vocational school?
replies(1): >>42167059 #
13. chongli ◴[] No.42167059{3}[source]
SICP isn’t the only way to teach CS, obviously, but I’ll be honest with you: some schools aren’t even trying. They just offer Java and Python programming courses and call it a day.