about summary refs log tree commit diff stats
path: root/js/games/nluqo.github.io/~bh/sicp.html
diff options
context:
space:
mode:
authorelioat <elioat@tilde.institute>2023-08-23 07:52:19 -0400
committerelioat <elioat@tilde.institute>2023-08-23 07:52:19 -0400
commit562a9a52d599d9a05f871404050968a5fd282640 (patch)
tree7d3305c1252c043bfe246ccc7deff0056aa6b5ab /js/games/nluqo.github.io/~bh/sicp.html
parent5d012c6c011a9dedf7d0a098e456206244eb5a0f (diff)
downloadtour-562a9a52d599d9a05f871404050968a5fd282640.tar.gz
*
Diffstat (limited to 'js/games/nluqo.github.io/~bh/sicp.html')
-rw-r--r--js/games/nluqo.github.io/~bh/sicp.html128
1 files changed, 128 insertions, 0 deletions
diff --git a/js/games/nluqo.github.io/~bh/sicp.html b/js/games/nluqo.github.io/~bh/sicp.html
new file mode 100644
index 0000000..94ed2d4
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/sicp.html
@@ -0,0 +1,128 @@
+<HTML>
+<HEAD>
+<TITLE>Why <cite>Structure and Interpretation of Computer Programs</cite> matters</TITLE>
+</HEAD>
+<BODY>
+<H1>Why <cite>Structure and Interpretation of Computer Programs</cite> matters</H1>
+<CITE>Brian Harvey<BR>University of California, Berkeley</CITE>
+
+<P>In 2011, to celebrate the 150th anniversary of MIT, the <i>Boston Globe</i>
+made a list of the most important innovations developed there.  They asked me
+to explain the importance of <i>SICP,</i> and this is what I sent them:
+
+<P>&nbsp;
+
+<P>SICP was revolutionary in many different ways.  Most importantly, it
+dramatically raised the bar for the intellectual content of introductory
+computer science.  Before SICP, the first CS course was almost always
+entirely filled with learning the details of some programming language.
+SICP is about standing back from the details to learn big-picture ways
+to think about the programming process.  It focused attention on the
+central idea of <i>abstraction</i> -- finding general patterns from specific
+problems and building software tools that embody each pattern.  It made
+heavy use of the idea of <i>functions as data</i>, an idea that's hard to learn
+initially, but immensely powerful once learned.  (This is the same idea,
+in a different form, that makes freshman calculus so notoriously hard even
+for students who've done well in earlier math classes.)  It fit into the
+first CS course three different <i>programming paradigms</i> (functional,
+object oriented, and declarative), when most other courses didn't even
+really discuss even one paradigm.
+
+<P>Another revolution was the choice of Scheme as the programming language.
+To this day, most introductions to computer science use whatever is the
+"hot" language of the moment: from Pascal to C to C++ to Java to Python.
+Scheme has never been widely used in industry, but it's the perfect
+language for an introduction to CS.  For one thing, it has a very simple,
+uniform notation for everything.  Other languages have one notation for
+variable assignment, another notation for conditional execution, two or
+three more for looping, and yet another for function calls.  Courses that
+teach those languages spend at least half their time just on learning the
+notation.  In my SICP-based course at Berkeley, we spend the first hour
+on notation and that's all we need; for the rest of the semester we're
+learning ideas, not syntax.  Also, despite (or because of) its simplicity,
+Scheme is a very versatile language, making it possible for us to examine
+those three programming paradigms and, in particular, letting us see how
+object oriented programming is implemented, so OOP languages don't seem
+like magic to our students.  Scheme is a dialect of Lisp, so it's great
+at handling functions as data, but it's a stripped-down version compared
+to the ones more commonly used for professional programming, with a
+minimum of bells and whistles.  It was very brave of Abelson and Sussman
+to teach their introductory course in the best possible language <i>for
+teaching</i>, paying no attention to complaints that all the jobs were in
+some other language.  Once you learned the big ideas, they thought, and
+this is my experience also, 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."
+
+<P>Finally, SICP was firmly optimistic about what a college freshman can be
+expected to accomplish.  SICP students write interpreters for programming
+languages, ordinarily considered more appropriate for juniors or seniors.
+The text itself isn't easy reading; it has none of the sidebars and colored
+boxes and interesting pictures that typify the modern textbook aimed at
+students with low attention spans.  There are no redundant exercises; each
+exercise teaches an important new idea.  It uses big words.  But it repays a
+close reading; every sentence matters.
+
+<P>Statistically, SICP-based courses have been a small minority.  But the book
+has had an influence beyond that minority.  It inspired a number of later
+textbooks whose authors consciously tried to live up to SICP's standard.  The
+use of Scheme as a language for learners has been extended by others over a
+range from middle school to graduate school.  Even the more mainstream courses
+have become sensitive to the idea of programming paradigms, although most of
+them concentrate on object oriented programming.  The idea that computer
+science should be about ideas, not entirely about programming practice, has
+since widened to include non-technical ideas about the context and social
+implications of computing.
+
+<P>SICP itself has had a longevity that's very unusual for introductory CS
+textbooks.  Usually, a book lasts only as long as the language fad to which it
+is attached.  SICP has been going strong for over 25 years and shows no sign
+of going out of print.  Computing has changed enormously over that time, from
+giant mainframe computers to personal computers to the Internet on cell
+phones.  And yet the big ideas behind these changes remain the same, and they
+are well captured by SICP.
+
+<P>I've been teaching a SICP-based course since 1987.  The course has changed
+incrementally over that time; we've added sections on parallelism, concurrency
+control, user interface design, and the client/server paradigm.  But it's
+still essentially the same course.  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" and so far the faculty have always voted to
+stay with the SICP course.  We'll find out pretty soon whether the course can
+survive my own retirement.
+
+<ul><li>(Footnote: Nope.  Berkeley's new first course for majors uses Python,
+with lecture notes that try to keep the ideas (and some of the text) of SICP.)
+</ul>
+
+<P>The discussion has been sharper recently because MIT underwent a major
+redesign of their lower division EECS curriculum.  People outside MIT tend to
+summarize that redesign as "MIT decided to switch to Python," but that's not a
+perceptive description.  What MIT decided was to move from a curriculum
+organized around topics (programming paradigms, then circuits, then signal
+processing, then architecture) to a curriculum organized around applications
+(let's build and program a robot; let's build and program a cell phone).
+<i>Everything</i> about their courses had to be reorganized; the choice of
+programming language was the least of those decisions.  Their new approach is
+harder to teach; for one thing, each course requires a partnership of
+Electrical Engineering faculty and Computer Science faculty.  Perhaps in time
+the applications-first approach will spark a revolution as profound as the one
+that followed SICP, but it hasn't happened yet.
+
+<P>In my experience, relatively few students appreciate how much they're
+learning in my course while they're in it.  But in surveys of all our
+CS students, it turns out to be among the most popular courses in
+retrospect, and I regularly get visits and emails from long-gone students
+to tell me about how they're using in their work ideas that they thought
+were impractical ivory-tower notions as students.  The invention of the
+MapReduce software for data parallelism at Google, based on functional
+programming ideas, has helped eliminate that ivory-tower reputation.
+
+<P><ADDRESS>
+<A HREF="index.html"><CODE>www.cs.berkeley.edu/~bh</CODE></A>
+</ADDRESS>
+</BODY>
+</HTML>