Live data from Hacker News

Why SICP Matters

cs.berkeley.edu

111–120 of 130 posts

Re: Why SICP Matters

#111

Earlier quoted context omitted.

"woah, this is unlike anything I've seen before." - it so totally isn't, if you know Ruby and to a lesser extent JS, both popular languages. It's a funky syntax coating on a fairly normal dynamic language, with about three quirks (tail calling, homoiconicity, and call/cc) all of which are more of interest academically than practically.

The funky syntax does enough to knock an 18-year-old freshman out of his one-track mind. That's all you need.

My university also started off the CS programme with Scheme in the mid 90's when I went, and it was a great leveller. Maybe half the kids had been programming a lot before starting uni, and the other half hadn't, and by starting with Scheme, everyone was at the same level, which built a lot of confidence among the ones that hadn't been programming before.

Five years later or so, the great teacher that ran the CS intro course quit, someone else took over, and switched to Java. Typical. :-/

Re: Why SICP Matters

#112
post #46

I am revisiting SICP at the moment, because a friend uses it to learn programming. But I have to say, I am not nearly as impressed with the book as I used to be. Wadler's critique "Why calculating is better than scheming" ( http://www.cs.kent.ac.uk/people/staff/dat/miranda/wadler87.p... ) fully applies, and the book can be rather confused and ad-hoc in some places, e.g. section 1.3. A stronger focus on data structure…

Thinking on "Why calculating is better than scheming" vs SICP I realize that there is an axis where most programmer's ways of thinking can be placed, with 2 extremes:

- the mathematician-programmers: the thinking in terms of "what is" extreme, or mathematical thinking inspired programming: people closer to this like to think in terms of types and usually dislike dynamic languages, they also like to be able to properly reason about all aspects of a program, to have defined "states" they can think about. These people tend to like MLs, Haskell, OCaml, F#. The "mathematical beauty of perfect code" is their ideal and favorite metaphor. And I think they are right that teaching a Lisp to a beginner pushes ones mind away from "what is" oriented programming.

- the Schemers: the thinking in terms of "what transformations to apply to something (it doesn't matter what "something" actually "is") to get something else or somewhere else" programmer: these people like to be able to transform everything, including code itself, they like homoiconicity or macros in general, they prefer thinking in terms of "how to compose/cahin transofrmations" instead of types, they tend either no know or not value category theory too much and they are ok with seeing code as an "organic entity" that can't always be reasoned about. These people tend to like Lisps, Smalltalk and dynamic languages. The "programming as magick", in the sense of "controlling the spirits (processes) inside computers" is their favorite metaphor. They also like to maintain a playful mood and their "it's ok that paying customers get shafted every now and then" may have had a reason for businesses' dislike for "schemer" types and "schemer" realted technologies. As an offside paradox, some "schemers" tend to also like OOP, though they understand it should not be overused (I consider Alan Kay, usually mentiones as the father of OOP to be a "schemer"). I think that exposing a young learner to Lisp pushes one mind towards this direction, and this is why I love SICP. If you are a competent engineer you surely have a serious amount of math knowledge, so you can easily switch your mind to what-is/math mode and see the mathematical beauty when there is one to be seen, but most "mathematician-programmers" never seem to be able to love this "ruleless organic beauty" of the "schemer way".

I consider myself a "schemer" and I am biased to this side, but I understand and appreciate the value and arguments of the other - I'd rather fly in a plane with the control systems coded by a "mathematician-programmer" than by a "schemer" like me :)

Re: Why SICP Matters

#114
post #57

Earlier quoted context omitted.

Honest interest from someone who doesn't know: While I know this is happening at least some other places in the US (it happened to the one I went to and to at least one a friend attended), is it largely limited to this country, or are other countries seeing similar issues?

My university (Helsinki University of Technology) changed the freshman course from SICP to Java in the beginning of the century. The reason was Nokia, who wanted Java programmers straight from the school. Nowadays they're using Python. I'm very disappointed I didn't have a chance to study that course. I read the book last year and did some exercises by my own. I never had so much fun with any CS book than I had with…

Nokia. That company just keeps giving. Some universities in Finland fell into that very same trap a second time and moved towards the holy triad of C#, .Net and Windows Phone. Utter shortsighted idiocy

Re: Why SICP Matters

#115

Excellent article. I'm immensely glad and lucky to have had Brian Harvey as a professor, and this echoes exactly what he taught us and the general teaching at Berkeley: that the concepts of programming and computer science were of paramount importance, and that you should understand them in the abstract. To this day, this is why I value a good theoretical CS education, why I value university education, and why I cont…

"woah, this is unlike anything I've seen before." - it so totally isn't, if you know Ruby and to a lesser extent JS, both popular languages. It's a funky syntax coating on a fairly normal dynamic language, with about three quirks (tail calling, homoiconicity, and call/cc) all of which are more of interest academically than practically.

I don't think "quirks" is the right word for tail calling and homoiconicity, and those are powerful features that I miss in practical situations all the time in lesser languages.

Re: Why SICP Matters

#116
post #77

Earlier quoted context omitted.

E.g. Haskell has enough syntactic sugar for some an even simpler version factorial n = product [1..n]

Something similar is achievable in scheme, just takes a little work http://repl.it/InA (click run session) :)

Oh, you don't even need macros for something similar. E.g. Python's range function works just fine.

Re: Why SICP Matters

#117
post #85

Excellent article. I'm immensely glad and lucky to have had Brian Harvey as a professor, and this echoes exactly what he taught us and the general teaching at Berkeley: that the concepts of programming and computer science were of paramount importance, and that you should understand them in the abstract. To this day, this is why I value a good theoretical CS education, why I value university education, and why I cont…

I had a scary moment, looks like UofC still may do ten weeks of SICP: http://www.cs.uchicago.edu/courses/description/CMSC/10500/99...

That's an intro course for non-majors. Scheme is use in the curriculum for majors (the 151 course), but it uses the How to Design Programs text, not SICP. The Honors curriculum uses Haskell as its functional language, with touches on some other bits.

On a personal note, I learned using SICP up at Northwestern, but I'd be hard-pressed to justify it to a non-engineering school. Much of the math used in it hits harder on the engineering-style calculus (compute all the things!) than a more discrete math-y style that would be more appropriate for CS programs with a closer affinity to a math department (or schools like the UofC, which does not have an engineering program at all).

Re: Why SICP Matters

#118
post #13
post #12

I have to confess I just discovered you can order a relatively cheap copy (well, compared to Amazon) of SICP direct from MIT. I have only skimmed so far, but combined with the lectures I have to say that I really wish that had been my introduction to programming. Maybe it is just because of where I'm at, but it really feels like in the first 3 lectures some of the more elusive topics of programming are at least touch…

You can also read the online version which is free!

At the website: http://mitpress.mit.edu/sicp/full-text/book/book.html

Or as a pdf: https://github.com/sarabander/sicp-pdf

Re: Why SICP Matters

#120

Earlier quoted context omitted.

But there are still areas, lets say for example civil engineering, where you need to know about building materials, some physics and math to do your job. In CS, on the other hand, if you know how to put together a few web pages in Python and solve half a dozen brain teasers you may get a job in a very good company.

You're missing my point, which was about priority order. Most people are going to college hoping to get a job. They're learning because they're told they have to learn, so they do a bad job learning. In a field like civil engineering, you can't graduate unless you pass classes that are simply unpassable without learning some stuff. (I have a friend going through aerodynamics right now and I'm hearing about everything…

We created elementary schools. The children who attended them surpassed their peers. Employers began to require them as a signal of competence. Eventually, being such a "universal good", elementary education became a public service of the state.

Then we created secondary/"grammar" schools. The children who attended them surpassed their peers, who had only attended elementary school. Employers began to require a secondary-school education as a signal of competence. Eventually, being such a "universal good", secondary education became a public service of the state.

Then we created universities...

---

Although the inductive step is valid, there's a problem in the assumptions: we already had universities for thousands of years before the introduction of elementary or secondary education!

The traditional "liberal education" of The University, where the upper-class and the cunning go to cloister themselves with one-another and thus boost their mutual productivity in all sorts of status-signalling arts (sounds sort of like TED, doesn't it?) has come crashing head-first into the rising bar of minimum-expected human competence. Success in secondary school no longer tells you anything about a person's class or cunning, and that's forced employers to look for increasingly-lofty-and-meaningless trust-signals. So "everyone who's anyone" expects to go to university now, from the spoilt valley-girl to the farm bumpkin.

Perhaps, in the end, if we want to preserve the "usefulness" of university, we'll chop off the undergraduate portion of it and call that "tertiary school" or something. Everyone gets to go, it occurs at community colleges, probably most of the material comes from Khan Academy and the like. Then the rich and the cunning can go to The University after that.

Post reply on HN