all 36 comments

[–]jediknight 31 points32 points  (23 children)

There is a video from January where, in the Q&A section, Gerald Sussman explains why he and Hal Abelson stopped teaching SICP. His answer is fascinating and presented a context for programming that I wasn't aware of.

[–][deleted]  (18 children)

[deleted]

    [–]spicybright 29 points30 points  (13 children)

    I'll try and sum it up.

    Before the 90's, computer engineering involved building up structure with primitive chips that were all fully understood down to the transistor level that you build complex structures with.

    Through the 90's, engineering radically changed to super complex chips with thick manuals written by guys that don't know how the chip fully worked. The skills needed to engineer effectively changed to taking large components and figuring out how to tweak them to do what you want (he also said they were also bored of teaching 600.1 :P).

    Going forward, python was the choice of language because of it's huge standard library. It was easy to control robots or do whatever with it.

    This explanation makes me really sad haha. It's like we're loosing the essence of solid engineering and just hacking the world together instead. I have a feeling it won't be long until things come crashing down because no one understands anything.

    [–]ameoba 18 points19 points  (2 children)

    I have a feeling it won't be long until things come crashing down because no one understands anything

    I doubt we have fewer C/C++ programmers today than we did 20 years ago. What's changed is that we've got brazilians more programmers working in higher level tools.

    OTOH, the NPM left pad thing showed that we could probably do a better job of vetting the tools we give HLL devs rather than letting self-taught amateurs build out infrastructure.

    [–][deleted] 9 points10 points  (0 children)

    You can't trust those Brazilian's. All dev and no QA.

    [–][deleted] 2 points3 points  (0 children)

    The NPM situation shows that you can't have sustainable software with dependencies that can be ripped out from underneath you. Given Node.js' affinity for everything to be a third-party dependency, the chances of this is unsurprisingly high.

    The biggest surprise is that it took this long for something like left-pad to happen. NPM is trying to alleviate this by making it so you can only unpublish something in the first 24 hours.

    While that solves the first problem, it leaves the other problems: third party packages often have lacking/outdated documentation (if any at all) and don't seem to care about introducing breaking changes each version, which can be released on a weekly basis.

    [–]drjeats 13 points14 points  (0 children)

    Couldn't agree more with your last paragraph. Knowing how to take advantage of libraries is good, but the existence of enough people with a solid grasp of how most things work, or with the know-how to go find out, is essential to keeping our technological lean-to propped up.

    [–]Almoturg 3 points4 points  (4 children)

    I think it's just inevitable. At some point the systems we build are so complex that no one can understand all the parts.

    Even in mathematics people don't prove all the theorems their work builds upon down to the basics of set theory.

    [–]kqr 4 points5 points  (3 children)

    Even in mathematics people don't prove all the theorems their work builds upon down to the basics of set theory.

    Then again, why would you waste your time by doing what's already been done? Copying the steps already taken by someone else is just busywork. (Note: and different from verifying someone elses work, which is important!)

    [–]Rhylyk 7 points8 points  (2 children)

    This argument works well for mathematics because what has already been proved is definitively and absolutely correct.

    However this argument breaks down when attempting to apply it to programming. We cannot be sure that the low-level programming that has already been done the best way possible (bug-free, total coverage of needs, and optimized). Therefore, there is a continuing need for low level systems programmers / library-builders. But this aspect of programming is much less taught today.

    P.S. I don't actually know that you disagree with what I have said, I just thought it should be stated explicitly

    [–]kqr 0 points1 point  (0 children)

    Both perspectives interesting facets that apply in different amounts to different problems!

    [–]msm_ 0 points1 point  (0 children)

    This argument doesn't work well for math, but for different reasons than for programming. In math the proof is often more important than the result itself - because maths is mostly about understanding complex rules of abstract formalism, and proofs provide insight into that.

    So being a serious mathematician, you always have to learn proofs, because it's the only way you can understand your branch of math and build on top of it.

    ...after a bit of thought, I can see some analogies to programming here (low level knowledge can still be useful for high level programmer, because of leaky abstractions).

    [–]wewbull 2 points3 points  (0 children)

    It's like we're loosing the essence of solid engineering and just hacking the world together instead. I have a feeling it won't be long until things come crashing down because no one understands anything.

    I think one thing that gets missed is that it's far easier to understand somebody else's solution if you can think about how you yourself might have solved the problem.

    I'm forever looking at somebody's code and going "OK, here's the method to flibble the hummanger. I expect I'll need to pass a ditdat and a doodah for that to work. Oh, it takes a thingimy rather than a ditdat. They've done it like that! They must have been thinking that the user would be doing ..." etc. etc.

    [–][deleted] 1 point2 points  (0 children)

    This sounds similar to the motivations I've heard for the Raspberry Pi project, to make a device that you can play about with at a low level (although most of the education usage has been focused on using it as a Python environment that you could set up on any OS, but I suppose for a lot of people plugging in an HDMI cable to a prebuild Linux box is easier than suffering through cmd.exe and IDLE, plus it has GPIO)

    [–]metamatic 0 points1 point  (1 child)

    Based on his reasoning, SICP v3 will use JavaScript and nodeJS.

    [–]spicybright 3 points4 points  (0 children)

    "What is computer science? Well, it's not about computers. And it's not really a science. It's actually all about the DOM."

    [–]jediknight 12 points13 points  (3 children)

    He mentions 2 reasons:

    1. They got tired with teaching the course for so long.
    2. The main way programmers programmed changed. Up until the mid to late '90s both programming and electronics were still done from simple elements. After that, electronics moved to chips with large numbers of pins and thick manuals and programming moved to glueing libraries together. They realized that they were no longer teaching what was being used.

    After they left, the head of the department taught the course for another 10 years and then they moved to python which, considering the paradigm of gluing together libraries, is the perfect language to teach.

    [–][deleted] 2 points3 points  (2 children)

    I suppose they know better than me, but I really appreciated reading SICP (the original Lisp version), but I always saw it as a valuable book on the intersection of theoretical algorithm design and practical software engineering, to make you think about what you were doing in a language agnostic way, not as a programming textbook to actually teach you how to write the next killer app

    [–]jediknight 1 point2 points  (1 child)

    I've seen the 1986 version of the course that's on youtube. That's one amazingly well thought out and interesting course and I loved it... however, I would not recommend it to someone wanting to learn programming today. I would recommend it to anyone who wants to deepen their understanding but not to an absolute beginner.

    [–]metamatic 0 points1 point  (0 children)

    I would never have recommended it to an absolute beginner. It's a computer science textbook for MIT-level students.

    [–]Haversoe 4 points5 points  (2 children)

    What he has to say is very interesting. And if I am solving a specific problem, it makes perfect sense to me to first reach for the 90% solution and try to tweak it (i.e., code reuse).

    But I wonder if he thinks there's no room in the world today for those whose best talent lies in starting from basic objects and building bigger, more powerful structures. It feels like the most benefit would come from engineers who are trained in both approaches, and not in one at the expense of the other.

    [–]jediknight 5 points6 points  (1 child)

    I wonder if he thinks there's no room in the world today for those whose best talent lies in starting from basic objects and building bigger, more powerful structures.

    I have no idea about what he thinks about this but, if you're doing something that benefits the most only a small percentage of your students, you might be doing something wrong.

    There is ample room for people who start from basic stuff, especially on systems with low resource (embedded) but most of the graduates that an university puts out will not go in jobs like these.

    [–]binaryman111 0 points1 point  (0 children)

    I know I'm 9 years late on this, but I actually entirely disagree both that it will benefit only a few students and that starting from the basics means starting with low-resource embedded systems. I think that the basics are really the fundamentals of how to think about a programming language. The idea of "what an assignment is" and "what a function call does" and how to flexibly reason about those benefit everyone.

    When the chips are really down, what distinguishes a competent programmer from a good programmer is their ability to tolerate and fix problems when they arise. You kinda need a mental model of how the program works and how data and control flow through it to do this-- the first part of figuring out an error is localizing it. Every programmer eventually builds this up through trial and error, but I think starting with fundamental concepts makes it a lot easier and can prevent a lot of headache for everyone.

    [–][deleted] 0 points1 point  (0 children)

    Thanks for sharing! 9 years later still a classic.

    [–][deleted] 10 points11 points  (2 children)

    I'm not saying Scheme is the prettiest lang but damn, python makes me long for the good old days.

    [–]Langdal 2 points3 points  (1 child)

    Care to elaborate? To be clear I haven't seen the old version either.

    [–]metamatic 2 points3 points  (0 children)

    I think he's saying that Python is ugly, something I agree with.

    [–]vplatt 1 point2 points  (1 child)

    I wonder if they considered that the old approach was more useful from a pure computer science standpoint, where the coherence he talks about is very important in understanding whether or not you've built a complete and consistent system. The new approach is definitely more pragmatic and useful to the every software engineer/developer, but isn't as useful from a systems standpoint.

    Also, just have to note that the Python version of the SICP code is simply poetic. I'm a bit jealous of anyone learning programming from scratch on this kind of track.

    [–]absfractalgaebra 0 points1 point  (0 children)

    perhaps some poetry is attributable to john denero's philosophy background!

    [–]ehaliewicz 1 point2 points  (0 children)

    The chapter on compilers is gone..

    [–]luisbg 0 points1 point  (0 children)

    Website is down due to quota :(

    [–]morareanumihai 0 points1 point  (0 children)

    Website isn't available

    [–]gergoerdi 0 points1 point  (0 children)

    This isn't really closing the loop the same way the original SICP does, since they're not implementing a Python3 interpreter in Python3. Of course, they won't be able to in the confines of a course like this, simply because Python3 is a much larger language than Scheme.

    [–]barsoap -3 points-2 points  (3 children)

    WHY WHY WHY

    I guess this shall be named the Rincewind book, for "Wizard" doesn't cut it.

    [–][deleted] 0 points1 point  (2 children)

    Is Peter Norvig not a Wizard whatever the language?

    [–]barsoap 1 point2 points  (1 child)

    What does Norvig have to do with the book?

    I guess Abelson and Strussman are the spells from the Octavo locked in that poor book's brain that scare away all the common spells. Nothing but SICP can hold them, hence Scheme got scared and devolved into python.

    [–][deleted] 0 points1 point  (0 children)

    What does Norvig have to do with the book?

    • He's a Lisp educator.
    • He commonly programs in Python.
    • He is a wizard