This is the type of approach that is more appropriate to a Technical College than a major University. This new approach almost seems like teaching civil engineers how to weld and rivet in order to build bridges, rather than deeply understanding the mathematical theory behind stress and vectors.
The intro courses, while in Python, still use many of the concepts and text of SICP, so it's not all gone. Many of the concepts translate well, and it's not the end of the world or even a slippery slope—I think that would be overreacting.
There's nothing fundamentally wrong with using a newer and more useful language to teach these concepts—after all, as Harvey always said, the language doesn't really matter. However, it's conceding to rationality just slightly, and you're right, a University, especially Berkeley in my mind, is a place where you're free to learn concepts and think theoretically without needing to find a real-world application for at least a couple years. They should keep that as a core value, and I certainly hope they do even as they use more modern languages.
However, I recall that a little later some MIT graduate students started teaching their own version of the classic SICP-based course. I can't seem to find a link to it now, unfortunately. I wonder how that turned out, and if they're still teaching it now.
http://www-inst.eecs.berkeley.edu/~cs61a/sp13/projects/schem...
No one cares about getting an education. They just want a job.
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 he's learning.)
This is kind of a microcosmic version of what we're seeing in general: we see people as workers first and human beings second. The universities and the kids are following suit.
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.
I'm really not sure who you're addressing. No one is claiming these assumptions.
Internal vs. external motivation? Maybe some day, when programming is no more needed for anything useful, it can really flourish as an art. Like painting, when its principal real-world reason-to-be was supplanted by photographing. E.g. I don't understand the obsession of quest to invent always _more and more_ optimal algorithms, because often the less optimal ones are more interesting and elegant.
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 SICP.
Five years later or so, the great teacher that ran the CS intro course quit, someone else took over, and switched to Java. Typical. :-/
> a fairly normal dynamic language
You call this a "fairly normal dynamic language"?
0 == '' // true
0 == '0' // true
'' == '0' // false
http://www.cs.uchicago.edu/courses/description/CMSC/10500/99...
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).
To this day, this is why I value a good theoretical CS education, why I value university education, and why I continue to look back on and use my supposedly theoretical and impractical CS education with great respect.
This is so true: "learning another programming language isn't a big deal; it's a chore for a weekend. I tell my students, 'the language in which you'll spend most of your working life hasn't been invented yet, so we can't teach it to you. Instead we have to give you the skills you need to learn new languages as they appear.'" Can you imagine how valuable it was to be told that from the start?
He's right about scheme too: part of the value of using Scheme or Lisp is its inherent crazy unfamiliarity to the great majority of students. The first thing when you see all those parentheses and weird paradigms is "woah, this is unlike anything I've seen before." And that's perfect. You don't get lost in things you think you already know—you learn concepts fresh and the language, because it's so weird and wild and totally abstract and you can't imagine using it for any real project—is as malleable and temporary as modeling clay. You get to make things with it that teach you about art, and how to look at things, how to see infinity—not about the properties of the materials in your hands.
For this reason among others, it's profoundly disappointing to me that Berkeley has switched their introductory language to Python. As great as it is, it's no Scheme, if only for the fact that its popularity and usefulness as a language detracts from the underlying concepts. I have to think Brian Harvey fought this change, had he not retired and lost some influence.
"Every five years or so, someone on the faculty suggests that our first course should use language X instead; each time, I say "when someone writes the best computer science book in the world using language X, that'll be fine.'"
SICP was, in retrospect, a masterpiece of education. Someone sat down and thought about exactly these concepts and how best to elucidate them without getting in the way of the connections being made. The new trend toward applications-focused education feels to me like the wrong direction, and I don't think I would get as good an education today as I did learning abstract concepts theoretical computer science taught as the most important part.
Sure, it's fun and attractive to think about applying what you learn to the revolution at hand quickly, making mobile apps and designing robots and putting everything together into useful applications, but you can learn all that stuff after a couple semesters of awesome CS core theory anyway. And while you might get frustrated for those 2 years as an 18-year-old hotshot upstart startup-minded student, in 10 years you'll look back on it and think, "wow, that really was the most important part."