[HN Gopher] How to recommend books, or, stop recommending SICP
___________________________________________________________________
How to recommend books, or, stop recommending SICP
Author : eatonphil
Score : 13 points
Date : 2022-01-31 17:38 UTC (5 hours ago)
(HTM) web link (notes.eatonphil.com)
(TXT) w3m dump (notes.eatonphil.com)
| lispm wrote:
| I think SICP is extremely well written and worth a read. I know
| its contents are slightly controversial (Maths! Functional
| Programming! Scheme! Lots of Silly Parentheses!) and now a bit
| oldish - the course on which this book is based was created
| around 1980. There are roughly a dozen books which try to be an
| improved version of SICP. Still, it's a classic and it has
| inspired a lot of people.
|
| The original group for which the book was written are computer
| science students. As such it is only partly about learning
| 'Scheme' (actually only a small subset) or 'Programming'.
|
| Originally one wanted to teach how to do software engineering
| from the ground up: build an evaluator, a compiler, a register
| machine, ... This style now is a bit out of fashion and the
| education switched to a different approach: assemble available
| Python modules. Still I like the SICP approach to give students a
| deep understanding how to build up from basics.
|
| In the Lisp world, there are books like Winston/Horn 'Lisp'
| (which adapts some content from SICP) or 'PAIP' from Peter
| Norvig, which are also challenging. 'Lisp' is more interested in
| teaching actual programming in a larger language and 'PAIP'
| teaches programming by exposing students to larger programs and
| larger code examples. Still both give the students, like SICP, a
| lot of inspiration to experiment with the provided topics and
| examples.
|
| There are other books/courses based on Logo, Scheme, Oz, etc.
| which address some of the complaints about SICP.
|
| SICP now is also available in a JavaScript edition.
|
| https://en.wikipedia.org/wiki/Structure_and_Interpretation_o...
| 0x7E3 wrote:
| I'm glad it was recommended to me.
|
| > If you love challenging books, you are neither the norm nor the
| audience of this post.
|
| If you read books on programming and computer science in general
| you are not the norm, and perhaps shouldn't be the audience of
| this post either?
|
| > the prose itself is so dense and archaic
|
| I'm not sure what in particular you feel is archaic, but density
| is a selling point here. One of the things that makes SICP
| attractive is the high information density. There are already too
| many books that are full of fluff that appears to exist only to
| hit a page count.
|
| > it requires such a level of competence in math and physics
|
| Can you give some specific examples of the math and physics that
| you think are beyond the capabilities of a bright high school
| graduate (that seems like a reasonable minimum bar to expect for
| someone picking up a book targeted at freshmen at MIT)?
| emptysongglass wrote:
| It's been a few years since I tried to breach it but I'm your
| normative (arts education) audience for this and SICP's
| frontloading of higher-level math was a showstopper for me. I
| won't point you to examples but will say that How to Design
| Programs succeeded where SICP failed. Gregor Kiczales' How to
| Code, a MOOC based on HtDP is a masterwork of teaching that
| starts with the student drawing basic shapes and filling them
| in with color.
|
| I think people who were raised on the more technical fare often
| have a blindspot for how unapproachable programming can be to
| liberal arts people like me. The assumed knowledge can be
| greatly discouraging. We so often need a new vector that speaks
| to how we learned to conceive of the world.
| bkolobara wrote:
| > Can you give some specific examples of the math and physics
| that you think are beyond the capabilities of a bright high
| school graduate (that seems like a reasonable minimum bar to
| expect for someone picking up a book targeted at freshmen at
| MIT)?
|
| Just look at some of the examples right at the start of the
| book, in the first chapter:
|
| > This section describes two methods for checking the primality
| of an integer n, one with order of growth Theta(sqrt(n)), and a
| 'probabilistic' algorithm with order of growth Theta(log n).
|
| > ...
|
| > Fermat's Little Theorem: If n is a prime number and a is any
| positive integer less than n, then a raised to the nth power is
| congruent to a modulo n.
|
| > ...
|
| > When we first introduced the square-root procedure, in
| section 1.1.7, we mentioned that this was a special case of
| Newton's method. If x -> g(x) is a differentiable function,
| then a solution of the equation g(x) = 0 is a fixed point of
| the function x -> f(x) where [complex formula] and Dg(x) is the
| derivative of g evaluated at x.
|
| As someone who has a masters degree in CS, I agree with OP.
| People mostly recommend SICP to beginners because they want to
| sound smart, not because it's a good intro to programming.
| 0x7E3 wrote:
| > This section describes two methods for checking the
| primality of an integer n, one with order of growth
| Theta(sqrt(n)), and a 'probabilistic' algorithm with order of
| growth Theta(log n).
|
| The book explains order of growth a few pages before this
| example, so the only assumed knowledge here is what a prime
| number is, which seems very reasonable.
|
| > Fermat's Little Theorem: If n is a prime number and a is
| any positive integer less than n, then a raised to the nth
| power is congruent to a modulo n.
|
| That's the concise definition of Fermat's Little theorem,
| that he then proceeds to explain in detail. Again, not
| presupposed knowledge, but something new to learn. He
| explains congruent modulo, so you are expected to know what
| prime numbers are, and what positive integers are. Again, CS
| books from MIT are not for you if you don't know those two
| things.
|
| > When we first introduced the square-root procedure, in
| section 1.1.7, we mentioned that this was a special case of
| Newton's method. If x -> g(x) is a differentiable function,
| then a solution of the equation g(x) = 0 is a fixed point of
| the function x -> f(x) where [complex formula] and Dg(x) is
| the derivative of g evaluated at x.
|
| This one assumes that you understand the material from
| section 1.1.7. I think you've succeeded in making a case for
| reading the book and completing the exercises in order, but
| not that it places unreasonable expectations on its reader.
| solarmist wrote:
| > Can you give some specific examples of the math and physics
| that you think are beyond the capabilities of a bright high
| school graduate (that seems like a reasonable minimum bar to
| expect for someone picking up a book targeted at freshmen at
| MIT)?
|
| I'm going to stop you there. If you think that jumping into
| approximating square roots via newton's method is not a "high
| level of competence in math and physics" then you have lived in
| a completely different world than I did. And the issue isn't
| knowledge (that's shared in plenty of detail in the book), but
| the maturity of mathematical reasoning.
|
| The level of calculus taught to me in high school (and college)
| was at the same level as Algebra and Trigonometry. It was
| taught as a tool for engineers to use, not as a framework for
| building your own tools (proof-based calculus). The only people
| around me that reached that level of mathematical maturity were
| Maths, Physics, and Computer Science majors. And often it
| wouldn't "sink in" until around junior year for them.
|
| > The \sqrt(x) = the y such that y >= 0 and y^2 = x.
|
| This is an extremely dense mathematical sentence that requires
| a high level of mathematic maturity to understand that the
| author isn't just throwing that out randomly. It wasn't until I
| took a formal proofs/introduction to analysis course that it
| sunk in that a mathematical definition isn't just a sentence
| describing a new piece of vocabulary but is instead a highly
| technical engineering spec for a mathematical tool.
|
| And until I made that transition I couldn't follow the flow of
| the logic, implications of the ideas/problems presented, or see
| the bigger picture of how these things fit together. They were
| technically accessible to me (I could read and understand the
| words and problems), but they completely lacked coherence to
| me.
| snicker7 wrote:
| Book recommendation lists are about inflating one's ego. I would
| look uncultured if I recommended the books I actually enjoy and
| derive value from (or, more poignantly, actually read).
|
| I /highly/ recommend SICP as a first introduction to programming.
| eatonphil wrote:
| Now I really want to know what you're reading.
| gabrielsroka wrote:
| The way I think about this is you have to have the appropriate
| prerequisites, whether it's a technical book or not.
|
| Here's a loose analogy: you shouldn't take college calculus if
| you don't already know arithmetic and algebra. And maybe you
| shouldn't read SICP if you haven't taken its prerequisites
| either.
| bitwize wrote:
| I freakin' love SICP. It has the same "energy", as they say, that
| Scheme itself does. It's succinct, and yet it covers nearly all
| of the big concepts of programming, starting from a nucleus of a
| few key ideas (including, especially, lambda). It also explodes
| some of the myths underlying programming -- and by myths I mean
| "stories we tell to describe the shape of the universe", not
| "utterly false things a lot of people think is true". One of
| those myths is OO. You can see how OO works through SICP, and you
| can build your own OO system in Scheme, so there is nothing
| irreducibly fundamental about OO; it doesn't even need a language
| that explicitly supports it!
|
| But uh, yeah, all of y'all recommending SICP as an intro to
| programming need to stop. Your target audience, if they take up
| programming at all, as a hobby, as a profession, or as a way to
| help them do their real work, is probably not going to use
| Scheme. They're not going to give a single flying fuck that a
| small language nucleus can give rise to a whole kundalini of
| programming concepts and approaches. And when they see the
| unrelenting mathiness of SICP, they're going to doze off. Plenty
| of copies of TAOCP sit unread on bookshelves for this same reason
| also.
|
| I've gone from being a Lisp, Jazz, Aikido guy to a Visual Basic,
| Punk Rock, MMA guy. At the end of the day, what counts is getting
| it done with a minimum of fuss, not beauty or orthogonality or
| any of those other concepts. If you want to teach people
| programming, teach them to program things they care about in a
| language they are likely to use.
| Turing_Machine wrote:
| > But uh, yeah, all of y'all recommending SICP as an intro to
| programming need to stop. Your target audience, if they take up
| programming at all, as a hobby, as a profession, or as a way to
| help them do their real work, is probably not going to use
| Scheme.
|
| Some of us are working on that, and that's all I'm gonna say
| right now. And yeah, maybe that's not going to work out. Anyone
| see a white whale around here?
|
| > Plenty of copies of TAOCP sit unread on bookshelves for this
| same reason also.
|
| I'd say that TAOCP is more of a reference work than a course
| textbook. It's a completely different kind of book to SICP.
| solarmist wrote:
| I'm sorry but this post is ridiculous.
|
| By following the advice in it no one would ever recommend a book
| that requires knowledge/reasoning skills beyond a high school
| level.
|
| This goes for literature too.
|
| I also call bullshit on his definition of "Goals". There are
| plenty of books whose content is valuable enough that the work
| put into extracting the information is more than worth the
| effort.
|
| The correct message is to understand who your audience is before
| you make any recommendations.
___________________________________________________________________
(page generated 2022-01-31 23:02 UTC)