6
$\begingroup$

One of the most influential texts in computer science is Structure and Interpretation of Computer Programs. Before changing to a Python-based approach, MIT used this book for their introductory programming course. It is freely available with a number of resources thanks to the textbook site. When perusing the list of schools using SICP, I see that all of them are universities/colleges, which leads me to my question.

Is SICP appropriate for an advanced high school computer science course?

In particular, I'm thinking of students who have taken two years of AP Computer Science, so they would have completed a year of CS50 AP and a year of Java. I see that UC Berkeley has a self-paced CS class that works through it. I understand that some things are at the university level for a reason, but I am trying to bridge the gap between post-AP CS classes in high school and intro CS classes in college.

$\endgroup$
2
  • $\begingroup$ I watched the videos. At ½ way they had covered everything I know, including object orientation, but had not yet introduced variable mutation. It made me go “Wow”, and realise how little of the time we need to mutate a variable. $\endgroup$ Commented Jul 16, 2017 at 15:58
  • $\begingroup$ It also may be that they would not list high schools that use the book. Those lists are a marketing decision, and high schools are not the primary audience that they market to. A top university may potentially be dissuaded by seeing high schools on a list for a book they are considering adopting. $\endgroup$
    – Ben I.
    Commented Jul 17, 2017 at 5:04

3 Answers 3

7
+100
$\begingroup$

First, I love SICP. I took and later TA'd 6.001. Like many MIT grads, I tried to teach it where I became a professor, and, like most who attempted it, decided not to do so again.

The main reason it is rarely successful outside of MIT isn't the difference in student quality but the difference in the support the school can offer. If I remember correctly, at MIT, there were three lectures a week, two recitation sections, one tutorial section (approximately 4 students meeting for an hour with a graduate TA), and many staffed lab hours. A high school or small college cannot generally provide that level of support. Also, when taught outside MIT, it is usually as a junior-level course, and students still usually find it overwhelming. (An exception is UC Berkeley, which taught it successfully for many years at the freshman level.)

I am not saying a high school class could not succeed, just that it would be very difficult, and the amount of work required would be exceptional.

It might also be hard to motivate students to work so hard on something so abstract, when they could be learning app development, computer games, or another more immediately rewarding topic with less effort.

In summary, I would advise against using SICP for a class at the high school level, although I do think it is possible to supervise an independent study with a sufficiently motivated and sophisticated individual or small group of students.

$\endgroup$
6
$\begingroup$

Absolutely, the book is a gem. It's filled with great insightful stuff right from the foreword. One such gem:

computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute

Now, as to why I consider this book appropriate for High-School CS is this:

essential material to be addressed by a subject at this level is not the syntax of particular programming-language constructs, nor clever algorithms for computing particular functions efficiently, nor even the mathematical analysis of algorithms and the foundations of computing, but rather the techniques used to control the intellectual complexity of large software systems

The book doesn't focus on learning the language but instead on solving some problem. It builds from a explaining basic primitive type to using those to create abstractions and complex stuff.

The language used, Scheme (a dialect of lisp), is great for this purpose. The authors explain various concepts clearly. here's a good example explaining compound procedures.

Now, as pointed out by fellow community folks here, managing the material is a bit hard and I believe that one don't have to cover the entirety of the book but cover enough so that people can infer as how to solve a particular problem given to them.

$\endgroup$
5
  • $\begingroup$ Nice answer, and welcome to Computer Science Educators! $\endgroup$
    – Ben I.
    Commented Jul 19, 2017 at 17:34
  • 1
    $\begingroup$ I have been in private beta but was not happy about it. :( Now, it seems to getting better. $\endgroup$ Commented Jul 20, 2017 at 14:58
  • $\begingroup$ Then welcome back! :) $\endgroup$
    – Ben I.
    Commented Jul 20, 2017 at 15:01
  • 1
    $\begingroup$ Could you also address why you think high school teachers/students are able to manage the material, not just whether the material is worthwhile? $\endgroup$ Commented Jul 21, 2017 at 2:58
  • 1
    $\begingroup$ Sure. Sorry I delayed answering this. @EllenSpertus Thanks :) $\endgroup$ Commented Jul 28, 2017 at 10:18
5
$\begingroup$

The book is quite deep. I'd only consider it in secondary school if the students typically go off to top universities, MIT, Cambridge, Berkeley, or similar. Otherwise, I's strongly suggest that they get a deeper knowledge of whatever language they already know.

Java version 8 has extensions that permit learning much about functional programming, for example.

Learning lots of languages shallowly isn't really a path to success. Of course Scheme and Java are sufficiently unlike that studying both opens new thought processes to the student that learning both Java and Ruby would not.

But learning how to become a true expert in one language gives you a powerful tool for whatever you want to do.

It is often a shock when a top student at a top secondary school winds up at, say MIT and finds themselves just average.

$\endgroup$
2
  • 1
    $\begingroup$ Although we like to expose our students at NCSSM to more than one language, so they see the commonalities. B''sides it is not languages that are important, it is the problem-solving process. Languages are tools. Architectures vary according to purpose. $\endgroup$ Commented Jul 18, 2017 at 1:44
  • $\begingroup$ I think there is nothing wrong with being exposed to lots of different languages and environments, including non-programming things like Matlab, a home-brew digital design simulator created by a prof, a robot arm system created by another prof, and so on. My first resume out of college had a list of languages in alphabetical order, beginning with APL, about 14 in total. Nothing shameful about that. I did earn money with C and eventually mastered it. But lex and yacc came in handy a few times. My solution was almost always "develop a DSL for this problem" and I didn't work much overtime, ever. $\endgroup$
    – Scott Rowe
    Commented Oct 14, 2018 at 21:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.