Live data from Hacker News

SICP is Under Attack

vedantk.tumblr.com

1–10 of 207 posts

Re: SICP is Under Attack

#2
The obvious solution: rewrite SICP to use Python rather than Scheme. It is CC attribution and non-commercial, so I don't see any legal barrier to outsider revision.

Re: SICP is Under Attack

#3
So SICP is awesome. The article makes that assertion in the third paragraph, and then continues making that point for most of the rest of the article. It does not, however, make a good, convincing argument for why "Dive Into Python" is significantly worse, especially as an introductory text.

> It’s just.. it’s just not the same.

Never say this. Horrible people (like me?) will point to it as you admitting that your argument is founded on nostalgia for the way things were, regardless of how strong the rest of your argument is.

Re: SICP is Under Attack

#4
Even MIT abandoned SICP for its introductory course in favor of Python. But I believe it's featured in its second course, no? I don't consider that a mistake. If you're getting rid of it from the curriculum altogether, though, that's a mistake. This article didn't say if that was the case or not. (Also the point of SICP being language agnostic is fairly false. I mean sure you can implement iteration as recursion in other languages, but without tail call optimization it's going to be ugly. Then there's the whole "code as data" problem that's not easily extendable outside the s-exp world. I guess one might say the important, deeper parts of SICP work across languages, but is there an equivalent somewhere to SICP that's not in Lisp?)

Re: SICP is Under Attack

#5
Publishing a Python version of SICP would solve the problem. Sure, you can't always translate Scheme to Python with ease, but even a smaller, modern edition of SICP written in a Pythonic way would be extremely beneficial.

Re: SICP is Under Attack

#6
post #3

So SICP is awesome. The article makes that assertion in the third paragraph, and then continues making that point for most of the rest of the article. It does not, however, make a good, convincing argument for why "Dive Into Python" is significantly worse, especially as an introductory text. > It’s just.. it’s just not the same. Never say this . Horrible people (like me?) will point to it as you admitting that your a…

"Stop. Take a deep breath. Think about all that you have just discovered (or if you have already discovered it all, reflect on how awesome it is). By page 45 of SICP, you will have;

    Translated recursive definitions into iterative processes
    Examined the differences in the space requirements of various processes
    Used tail-recursion to implement efficient iterative procedures
    Seen that iteration can be thought of as a special case of recursion
    Realized that iterative processes can be restarted easily by capturing and restoring their state variables
    Given thought to complexity, optimization, and state transition theory
    Been encouraged to explore creative solutions to challenging problems
    Learned the basic syntax and semantics of Scheme
    Observed a quasi-religious experience
What will you have accomplished by page 45 of Dive Into Python? Don’t hold your breath. I’ve looked into it. You’ll be learning how to use the and-or “trick” to make simple programs difficult to read. Soon afterwards you’ll be exposed to Python’s intentionally crippled lambda statement."

"Scheme is considerably less complicated and idiosyncratic than Python. It’s simplicity and consistency have immense pedagogical value. It might take you anywhere from a day to a month to pick up the basics of Python. Scheme, on the other hand, has virtually no syntax. It’s definitely possible to get a solid grasp of its fundamentals in less than an hour.

Python can be used to accomplish many of the same things as Scheme. Practically anything you can do in Scheme you can do in Python, and formally speaking, the two languages are equivalent.

However, until a Python textbook emerges that surpasses SICP in teaching the core elements of programming, we should stick with Scheme."

Re: SICP is Under Attack

#8
So did anyone else look at the challenge problem, see f(n-3), f(n-2), and f(n-1), then immediately think "oh. A three element array would solve that"? Took me less than 60 seconds...

I'm a little worried that I'm so good at imperative programming, though, since it might indicate that I'm "crippled" when it comes to functional programming. I bet one of you could code circles around me when it comes to e.g. implementing a DSL.

Anyone have advice about how I'd go about "diving into functional programming"? What's a fun project to do in Haskell, for example?

I rarely approach a programming problem by trying to define functional routines. Instead, I almost always use state. Seems like a bad habit that I need to focus on breaking.

Re: SICP is Under Attack

#9
post #2

The obvious solution: rewrite SICP to use Python rather than Scheme. It is CC attribution and non-commercial, so I don't see any legal barrier to outsider revision.

That is not possible or desirable. Scheme-specific constructions are woven throughout the text -- tail calls, closures, and more.

And the main value of SICP, at least for its fans, is the pedagogic value of the language. It starts off with pure functional programming and then introduces assignment much later, and discusses its tradeoffs.

Re: SICP is Under Attack

#10
It looks like the rationale for Berkeley's change is different than MIT. At MIT the change was made because "being a better programmer" in the classical sense was deemed to be less important than other aspects of engineering. If you look at the new MIT course, you'll see that it starts with an intense overview of python and programming techniques and then moves on to apply those techniques in a variety of relevant engineering-related areas. This makes sense in the context of the MIT major given that the choice to focus on software development doesn't have to be made until later on.

(edit: also there's an interview floating around somewhere that talks about the rationale being that modern programming is different in the sense that it more often requires ability to figure out existing libraries as much as an ability to compose well-structured programs.)

Post reply on HN