Live data from Hacker News

SICP: The only computer science book worth reading twice? (2010)

simondobson.org

131–140 of 189 posts

Re: SICP: The only computer science book worth reading twice? (2010)

#131

It’s interesting, SICP and other many other “classic” texts talk about designing programs, but these days I think the much more important skill is designing systems. I don’t know if distributed systems is consider part of “Computer Science” but it is a much more common problem that I see needs to be solved. I try to write systems in the simplest way possible and then use observability tools to figure out where the de…

If you knew how to design programs you could run it all on a single box and wouldn’t have to design “systems.” I’m being slightly facetious, but only slightly. If you really think everything is solvable with arrays, you are not going to scale well and of course you’re going to need to throw a lot more hardware at the problem.

My argument is that 90% of problems can be solved with arrays, 5% of problems can be solved with memoization, 3% of problems can be solved with b-trees, and 2% of problems with other data structures.

It is good to know that solutions to the 2% exists, but what we should be focusing on is writing the simplest code possible which solves the problem and then only optimize afterwards using a profiler. God forbid you have to work on some codebase written by someone who believes they are the second coming of haskell with crazy recursion and backtracing, monads, red black trees, and a DSL on top of the whole thing.

You are right that many problems can be solved with a single box, but my argument is that you do not need fancy algorithms to solve problems on a single box. We should strive to use single boxes whenever possible to reduce complexity.

Computation is designed by humans to serve humans, we should make it as easy as possible for humans to understand. I’m probably going to start a flamewar here, but this is why simple solutions like UNIX and golang have prevailed in the past. Simple code is easy to understand and therefore it is easy to modify and reason about. Some people think simple means that you decompose programs into the smallest possible functional parts, but simple to me is a 500 line main function.

Re: SICP: The only computer science book worth reading twice? (2010)

#132

It’s interesting, SICP and other many other “classic” texts talk about designing programs, but these days I think the much more important skill is designing systems. I don’t know if distributed systems is consider part of “Computer Science” but it is a much more common problem that I see needs to be solved. I try to write systems in the simplest way possible and then use observability tools to figure out where the de…

The right book for the right problem. SICP isn't meant to teach you how to tackle fault-tolerance in a complex distributed system. Here is a textbook that talks about distributed systems (van Steen and Tannenbaum): https://www.amazon.ca/Distributed-Systems-Maarten-van-Steen/...

Yes, I have the distributed system book from van Steen :)

Re: SICP: The only computer science book worth reading twice? (2010)

#133

Earlier quoted context omitted.

> while using CS background to fully understand frameworks already existing. Most frameworks today are so complicated that you typically cannot understand them fully, and even understanding them somewhat partially is more than a full-time job.

I wish someone told me this back when I was trying to get a programming job as a self taught programmer. I would do things like try to build a simple React clone thinking it would help me overcome imposter syndrome to fully understand things from the base up, but it was pretty futile because no one really has time to wrap their head around something that big unless they are paid full time to do it.

I have a saying that program's complexity is always exactly equal to the human-intelligible complexity + 1.

If not, the developer would add one more feature. It is due to the entirely human-made aspect of this discipline.

Re: SICP: The only computer science book worth reading twice? (2010)

#134
post #13
post #10

> 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. 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 pro…

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.

Re: SICP: The only computer science book worth reading twice? (2010)

#135
SICP is the best book to read as one's first book when studying computer science.

After many years of hobbyist programming (and consuming 'structured programming' books as well as languages from Pascal to Common LISP) we used Abelson & Sussmann at my undergraduate comp. sci. course, and it was eye-opening.

It demonstrates the simplicity, beauty and interactivity of Scheme while teaching you that computer science is the layering of different kinds of abstractions (from procedural abstraction and data abstraction, over defining your own (domain specific) language and implementing a compiler for it to defining new hardware in software). All of it seems so effortless, how only true masters can make things look like.

Make sure you buy the second edition, not the first or more recent ones, however (which use Python instead of Scheme - ugh).

Re: SICP: The only computer science book worth reading twice? (2010)

#136

Earlier quoted context omitted.

> while using CS background to fully understand frameworks already existing. Most frameworks today are so complicated that you typically cannot understand them fully, and even understanding them somewhat partially is more than a full-time job.

I wish someone told me this back when I was trying to get a programming job as a self taught programmer. I would do things like try to build a simple React clone thinking it would help me overcome imposter syndrome to fully understand things from the base up, but it was pretty futile because no one really has time to wrap their head around something that big unless they are paid full time to do it.

i did build a react clone in a long weekend. but I built the first 90% that takes 10% of the time and not the last 10% that takes 90% of time.

Re: SICP: The only computer science book worth reading twice? (2010)

#137

It’s interesting, SICP and other many other “classic” texts talk about designing programs, but these days I think the much more important skill is designing systems. I don’t know if distributed systems is consider part of “Computer Science” but it is a much more common problem that I see needs to be solved. I try to write systems in the simplest way possible and then use observability tools to figure out where the de…

> What computer science doesn’t teach you is how memory caching works in CPUs.

Yes it can, and there are tons of papers about data structures to use in various scenarios to handle not just L1, L2, L3, but also NUMA. Sure, this isn’t in SICP, but claiming CS as a field completely ignores how memory works is incorrect.

Re: SICP: The only computer science book worth reading twice? (2010)

#138

It’s interesting, SICP and other many other “classic” texts talk about designing programs, but these days I think the much more important skill is designing systems. I don’t know if distributed systems is consider part of “Computer Science” but it is a much more common problem that I see needs to be solved. I try to write systems in the simplest way possible and then use observability tools to figure out where the de…

Since you emphasize designing systems over just programs, do you have any go-to resources or references ?

Re: SICP: The only computer science book worth reading twice? (2010)

#139
post #124

My favourite part of SICP and something that has stuck with me for years is the idea of "wishful programming". That is where you build something top-down by simply wishing you had the lower-level routines. Then, of course, you actually go and build those lower-level routines until you reach the bottom. I find this way of thinking works really well with test-driven development. Write a test against functionality you w…

They do that because their wish is performance and naturalness. You may accidentally wish something you don’t yet know the true nature of, and this will create a fragile mess at the bottom. It usually does, cause algorithmic nature of things is rarely intuitive. Starting from the bottom is like starting from quarks that you have rather than from “I want magic to exist”. Well it does not. You reach the bottom and ther…

So I think one of the things best avoided in life in general is extremity, in all its various guises. No single technique should be followed like scripture, but rather incorporated into ones toolkit and used where appropriate. Building top-down will get you where you want, but risks fragile underpinnings due to a lack of cross-cutting architectural guidance. But, on the other hand, bottom-up might get you the best foundations at each layer but ultimately deliver nothing of value to the users. In practice it's necessary to take a balanced approach and, of course, mistakes will be made and experience will become the guide. Like you I definitely employ the "meet in the middle" approach in practice, but what SICP taught me is how to think about starting at the top, that is, to build upon wishes.
Post reply on HN