Live data from Hacker News

SICP is Under Attack

vedantk.tumblr.com

161–170 of 207 posts

Re: SICP is Under Attack

#161
I don't know what, if anything, is going on at Berkeley, but Hal Abelson talked quite a bit about the switch from SICP to a different intro course at MIT when I interviewed him for Code Quarterly http://www.codequarterly.com/2011/hal-abelson/ and it wasn't about abandoning Scheme or "not teaching core computer science". (Well, maybe a bit less core computer science in the intro course but that was basically so that CS people could have more time later for CS without all that annoying EE stuff. And vice versa.)

Re: SICP is Under Attack

#162

This is one of a very very small number of programming-related articles I've ever been glad to read. Programming should be taught as an approach to problem-solving and structured logical thinking, not as an approach to a particular language. If you can understand the core concepts of programming, the individual languages begin to matter a lot less. Python is great. Java is great. C++ is great. But they are just tools…

"You will in all likelihood be a glue programmer: you'll rely on APIs and libraries, most of which have been written by someone else, and you will simply string them together by applying the functions that most obviously address whatever problem you're trying to solve." If you come out of a curriculum where all you learn is how to string together APIs and libraries, it's pretty much guaranteed you will end up with a…

> If you come out of a curriculum where all you learn is how to string together APIs and libraries, it's pretty much guaranteed you will end up with a job doing that, because that's all you will be qualified for.

If all you learn is how to string together APIs and libraries, then it probably wasn't a "curriculum" at all. But emphasizing certain technology domains other than programming and computer science does have its advantages, especially for program meant for engineers more than computer scientists.

It's hard to argue against the merits of SICP and I'm not going to try, but if your goal is to produce engineers that push the envelope of next generation technology beyond just computers (eg robotics, optics, advanced human-computer interfaces, gene sequencers, advanced materials, etc.) then "stringing libraries and APIs" together might be more exciting than one might assume.

Re: SICP is Under Attack

#163

Earlier quoted context omitted.

And conveniently enough for this discussion, this happens to be exercise 1.19 of SICP ( http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html... ).

Awesome! But actually I think my comment was inadvertently a bit more illuminating than the SICP exercise :-) Despite being on the web, SICP is a "traditional" textbook and doesn't bother to link to Wikipedia. Instead they use some sort of stone-age technology called "footnotes", stuffing all supplementary material right into the book as a couple lines of tiny text. So the student gets the feeling of following a twis…

Well, SICP was a printed book before being put on the web (as it is quite a few years older than it), and the version you see on the webpage is just a rendition of it in HTML. Still, I didn't know until today that you could link to individual figures and exercises, it will be even more fun to cite it in a quasi-religious, trollish way.

Also, you generalized the principle (and fused two exercises of the book in one :), or at least I'll have to believe you ;) I didn't form really much of an intuition on eigenvectors during the completely proper Linear Algebra course that I took, which is only my fault.

But I think that the exercise serves to reinforce the underlying theme that with enough attention, one can either supply or draw the insight to chip away yet one more part of the problem, to attack it from another angle, to pull it from just another direction that one had not seen before. It celebrates cleverness and knowledge, used to make complex things simple, to find the easy way out the hard way and end up better in the end, and that's partly why it's so cherished, but we all know that.

Re: SICP is Under Attack

#164
post #78

Whoa, stop. There's a lot of issues in this article. First of all, Berkeley is NOT getting rid of SICP and SICP ideas. This is flat out untrue. I'm a recent instructor for the course, and I've spoken to several TA's about this course. Below is a rough summary of what we've discussed. This should not be construed as the "official line", but take from it what you will. First, Berkeley are not getting rid of SICP. ‎For…

I have taught short programming classes for total beginners, and had the most success by following the first chapter of SICP.

1. It explains what computation is. Total beginners generally have no idea how a program executes and what it does. Explaining it using the substitution model is extremely helpful.

2. It introduces functions right away. This is a way better introduction than trying to explain type-related nonsense like "this is an integer, and this is a floating point number, and this is a string, and these are operators."

3. It avoids IO as the first thing people do. This helps avoid the problem of people thinking that printing "hello world" to the screen is equivalent to returning "hello world" from a function. Beginners should write functions which return stuff, not worry about whether the gets function (Ruby) returns something with a trailing newline.

4. Minimal syntax. Beginners have a hard time with semicolons and begin/end blocks. Python? You're kidding. Beginners don't understand whitespace indentation until they've been programming for at least several days, and making things align right is a horrible thing to throw at them.

I'm willing to accept that SICP's requirement of knowledge of basic calculus makes it a high barrier for many students, but frankly, it's the only book I've seen which introduces beginner concepts in the correct order.

Re: SICP is Under Attack

#165
post #78

Whoa, stop. There's a lot of issues in this article. First of all, Berkeley is NOT getting rid of SICP and SICP ideas. This is flat out untrue. I'm a recent instructor for the course, and I've spoken to several TA's about this course. Below is a rough summary of what we've discussed. This should not be construed as the "official line", but take from it what you will. First, Berkeley are not getting rid of SICP. ‎For…

Woah, woah, Brian's retiring? Always Felleisen at NEU...

Re: SICP is Under Attack

#166
Actually, i agree with him than SICP goes through a lot more important concepts than Dive Into Python, or any other book like this can do.

I also don't find it good that berkeley is abandonning it. But, i really think that it's not necessarily a good choice for an introductory course.

To sum up my position fast, i would say : "First teach how to program some silly things, by teaching the basis of a language (and python seems a very good choice for this). Then when students are addicted, show them some SICP"

This resonates with a lots of comments about SICP, where people who liked it are often quite experienced programmers, and not beginners (Not to say that SICP can't be appreciated by novices, but that it's probably a bit hard for an introductory course)

EDIT : Sorry, jdietrich did say something very similar to me in an earlier comment that i didn't see : http://news.ycombinator.com/item?id=2846189

Re: SICP is Under Attack

#167
post #138

Earlier quoted context omitted.

This is really the root of the problem. Computer science/programming is immature as a profession. There are not clear, broadly accepted rules for what roles exist and what requirements there are for one to fill the role. Looking at building houses (just the construction side, not the mechanical systems), we have: - Architect - Structural Engineer - Architectural Technologist - Carpenter plus construction employees no…

I am horrified by the idea of a body moving at government-speed dictating the norms I have to follow when my competitors move at internet-speed. Disclaimer: I am a professional engineer trained to design and build computers rather than program them.

Wouldn't your competitors have to follow the same norms?

Re: SICP is Under Attack

#168
post #127

Earlier quoted context omitted.

So basically you and 90% of your colleagues hate computer science. You want a vocational education in software development, which is something different.

Who offers a vocational education at an university level? Not everybody who is smart wants to be an academic.

Community colleges offer an excellent education in the programmer vocation.

Re: SICP is Under Attack

#169
post #112

I'd been programming over 20 years when I read SICP. The book was interesting. It was interesting as an introduction to functional programming. But, in my opinion, a lot of the stuff in it that is held up to be clever or informative is just difficult because the reader is expected to figure out how to to imperative programming in a functional language. A computer is an imperative device. It is a deterministic state m…

A computer is an imperative device. It is a deterministic state machine. Teaching introductory programming with a functional language is teaching students wrong, i.e. it does them a disservice. One could as easily argue that a computer is a tool, and if it helps us making better (according to some criteria) programs, why not abstract away the underlying architecture?

why not abstract away the underlying architecture

Because it would not be an abstraction of what is there. It would be the creation of an abstraction of something that isnt there: i.e. a simulation. And indeed, this is exactly the cause of my complaint.

Its like you have a machine that deals with squares. You're suggestion is to "abstract" the system into shapes, but then build a system using circles. A shape is an abstraction of both squares and circles. But a circle is not a square, and squares are what you have. FP languages and Imperative Languages are both specializations of the "programming language". But FP is not a generalization of IP. The computer is an IP machine.

When reading SICP there were several places where I had an uneasy feeling. Something was wrong and I didn't immediately know why. Then it clicked: I'm being asked to make rectilinear geometry out of circles. First time students aren't going to make it past the confusion.

And finally, if we're abstracting away the underlying architecture, why the focus on tail-recursion (an optimization), iteration vs recursion (an optimization), memoization (an optimization)... The complaint of the original article is that the alternative books are "How To Program In Language X", instead of "How to Program". However, SICP is most definitely "How to Program in Scheme".

Re: SICP is Under Attack

#170

Earlier quoted context omitted.

"You will in all likelihood be a glue programmer: you'll rely on APIs and libraries, most of which have been written by someone else, and you will simply string them together by applying the functions that most obviously address whatever problem you're trying to solve." If you come out of a curriculum where all you learn is how to string together APIs and libraries, it's pretty much guaranteed you will end up with a…

> If you come out of a curriculum where all you learn is how to string together APIs and libraries, it's pretty much guaranteed you will end up with a job doing that, because that's all you will be qualified for. If all you learn is how to string together APIs and libraries, then it probably wasn't a "curriculum" at all. But emphasizing certain technology domains other than programming and computer science does have…

> if your goal is to produce engineers that push the envelope of next generation technology beyond just computers

Then computer science isn't where you belong. There is a solid argument for teaching everyone the basics of programming, and this is it. I can hammer a nail into a wall, too, but that doesn't make me a carpenter.

Post reply on HN