about summary refs log tree commit diff stats
path: root/js/games/nluqo.github.io/~bh/v1ch0/preface.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/v1ch0/preface.html
parent5d012c6c011a9dedf7d0a098e456206244eb5a0f (diff)
downloadtour-562a9a52d599d9a05f871404050968a5fd282640.tar.gz
*
Diffstat (limited to 'js/games/nluqo.github.io/~bh/v1ch0/preface.html')
-rw-r--r--js/games/nluqo.github.io/~bh/v1ch0/preface.html357
1 files changed, 357 insertions, 0 deletions
diff --git a/js/games/nluqo.github.io/~bh/v1ch0/preface.html b/js/games/nluqo.github.io/~bh/v1ch0/preface.html
new file mode 100644
index 0000000..012a729
--- /dev/null
+++ b/js/games/nluqo.github.io/~bh/v1ch0/preface.html
@@ -0,0 +1,357 @@
+<HTML>
+<HEAD>
+<TITLE>Computer Science Logo Style vol 1:Preface</TITLE>
+</HEAD>
+<BODY>
+<CITE>Computer Science Logo Style</CITE> volume 1:
+<CITE>Symbolic Computing</CITE> 2/e Copyright (C) 1997 MIT
+<H1>Preface</H1>
+
+<TABLE width="100%"><TR><TD>
+<IMG SRC="../csls1.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"><BR>
+<TR><TD align="right"><A HREF="../pdf/v1ch00.pdf">Download PDF version</A>
+<TR><TD align="right"><A HREF="../v1-toc2.html">Back to Table of Contents</A>
+<TR><TD align="right">[no back]
+chapter thread <A HREF="ack.html"><STRONG>NEXT</STRONG></A>
+<TR><TD align="right"><A HREF="https://mitpress.mit.edu/books/computer-science-logo-style-second-edition-volume-1">MIT
+Press web page for Computer Science Logo Style</A>
+</TABLE></TABLE>
+
+<HR>
+
+<P>This book isn't for everyone.
+
+<P>Not everyone needs to program computers.  There is a popular myth that
+if you aren't &quot;computer literate,&quot; whatever that means, then you'll
+flunk out of college, you'll never get a job, and you'll be poor and
+miserable all your life.  The myth is promoted by computer
+manufacturers, of course, and also by certain educators and writers.
+
+<P>The truth is that no matter how many people study computer programming
+in high school, there will still be only a certain number of
+programming jobs.  When you read about &quot;jobs in high-tech industry,&quot;
+they're talking mostly about manufacturing and sales jobs that are no
+better paid than any other manufacturing jobs.  (Often, these days,
+those jobs are exported to someplace like Taiwan where they pay
+pennies a day.) It's quite true that many jobs in the future will
+involve <EM>using</EM> computers, but the computers will be disguised.
+When you use a microwave oven, drive a recently built car, or play a
+video game, you're using a computer, but you didn't have to take a
+&quot;computer literacy&quot; course to learn how.  Even a computer that
+looks like a computer, as in a word processing system, can be mastered
+in an hour or two.
+
+<P>This book is for people who are interested in computer programming
+because it's fun.
+
+<P><H2>The Intellectual Content of Computer Programming</H2>
+
+<P>When I wrote the first edition of this book in 1984, I said that the study
+of computer programming was intellectually rewarding for young children in
+elementary school, and for computer science majors in college, but that high
+school students and adults studying on their own generally had an
+intellectually barren diet, full of technical details of some particular
+computer brand.
+
+<P>At about the same time I wrote those words, the College Board was
+introducing an Advanced Placement exam in computer science.  Since then, the
+AP course has become popular, and similar official or semi-official computer
+science curricula have been adopted in other countries as well.  Meanwhile,
+the computers available to ordinary people have become large enough and
+powerful enough to run serious programming languages, breaking the monopoly
+of BASIC.
+
+<P>So, the good news is that intellectually serious computer science is within
+the reach of just about everyone.  The bad news is that the curricula tend
+to be imitations of what is taught to beginning undergraduate computer
+science majors, and I think that's too rigid a starting point for
+independent learners, and especially for teenagers.
+
+<P>See, the wonderful thing about computer programming is that it <EM>is</EM>
+fun, perhaps not for everyone, but for very many people.  There aren't many
+mathematical activities that appeal so spontaneously.  Kids get caught up in
+the excitement of programming, in the same way that other kids (or maybe the
+same ones) get caught up in acting, in sports, in journalism (provided the
+paper isn't run by teachers), or in ham radio.  If schools get too serious
+about computer science, that spontaneous excitement can be lost.  I once
+heard a high school teacher say proudly that kids used to hang out in his
+computer lab at all hours, but since they introduced the computer science
+curriculum, the kids don't want to program so much because they've learned
+that programming is just a means to the end of understanding the
+curriculum.  No!  The ideas of computer science are a means to the end of
+getting computers to do what you want.
+
+<P><H2>Computer Science Apprenticeship</H2>
+
+<P>My goal in this series of books is to make the goals and methods of a
+serious computer scientist accessible, at an introductory level, to
+people who are interested in computer programming but are not computer
+science majors.  If you're an adult or teenaged hobbyist, or a teacher
+who wants to use the computer as an educational tool, you're
+definitely part of this audience.  I've taught these ideas to teachers
+and to high school students.  What I enjoy most is teaching high
+school freshmen who bring a love of programming into the class with
+them--the ones who are always tugging at my arm to tell me what they
+found in the latest <EM>Byte.</EM>
+
+<P>I said earlier that I think that for most people programming as job training
+is nonsense.  But if you happen to be interested in
+programming, studying it in some depth can be valuable for the same
+reasons that other people benefit from acting, music, or being a news
+reporter: it's a kind of intellectual apprenticeship.  You're learning
+the discipline of serious thinking and of taking pride in your work.
+In the case of computer programming, in particular, what you're
+learning is <EM>mathematical</EM> thinking, or <EM>formal</EM>
+thinking.  (If you like programming, but you hate mathematics, don't
+panic.  In that case it's not really mathematics you hate, it's
+school.  The programming you enjoy is much more like real mathematics
+than the stuff you get in most high school math classes.) In these books I
+try to encourage this sort of formal thinking by discussing
+programming in terms of general rules rather than as a bag of tricks.
+
+<P>When I wrote the first edition of this book, in 1984, it was controversial
+to suggest that not everyone has to learn to program.  I was accused of
+elitism, of wanting to keep computers as a tool for the rich, while
+condemning poorer students to dead-end jobs.  Today it's more common that
+I have to fight the opposite battle, trying to convince people why <EM>
+anyone</EM> should learn about computer programming.  After all, there is all
+that great software out there; instead of wasting time on programming,
+I'm told, kids should learn to use Microsoft Word or Adobe Illustrator
+or Macromind Director.  At the same time, kids who've grown up with intricate
+and beautifully illustrated video games are frustrated by the relatively
+primitive results of their own first efforts at programming.  A decade ago
+it was thrilling to be able to draw a square on a computer screen; today
+you can do that with two clicks of a mouse.
+
+<P>There are two reasons why you might still want to learn to program.  One is
+that more and more application programs have programming languages built in;
+you can customize the program's behavior if you learn to speak its
+&quot;extension&quot; language.  (One well-known example is the Hypertalk extension
+language for the Hypercard program; the one that has everyone excited as I'm
+writing this is the inclusion of the Java programming language as the
+extension language for the Netscape World Wide Web browser.)  But I think a
+more important reason is that programming--learning how to express a method
+for solving a problem in a formal language--can still be very empowering.
+It's not the same kind of fast-paced fun as playing a video game; it feels
+more like solving a crossword puzzle.
+
+<P>I've tried to make these books usable either with a teacher or on your
+own.  But since the ideas in these books are rather different from those of
+most computer science curricula, the odds are that you're reading this on
+your own.  (When I published the first edition, one exception was that this
+first volume was used fairly commonly in teacher training classes, for
+elementary school teachers who'd be using Logo in their work.)
+
+<P><H2>About the Second Edition</H2>
+
+<P>Three things have happened since the first edition of these books to warrant
+a revision.  The first is that I know more about computer science than I did
+then!  In this volume, the topics of recursion and functional programming
+are explained better than they were the first time; there is a new chapter on
+higher order functions early in the book.  There are similar improvements
+in the later volumes, too.
+
+<P>Second, I've learned from both my own and other people's experiences
+teaching these ideas.  I originally envisioned a style of work in which high
+school students would take a programming course in their first year, then
+spend several years working on independent projects, and perhaps take a more
+advanced computer science class senior year.  That's why I put all the
+programming language instruction in the first volume and all the project
+ideas in the second one.  In real life, most students don't spread out their
+programming experience in that way, and so the projects in the second volume
+didn't get a chance to inspire most readers.  In the second edition, I've
+mixed projects with language teaching.  This first volume teaches the core
+Logo capabilities that every programming student should know, along with
+sample projects illustrating both the technical details and the range of
+possibilities for your own projects.  The second volume, <EM>Advanced
+Techniques,</EM> teaches more
+advanced language features, along with larger and more intricate projects.
+
+<P>Volume three, <EM>Beyond Programming,</EM> is still a kind of
+sampler of a university computer science curriculum.  Each chapter is
+an introduction to a topic that you might study in more depth during a
+semester at college, if you go on to study computer science.  Some of
+the topics, like artificial intelligence, are about programming
+methods for particular applications.  Others, like automata theory,
+aren't how-to topics at all but provide a mathematical approach to
+understanding what programming is all about.  I haven't changed the
+table of contents, but most of the chapters have been drastically
+rewritten to improve both the technical content and the style of
+presentation.
+
+<P>The third reason for a second edition of these books is that the specific
+implementations of Logo that I used in 1984 are all obsolete.  (One of them,
+IBM Logo, is still available if you try very hard, but it's ridiculously
+expensive and most IBM sales offices seem to deny that it exists.)  The
+commercial Logo developers have moved toward products in which Logo is
+embedded in some point-and-click graphical application program, with more
+emphasis on shapes and colors, and less emphasis on programming itself.
+That's probably a good decision for their purposes, but not for mine.
+That's why this new edition is based on Berkeley Logo, a free implementation
+that I developed along with some of my students.  Berkeley Logo is available
+for Unix systems, DOS and Windows machines, and Macintosh, and the language is exactly
+the same on all platforms.  That means I don't have to clutter the text with
+footnotes like &quot;If you're using this kind of computer, type that instead.&quot;
+
+<P><H2>Why Logo?</H2>
+
+<P>Logo has been the victim of its own success in the elementary
+schools.  It has acquired a reputation as a trivial language for
+babies.  Why, then, do I use it as the basis for a series of books
+about serious computer science?  Why not Pascal or C++ instead?
+
+<P>The truth is that Logo is one of the most powerful programming
+language available for home computers.  (In 1984 I said &quot;by far the most
+powerful,&quot; but now home computers have become larger and Logo finally
+has some competition.)  It is a dialect of Lisp, the
+language used in the most advanced research projects in computer
+science, and especially in artificial intelligence.  Until recently,
+all of the <EM>books</EM> about Logo have been pretty trivial, and they
+tend to underscore the point by strewing cute pictures of turtles
+around.  But the cute pictures aren't the whole picture.
+
+<P>What does it mean for a language to be powerful?  It <EM>doesn't</EM>
+mean that you can write programs in a particular language that do things you
+can't do in some other language.  (In that sense, all languages are the
+same; if you can write a program in Logo, you can write it in Pascal
+or BASIC too, one way or another.  And vice versa.)  Instead, the power
+of a language is a way of measuring how much the language helps you
+concentrate on the actual problem you wanted to solve in the first
+place, rather than having to worry about the constraints of the language.
+
+<P>For example, in C, Pascal, Java, and all of the other languages derived
+originally from Fortran, the programmer has to be very explicit about
+what goes where in the computer's memory.  If you want to group 20
+numbers together as a unit, you must &quot;declare an array,&quot; saying in
+advance that there will be exactly 20 numbers in it.  If you change
+your mind later and want 21 numbers, too bad.  You also have to say
+in advance that this array will contain 20 integers, or perhaps 20
+numbers with fractions allowed, or perhaps 20 characters of text--but
+not some of each.  In Logo the entire process of storage allocation
+is <EM>automatic;</EM> if your program produces a list of 20 numbers,
+the space for that list is provided with no effort by you.  If, later,
+you want to add a 21st number, that's automatic also.
+
+<P>Another example is the <EM>syntax</EM> of a language, the rules for
+constructing legal instructions.  All the Fortran-derived languages
+have a dozen or so types of instructions, each with its own peculiar
+syntax.  For example, the BASIC <CODE>PRINT</CODE> statement requires a list
+of expressions you want printed.  If you separate expressions with
+commas, it means to print them one way; if you separate them with
+semicolons, that means something else.  But you aren't allowed to use
+semicolons in other kinds of statements that also require lists of
+expressions.  In Logo there is only one syntax, the one that invokes
+a procedure.
+
+<P>It's not an accident that Logo is more powerful than Pascal or C++;
+nor is it just that Logo's designers were smarter.  Fortran was
+invented before the mathematical basis of computer programming was
+well understood, so its design mostly reflects the capabilities (and
+the deficiencies) of the computers that happened to be available
+then.  The Fortran-based languages still have the same fundamental
+design, although some of its worst details have been patched over in
+the more recent versions like Java and C++.  More powerful languages are
+based on some particular mathematical model of computing and use that
+model in a consistent way.  For example, APL is based on the idea of
+matrix manipulation; Prolog is based on predicate calculus,
+a form of mathematical logic.  Logo, like Lisp,
+is based on the idea of composition of functions.
+
+<P>The trouble is that if you're just starting this book, you don't have
+the background yet to know what I'm talking about!  So for now, please
+just take my word for it that I'm not insulting you by asking you to
+use a &quot;baby&quot; language.  After you finish the book, come back and
+read this section again.
+
+<P>A big change since 1984 is that Logo is no longer the only member of the
+Lisp family available for home computers.  Another dialect, Scheme, has
+become popular in education.  Scheme has many virtues in its own right, but
+its popularity is also due in part to the fact that it's the language used
+in the best computer science book ever written: <EM>Structure and
+Interpretation of Computer Programs,</EM> by Harold Abelson and Gerald Jay
+Sussman with Julie Sussman (MIT Press/McGraw-Hill, 1985).  I have a foot in
+both camps, since I am co-author, with Matthew Wright, of <EM>Simply
+Scheme: Introducing Computer Science</EM> (MIT Press, 1994), which is sort of
+a Scheme version of the philosophy of this book.
+
+<P>The main difference between Scheme and Logo is that Scheme is more
+consistent in its use of functional programming style.  For example, in
+Scheme, every procedure is what Logo calls an operation--a procedure that
+returns a computed value for use by some other procedure.  Instead of
+writing a program as a sequence of instructions, as in Logo, the Scheme
+programmer writes a single expression whose complexity takes the form of
+composition of functions.
+
+<P>The Scheme approach is definitely more powerful and cleaner for writing
+advanced projects.  Its cost is that the Scheme learner must come to terms
+from the beginning with the difficult idea of function as object.  Logo is
+more of a compromise with the traditional, sequential programming style.
+That traditional style is limiting, in the end, but people seem to find it
+more natural at first.  My guess is that ultimately, Logo programmers who
+maintain their interest in computing will want to learn Scheme, but that
+there's still a place for Logo as a more informal starting point.
+
+<P><H2>Hardware and Software Requirements</H2>
+
+<P>The programs in this series of books are written using Berkeley Logo, a free
+interpreter that is available on diskette from the MIT Press or on the
+Internet.  (Details are in Appendix A.)  Berkeley Logo runs on Unix systems,
+DOS and Windows machines, and Macintosh.
+
+<P>Since Berkeley Logo is free, I recommend using it with this book, even if
+you have another version of Logo that you use for other purposes.  One of
+the frustrations I had in writing the first edition was dealing with all the
+trivial ways in which different Logo dialects differ.  (For example, if you
+want to add 2 and 3, can you say <CODE>2+3</CODE>, or do you have to put spaces
+around the plus sign?  Different dialects answer this question differently.)
+Nevertheless, the examples in this first volume should be workable in just
+about any Logo dialect with some effort in fixing syntactic differences.
+The later volumes in the series, though, depend on advanced features of
+Berkeley Logo that are missing from many other dialects.
+
+<P>The Berkeley Logo distribution includes the larger programs from these
+books.  When a program is available in a file, the filename is shown at
+the beginning of the chapter.  (There are only a few of these in the
+first volume, but more in later volumes.)
+
+<P><H2>Words of Wisdom</H2>
+
+<P>The trick in learning to program, as in any intellectual skill, is to
+find a balance between theory and practice.  This book provides the
+theory.  One mistake would be to read through it without ever touching
+a computer.  The other mistake would be to be so eager to get your
+hands on the keyboard that you just type in the examples and skip over
+the text.
+
+<P>There are no formal exercises at the ends of chapters.  That's because
+(1) I hate a school-like atmosphere; (2) you're supposed
+to be interested enough
+already to explore on your own; and (3) I think it's better to
+encourage your creativity by letting you invent your own exercises.
+However, at appropriate points in the text you'll find questions like
+&quot;What do you think would happen if you tried thus-and-such?&quot; and
+suggestions for programs you can write.  These questions and activities are
+indicated by this symbol: &raquo;.  You'll
+get more out of the book if you take these questions seriously.
+
+<P>If you're not part of a formal class, consider working with a friend.
+Not only will you keep each other from handwaving too much but it's
+more fun.
+
+<P>
+
+<P><A HREF="../v1-toc2.html">(back to Table of Contents)</A>
+<P>[no back]
+chapter thread <A HREF="ack.html"><STRONG>NEXT</STRONG></A>
+
+<P>
+<ADDRESS>
+<A HREF="../index.html">Brian Harvey</A>, 
+<CODE>bh@cs.berkeley.edu</CODE>
+</ADDRESS>
+</BODY>
+</HTML>