about summary refs log tree commit diff stats
path: root/js/games/nluqo.github.io/~bh/ssch0/foreword.html
blob: 2a531c33c05c7bb28c21a4495179f40a4280c518 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<P>

<P>

<HTML>
<HEAD>
<TITLE>Simply Scheme:Foreword</TITLE>
</HEAD>
<BODY>
<CITE>Simply Scheme</CITE>:
<CITE>Introducing Computer Science</CITE> 2/e Copyright (C) 1999 MIT
<H1>Foreword</H1>

<TABLE width="100%"><TR><TD>
<IMG SRC="../simply.jpg" ALT="cover photo">
<TD><TABLE>
<TR><TD align="right"><CITE><A HREF="http://www.cs.berkeley.edu/~bh/">Brian
Harvey</A><BR>University of California, Berkeley</CITE>
<TR><TD align="right"><CITE><A HREF="http://ccrma.stanford.edu/~matt">Matthew
Wright</A><BR>University of California, Santa Barbara</CITE>
<TR><TD align="right"><BR>
<TR><TD align="right"><A HREF="../pdf/ssch00.pdf">Download PDF version</A>
<TR><TD align="right"><A HREF="../ss-toc2.html">Back to Table of Contents</A>
<TR><TD align="right">[no back]
chapter thread <A HREF="preface.html"><STRONG>NEXT</STRONG></A>
<TR><TD align="right"><A HREF="http://mitpress.mit.edu/0262082810">MIT
Press web page for <CITE>Simply Scheme</CITE></A>
</TABLE></TABLE>

<HR>


<P>

<P>One of the best ways to stifle the growth of an idea is to enshrine it
in an educational curriculum.  The textbook publishers, certification
panels, professional organizations, the folks who write the college
entrance exams&mdash;once they've settled on an approach, they
become frozen in a straitjacket of interlocking constraints that
thwarts the ability to evolve.  So it is common that students learn
the &quot;modern&quot; geography of countries that no longer exist and
practice using logarithm tables when calculators have made tables
obsolete.  And in computer science, beginning courses are trapped in
an approach that was already ten years out of date by the time it was
canonized in the mid-1980s, when the College Entrance Examination Board
adopted an advanced placement exam based on Pascal.<A NAME="text1" HREF="foreword.html#ft1">[1]</A>

<P>This book points the way out of the trap.  It emphasizes programming
as a way to express ideas, rather than just a way to get computers to
perform tasks.

<P>Julie and Gerry Sussman and I are flattered that Harvey and Wright
characterize their revolutionary introduction to computer science as a
&quot;prequel&quot; to our text <EM>Structure and Interpretation of Computer
Programs.</EM>  When we were writing <EM>SICP,</EM> we often drew upon
the words of the great American computer scientist Alan Perlis
(1922-1990).  Perlis was one of the designers of the Algol
programming language, which, beginning in 1958, established the
tradition of formalism and precision that Pascal embodies.  Here's
what Perlis had to say about this tradition in 1975,
nine years <EM>before</EM> the start of the AP exam:

<P><BLOCKQUOTE>

Algol is a blight.  You can't have fun with Algol.  Algol is a code
that now belongs in a plumber's union.  It helps you design correct
structures that don't collapse, but it doesn't have any fun in it.
There are no pleasures in writing Algol programs.  It's a labor of
necessity, a preoccupation with the details of tedium.

</BLOCKQUOTE>

<P>Harvey and Wright's introduction to computing emerges from a different
intellectual heritage, one rooted in research in artificial
intelligence and the programming language Lisp.  In approaching
computing through this book, you'll focus on two essential techniques.

<P>First is the notion of <EM>symbolic programming.</EM>  This means that
you deal not only with numbers and letters, but with structured
collections of data&mdash;a word is a list of characters, a sentence is a
list of words, a paragraph is a list of sentences, a story is a list
of paragraphs, and so on.  You assemble things in terms of natural
parts, rather than always viewing data in terms of its tiniest pieces.
It's the difference between saying &quot;find the fifth character of the
third word in the sentence&quot; and &quot;scan the sentence until you pass
two spaces, then scan past four more characters, and return the next
character.&quot;

<P>The second technique is to work with <EM>higher-order functions.</EM>
That means that you don't only write programs, but rather you <EM>
write programs that write programs,</EM> so you can bootstrap your methods
into more powerful methods.

<P>These two techniques belong at center stage in any beginning
programming course, which is exactly where Harvey and Wright put them.
The underlying principle in both cases is that you work with general
parts that you extend and combine in flexible ways, rather than tiny
fragments that you fit together into rigid structures.

<P>You should come to this introduction to computing ready to think about
ideas rather than details of syntax, ready to design your own
languages rather than to memorize the rules of languages other people
have designed.  This kind of activity changes your outlook not only on
programming, but on any area where design plays an important role,
because you learn to appreciate the relations among parts rather than
always fixating on the individual pieces.  To quote Alan Perlis again,

<P><BLOCKQUOTE>

You begin to think in terms of patterns and idioms and phrases, and no
longer pick up a trowel and some cement and lay things down brick by
brick.  The Great Wall, standing for centuries, is a monument.  But
building it must have been a bore.

</BLOCKQUOTE>

<P><P>

<P>

<P>Hal Abelson

<P>Cambridge, MA

<P>

<P>

<A NAME="ft1" HREF="foreword.html#text1">[1]</A> Since Hal
wrote this Foreword, they've switched the AP exam to use Java, but
the principle is the same.<P>
<P><A HREF="../ss-toc2.html">(back to Table of Contents)</A><P>
[no back]
chapter thread <A HREF="preface.html"><STRONG>NEXT</STRONG></A>

<P>
<ADDRESS>
<A HREF="../index.html">Brian Harvey</A>, 
<CODE>bh@cs.berkeley.edu</CODE>
</ADDRESS>
</BODY>
</HTML>