Live data from Hacker News

Programming by poking: why MIT stopped teaching SICP

posteriorscience.net

91–100 of 245 posts

Re: Programming by poking: why MIT stopped teaching SICP

#92
post #26

Earlier quoted context omitted.

For working as a professional programmer, SICP, sure. But TAOCP? Why?

I wrote that for anyone interested in learning CS seriously, I swear by those two books. I would recommend an entirely different set of books for someone who wants to work as a professional programmer. That being said, TAOCP really gave me a clear understanding of algorithmic analysis. It's a hard book, but after you finish it, you won't look at programming the same way again. Especially when it comes to design decis…

Just curious, what is your definition of "finish"? Read it cover-to-cover? Solve all the problems?

Re: Programming by poking: why MIT stopped teaching SICP

#93

Earlier quoted context omitted.

That sounds fun! Lisp is great for that because of its code-as-data principle (I use clojure in my day job and it makes dealing with structured data like JSON an absolute breeze). Did you go to an advanced school or something?

well, i started coding in 1st grade (logo, then basic) but this was a summer program hosted by Johns Hopkins. It was highly theoretical - we learned about DFAs, NFAs, epsilon-NFAs, and turing machines.

Wow, I had completely forgotten about writing that interpreter for the PURPLE language [1] in that class. Thanks for the memories!

[1] http://www.mattababy.org/~belmonte/Teaching/CS1/PURPLE_proje...

Re: Programming by poking: why MIT stopped teaching SICP

#94

Earlier quoted context omitted.

Having to write my own shell in C for my operating systems class absolutely blew my mind. And then after that my professor made us implement a quine in the shell we just wrote. Yes, he was insane.

Yes, he was insane. More like a pedantic jerk. It's good to know about the existence of quines. But people are (presumably) paying good money for (and more important: investing their perfectly valuable time in) their education, and there's only so much time in a systems programming class, and so much more fundamental stuff to cover (or cover more robustly). The people who really need to figure out how to write quines…

Chill out, Franz. It was like a one day lab assignment and to be fair, I had no idea what quines were so I did learn something interesting and it led to an incredible discussion about Ken Thompson's "Trusting Trust".

Re: Programming by poking: why MIT stopped teaching SICP

#95
post #86

Earlier quoted context omitted.

Can you expand on the last sentence. I'm not sure I understand what you were trying to express. (not trolling, genuinely curious)

The application of mathematical type theory ( https://en.wikipedia.org/wiki/System_F ) to popular programming languages goes back to 1998 when Philip Wadler designed generics for Java. Local type inference is now used in Visual Basic, Scala, Rust, probably a lot of other new languages I am missing. Gradual types are coming to Clojure and probably Python and Lua. Erik Meijer did a lot of work on bringing monads and FR…

Great, thanks for the clarification.

Re: Programming by poking: why MIT stopped teaching SICP

#96

I read about half of SICP and thought it was OK. Not great, but okay. The programmers I've met fall largely into two groups, those who like systems level programming, knowing how the OS works, how it interfaces with the hardware, what the memory layout is like, etc. and those who like abstraction and the things that SICP values. I'm definitely in the former group (but I certainly appreciate people who prefer the SICP…

>The programmers I've met fall largely into two groups, those who like systems level programming, knowing how the OS works, how it interfaces with the hardware, what the memory layout is like, etc. and those who like abstraction and the things that SICP values. I'm definitely in the former group (but I certainly appreciate people who prefer the SICP approach). Many of us are in both groups, which is how stuff like Ru…

True, but the number of people who are good at both is very small :)

Re: Programming by poking: why MIT stopped teaching SICP

#97
post #27

I'm surprised and a bit dismayed to read Sussman's reasoning: "...Sussman said that in the 80s and 90s, engineers built complex systems by combining simple and well-understood parts. The goal of SICP was to provide the abstraction language for reasoning about such systems. Today, this is no longer the case. Sussman pointed out that engineers now routinely write code for complicated hardware that they don’t fully unde…

Calling it his "reasoning" with all the connotations that come with that word goes way too far. This was his polite implicit criticism of the new core, which among other things also teaches much less in the way of EE fundamentals, a topic he's cared about very much since at least the late '70s (i.e. 6.002 is no longer a required course for all EECS majors). The bottom line is that in the post-dot.com crash panic whic…

It may have been that it just took 7 years to actually get a new course in place, but it wasn't until fall 2007 that MIT officially got rid of 6.001 as required course, well after the dot com crash.

There were a TON of changes that happened with the MIT EECS curriculum at that time, so perhaps it was a holistic response to the dot com crash that was beyond just 6.001.

Re: Programming by poking: why MIT stopped teaching SICP

#98
There's a quote I love from the book "The Idea Factory: Learning to Think at MIT":

Freshman double E's take six double oh one (a.k.a. six double no fun) to learn to program in LISP... This is also where they begin to leave the rest of the world behind them in their ability solve problems and make things work.

He goes on to describe how the course instills the virtues and limits of abstraction.

Re: Programming by poking: why MIT stopped teaching SICP

#99
post #47

Earlier quoted context omitted.

Having to write my own shell in C for my operating systems class absolutely blew my mind. And then after that my professor made us implement a quine in the shell we just wrote. Yes, he was insane.

Which class/university was it? Any chance the materials are online? I'm actually writing my own shell now; I'd be interested to compare :) The fork/exec/pipe/dup calls are definitely an unusual and powerful paradigm. I think too many programmers don't know this because we were brainwashed to make "portable" programs, and that's the least portable part of Unix.

CS61 at Harvard covers that stuff, building your own shell (and memory management, etc) in C and it's an introductory class. There is a lot of hand holding of course but I really loved that class.

Re: Programming by poking: why MIT stopped teaching SICP

#100
post #79

Earlier quoted context omitted.

But that's exactly the point... these days, even 4 whole years isn't enough to learn "all the fundamentals", at least not while balancing things so that you learn enough practical skills to also do something useful. So what do we do, have people do a 4 year degree, and then go spend 8 weeks, or 16 weeks, or a year, learning to actually build systems? I don't know, maybe that is the answer. But I suspect the MIT guys…

> even 4 whole years isn't enough to learn "all the fundamentals" No. You are missing the point. The fundamentals are very simple and easy to learn. That's what makes them "fundamental." It's all the random shit invented by people who didn't understand the fundamentals (or chose not to apply them) that takes a long time to learn.

I disagree. The field has exploded. It's becoming more and more difficult to take vertical slices of every sub-field. What should we consider fundamental?

Programming languages, automata theory, set theory, compilers, assembly language programming, microprocessors and system architecture, algorithms, graph theory, category theory, artificial intelligence, machine learning, operating system, parallel and distributed programming, natural language processing, web design, network architecture, databases.

There are plenty of core fields that I've missed. Which are fundamental? Which do we teach? It simply isn't possible to adequately teach everyone the core fundamentals of all of these fields during the course of an undergraduate degree while also conveying the basic design fundamentals that a software developer needs to know. There is just too much in the field to expect every software developer to have a complete understanding of all of the fundamentals in every sub-field. Our field is getting a lot wider and a lot deeper, and with that, people's expertise is forced to narrow and deepen.

Post reply on HN