Live data from Hacker News

If not SICP, then what? Maybe HTDP?

stevenrosenberg.net

161–170 of 227 posts

Re: If not SICP, then what? Maybe HTDP?

#161
post #36

Hm. Not entirely sure what to think. I find SICP to be a mind-blowing book - a truly enlightening experience. But not, perhaps, entirely suited for beginners. I first started reading it four years ago, just over two years after I had started to teach myself programming in high school. Although I already found it interesting and its functional programming approach did have a lasting impact on my programming style, I r…

It is useful to consider the audience the book was written for: first-year students at MIT in the 1980s. That was a formidably bright and meticulously prepared group. Many of them already had some programming experience from high school. It's not too surprising that a book tailored to such a crowd's particular needs is not particularly suited to other students, whether less bright, less prepared, or simply true begin…

> "Many of them already had some programming experience from high school."

Supposedly those that did found SICP to be more challenging than those who didn't.

Re: If not SICP, then what? Maybe HTDP?

#162
post #139
post #95

Earlier quoted context omitted.

> The original author has to persuade people, and convince people who aren't familiar with them. The "pedagogical" author later is in a more clear position of authority and doesn't need to work as hard. Or perhaps: The "pedagogical" author can assume that by the time of his writing, we live in a society where it is accepted that there is nothing mysterious about the material (e.g. imaginary numbers are nothing myster…

>Unluckily many students who attend lectures have an attitude where they need to be convinced instead of taught. Isn't this backwards? If you're just accepting the lecturer's word as dogma, I would argue you're not really gaining an education at all. The process of being convinced and having doubts about the material resolved improves critical thinking and improves understanding of the underlying material as well.

That's how you become the annoying student in the algorithms class who interrupts the professor all the time and ruins the class.

Re: If not SICP, then what? Maybe HTDP?

#163
post #139
post #95

Earlier quoted context omitted.

> The original author has to persuade people, and convince people who aren't familiar with them. The "pedagogical" author later is in a more clear position of authority and doesn't need to work as hard. Or perhaps: The "pedagogical" author can assume that by the time of his writing, we live in a society where it is accepted that there is nothing mysterious about the material (e.g. imaginary numbers are nothing myster…

>Unluckily many students who attend lectures have an attitude where they need to be convinced instead of taught. Isn't this backwards? If you're just accepting the lecturer's word as dogma, I would argue you're not really gaining an education at all. The process of being convinced and having doubts about the material resolved improves critical thinking and improves understanding of the underlying material as well.

> Isn't this backwards? If you're just accepting the lecturer's word as dogma, I would argue you're not really gaining an education at all. The process of being convinced and having doubts about the material resolved improves critical thinking and improves understanding of the underlying material as well.

Maybe I think differently from you because I come from Germany. But I don't think this is backwards. I openly admit that I cannot stand "critical thinking" gospel.

Before you can start thinking critically, you have to understand the material that is there (that you want to criticize). Explaining the material so that you hopefully understand it is the role of the lecturer/teaching assistent. Why are you enrolled in the degree course if you are critical of it instead of wanting to learn the material? So one can assume that the students want to learn the material.

Re: If not SICP, then what? Maybe HTDP?

#164

There are two models for CS education. One model is for students who want to learn the theories of computer science and be computer scientists , and the other is for students who want to be programmers. SICP is the foundation for people who want to be computer scientists. That’s not everyone. But from what I’ve found, all the top CS schools create computer scientists, and the other CS schools create programmers. Whil…

> While it’s easy for a computer scientist to make the jump to programmer with just a little guidance, it’s much harder to go the other way. I don't think it's actually that easy for a computer "scientist" to unlearn all the idealistic stuff that can actually be counter-productive in a real-world programming environment, particularly if they're enamored with languages like LISP or Haskell. These people easily get dep…

Because people get depressed when they can't program in their favorite language? Frankly, ridiculous. A job is a job and the main question is whether you can do it or not.

Re: If not SICP, then what? Maybe HTDP?

#165
I'm the author of the original blog post, and I wanted to say that SICP, as well as HtDP, and even a book like Robert Sedgewick's Computer Science (https://www.amazon.com/Computer-Science-Interdisciplinary-Ro...) are in a completely different category than more mainstream how-to-program books (like anything from O'Reilly, Manning, No Starch, Pragmatic Programmers) and even the other popular college texts like Y. Daniel Liang's Introduction to Java Programming and Data Structures (https://www.amazon.com/Introduction-Programming-Structures-C...) or the book in my intro class, Tony Gaddis' Starting Out with C++: Early Objects (https://www.amazon.com/Starting-Out-Early-Objects-9th/dp/013...).

Supposedly all of these books assume (or at least allow for) no background in programming, but I think the reality is that taking SICP or even HtDP into the intro class at a non-elite university or a community college would be a complete non-starter and/or abject failure.

What I'm trying to say is that there is a place for both of these approaches: A deep look into computer science, and the nuts and bolts of basic "get it done" programming.

Should both of these things happen in a single class, or series of classes? I think the answer is yes. But how to do that and not leave non-elite students back on the road is another matter.

I believe that the HtDP authors think that the "domain-specific knowledge" required of SICP was a barrier.

And I also understand how advanced CS students think that a class focused on how to manipulate strings, use loops, deal with variables of various types, and work with basic logic in the context of a specific computer language is NOT computer science.

But in my view, most students -- and all average students -- need to crawl quite a way, then walk, before they can run.

Even Sedgewick's Computer Science, which focuses on Java and has a wealth of great questions/assignments all along the way, could really be a barrier to students who aren't steeped in math and science. I learned some math while going through the book, but I didn't learn so much programming. Liang's approach might be too basic for someone who has already done years and years of programming but is way more approachable for those who have not.

My guess is that many professors tried SICP and had a very poor rate of success. I fully support a selective class that says, "this is very hard, but you will learn a lot and look at the world in a different way, and if you really want to understand computer science, this is the class for you."

But there also needs to be more of a gateway class for future programmers (not necessarily graduate-school-bound CS majors) that eases them into the world of writing code. Offering the basics and sneaking in some CS seems better than doing it the other way around.

In a way, it's like the difference between carpentry and architecture. You can teach people who want to build houses how to design them, but at some point they're going to have to get out a saw, hammer and nails and make something happen.

Re: If not SICP, then what? Maybe HTDP?

#166
post #49
post #38

Earlier quoted context omitted.

If your CS degree aims to churn out programmers ready for industry, then a overview of the currently favoured libraries is indeed what you need to teach. If on the other hand, you want to produce actual computer scientists who know how to think for themselves, the SICP is what you're looking for. (And I would hope that an institution like MIT would choose the latter focus for its program.)

I tend to think the goal of a CS education is to form computer scientists. It's just that a lot of people (and articles) think it's about churning out programmers for the industry. With such a mismatch of expectations, the resulting frustration on both sides is not surprising...

I like the German system: We have university CS courses, which tend to be more theoretical, but also universities of applied sciences as well vocational training in IT for the more practical approach.

Re: If not SICP, then what? Maybe HTDP?

#167

"that make me jump through intellectual hoops made of mathematics" There is actually surprisingly little mathematics in SICP. What is does have are mechanisms that are then analysed and modelled, after which the mental model is adapted so it can be turned into computational model that is a faithful representation. Some of the presented mechanisms are mathematical in nature, but you don't need a mathematical backgroun…

SICP is not about scheme, has never been about scheme, will never be about scheme. It strikes me that when someone says that, and my GSI said something very similar to that in section, it means that the book+course has failed to say what it is about, clearly, in a way the student will understand rather than misunderstand. It's f'ing ineffable is not a good thing.

From the preface to the first edition:

> we believe that the essential material to be addressed by a subject at this level is not the syntax of particular programming-language constructs...

The whole preface talks about how the aim of the book is to get students to think with a programmer's mindset. Scheme is only incidentally the language the consider best for the task, due to its near-absence of syntax.

https://mitpress.mit.edu/sites/default/files/sicp/full-text/...

Re: If not SICP, then what? Maybe HTDP?

#168
post #73

"that make me jump through intellectual hoops made of mathematics" There is actually surprisingly little mathematics in SICP. What is does have are mechanisms that are then analysed and modelled, after which the mental model is adapted so it can be turned into computational model that is a faithful representation. Some of the presented mechanisms are mathematical in nature, but you don't need a mathematical backgroun…

This comment reads like a very partisan, overstated puff piece in defence of the book. The Scheme aspect of SICP, and other decisions made by the authors, matter a lot because, contrary to what you seem to be claiming, there are many different approaches to and flavours of programming. There isn't a single core philosophy that, once imparted to students, "clues them in" to the essence of the cultures/styles/models de…

Of course these decisions matter, but not in the way you mean. The biggest hurdle to learning programming is not the syntax, not even when you're starting out with C++. It's learning to think like a programmer.

One needs to learn how to take apart a problem and put it back together again in a way the computer understands - to get rid of all the ambiguities and phrase the solution in terms of conditionals and loops. When one starts to deal with bigger problems, one needs to learn the use of abstraction in order to deal with the added complexity.

This is the skill that makes somebody a real programmer, and it stays pretty much the same across languages. The differences between OOP, FP and all the rest pale in comparison to that first great lesson that needs to be learnt. (Having started off with Java, learning Lisp was a huge step for me that I really struggled with at first. But it still wasn't anywhere near as difficult as learning programming for the very first time.)

This is the skill that SICP tries to teach.

Re: If not SICP, then what? Maybe HTDP?

#169
post #84

Everyone on here is very excited about HTDP. You are mostly very smart people, and not representative of the typical CS student starting off. Many of you are driven and have rich STEM backgrounds that you draw upon. Therefore, I want to point out that there is no substantial evidence to prove most of the claims of "success" that the HTDP community claims, with regards to novice learners. There are certainly people wh…

The curriculum is too artificial and disjoint from the rest of their CS degree. That was my takeaway from CS61A at Berkeley. I thought that Scheme was incredibly elegant and I was disappointed that we never used it again. The profs sure were pleased with themselves at the end of CS61A and I imagined later that they thought their preferred outcome would have been that we pursued a PhD using Jikes. SICP was the text wh…

As I remember it, the book SICP itself wasn't really the core of CS61A... the lectures and slides were, and they drew off the concepts in SICP. No one read the book, but we learned from the (fairly good) lectures and explanations of the concepts, and especially the projects of course.

Those concepts were and remain a foundation for how I think about programming—at the level of elegant structure and short modular thinking. Software engineering and architecture is something different, and has its own class (CS169) which was far more valuable and important for those skills at that higher level.

I dunno. It was a good foundation. I've looked through SICP and I still recognize the concepts, the lectures matched it fairly well. But you're right—no one read the book.

Re: If not SICP, then what? Maybe HTDP?

#170
post #156

I think programmers reaction to the mathematics in SICP is completely hysterical - in the sense of hysteria, not comedy. For example, the author-professors who wrote HTDP, quoted at length in this article complain about using 'complex domain knowledge' and the author of the blog post does as well, but the running example used is literally arithmetic . In particular: Section 2.1 starts by building a data type of ratio…

I agree. Currently working through the book in Javascript [1], and there isn't a crazy amount of math. Newton's method in the first chapter was a little rough for me, but after that it's much more about exploring ways of representing data. (At least so far... I'm almost through chapter 2). 1. https://github.com/ahuth/sicp

[deleted]
Post reply on HN