Why Scheme for Introductory Programming?
Recent awards
Testimonials
- Dr. Prabhakar Ragde describes
teaching his nine-year-old daughter to program.
- Dr. Guillaume Marceau quotes his
end-of-term comments from students
- High school teacher Dean Morse on girls in
high school computer science courses
- High school CS teacher Paul Fisher
reflects on his first year of teaching a TeachScheme!-style course
- High school math teacher Michel P (?)
and his/her C++ students
- High school teacher Michael Hunt reports on
his first three weeks of Algebra I class
- Karen Buras on the benefits of
this technique for the weaker students
- One of Karen Buras's former high
school students
- The EE professional parent of one of
the students in Louise Hilton's high school class
- End-of-term comments from a
number of high school students
- High school teacher Duncan Innes reports
- High school teacher Karen North's
C++ vs. Scheme experiment
- High school student Andrew Scoby's
end-of-term report
- Middle school teacher Annette Walter
discusses using Scheme to teach algebra
- High school teacher Jane Sutherland's
conversion
- A series of progress reports from
middle-school teacher Dan Anderson, including his students'
winning science fair projects
- Suradet Jitprapaikulsarn's experience with
pre-AP and AP students learning Scheme
- Feedback from one of Dr.
Ragde's students who had previous programming experience.
- Marco Morazán talks with an
upperclassman in an intro programming course
- Brief
quotes from teachers who have participated in the TeachScheme!
workshops
- Bill Abresch on Web development using
DrScheme
- Robb Cutler on teaching AP CS starting in
Scheme
- Todd O'Bryan on teaching AP CS starting in
Scheme
- Lon Levy on teaching AP CS starting in
Scheme
- Monterrey Tech experiment on pre-AP in Scheme
- EdScheme experiment on programming
contests
- Reactions from Java-first students
on learning Scheme
- Roman Sykora's epiphany after teaching
himself some Scheme but without the Design Recipe
- Nadeem Abdul Hamid's experience teaching
the TeachScheme!, ReachJava curriculum
- Sharon Tuttle's experience using
Racket, graphics and animation to teach beginning programming at a
summer computer camp for Native American high school students
- In Summer 2010, Hélène Martine wrote
this
blog post about the TeachScheme! workshop she was attending, and a few weeks
later this
contemplation of what she had learned.
- Paul Ojanen's experience trying to
teach without loops or assignment statements
- Student Kevin DeVocht on the design
recipe
- TeachScheme!
and co-op, a report on the effect of adopting the Program By Design
curriculum at Northeastern University. In a nutshell, the undergraduate
students who had this curriculum suddenly got much better co-op job
assignments and feedback from co-op employers, outcompeting the graduate
students. The graduate students demanded a similar preparation, got it,
and showed a similar improvement.
Articles, etc.
- The Tech
Guy, a call-in radio show broadcast in over 100 cities and on XM
satellite radio, discussing how to "learn programming
right". In answer to a call from a 10-year-old who
"already programs in C++, Java, and Python", he warns against
programming purely by trial and error, and suggests that the kid download
our software and textbook to learn a more principled approach that he
can then apply to any language. He mentions that all the "really
serious programmers" he knows consider Lisp or Scheme to be the way
they really learned to program.
(The relevant bit is the first caller,
minutes 14-19 of the show.)
- A Scheme Story, an
article by student Natasha Chen
on her experiences (from 6th through 12th grades)
in BASIC, Pascal, Logo, and Scheme.
Note that the languages in which she was so
frustrated by memorizing syntax -- BASIC and Pascal -- have far less
syntax to memorize than the currently popular Java and C++.
- Scheme and
Java in the First Year, a paper published in the Journal of
Computing in Small Colleges, May 2000.
- Lisp
as an Alternative to Java, an article comparing the performance of
the same programs written in C++, Java, and Lisp or Scheme. In brief,
it concludes that the Lisp/Scheme programs ran about as fast as C++
programs, significantly faster than Java programs, and that they were
developed far faster than either C++ or Java programs.
- Two
talks presented by TeachScheme! team members at regional educators'
conferences
- Teach Yourself
Programming in Ten Years, an article about what it really
takes to learn to program. Not specific to Scheme, but discusses what
different kinds of languages to learn, and why, and in what order.
- The
Perils of JavaSchools, a blog entry on why teaching students all
Java and nothing but Java is a Bad Idea: in a nutshell, Java doesn't
challenge students with pointers and recursion (a term which he seems to
use broadly to include stateless programming and higher-order functions).
I have never met anyone who can do Scheme, Haskell, and C pointers who
can't pick up Java in two days, and create better Java code than people
with five years of experience in Java...
- If Lisp is So
Great..., a brief essay by Paul Graham about quality and
popularity.
- Revenge of the
Nerds, an excellent essay by Paul Graham about differences among
programming languages.
- Functional
programming in C++. This blog post by computer-game industry icon John Carmack points
out the numerous practical advantages of functional programming. Carmack acknowledges that
for various external reasons, not everybody can write their production code in Lisp, Scheme,
or Haskell, but
For everyone else: No matter what language you work in, programming in a functional style
provides benefits. You should do it whenever it is convenient, and you should think hard
about the decision when it isn't convenient.
[emphasis his]. Our curriculum teaches students functional programming first, and then
shows them how to work in the imperative and object-oriented paradigms as well, choosing
the right paradigm for the problem at hand.
Scheme in the Real World
Who uses Scheme or Lisp in the real world? Actually,
quite a lot of people.
- See schemers.org
and functionaljobs.com for lists
of jobs specifically calling for functional programmers. Note, of
course, that someone with functional-programming background is often
perfectly competent at imperative programming too, but has a tendency to
write more smaller functions and strictly separate I/O from the rest of
the program -- both of which are good ideas in any
language.
- The software behind Twitter
is mostly written in Scala, which is basically Scheme with Java
libraries.
- The popular website I write like is
mostly written in Scheme (or more specifically Racket); see this
blog post.
- Derivatives trading firm Jane
Street Capital does most of its work in the functional programming
language OCaml, and specifies "experience with functional
programming languages (OCaml, SML, Scheme, Haskell, Lisp, F#, Erlang,
etc)" in its hiring. See their
presentation about how and why they switched to functional programming.
- Beating the
Averages describes the development of Yahoo!
Store, a Web-based application for building e-commerce
sites, and how doing it in Lisp allowed him to add new
features faster than his competitors could. See
also Lisp
in Web-based Applications, from a talk by Paul Graham about the same
software.
- Extremely
Successful Software, a similar "success story" article about using
Pair Programming, a lean and customer-responsive management style, and
Lisp to develop software.
- Graham also has an article about why Orbitz and other
travel sites are written largely in Lisp
- Continue is a
commercial Web application for managing academic conferences
and workshops, written entirely in Scheme.
- Margrave
is a security policy analyzer written in Scheme.
- Abstrax provides software
for "build to order" manufacturing plants, writing most of
the software in Scheme.
- NASA uses software written in Lisp to control
autonomous spacecraft and manage
mission plans for Mars landers.
- The computer game company
Naughty Dog uses PLT Scheme
extensively as a scripting language for videogames like
Uncharted; see this
PowerPoint presentation on how and why.
- I'm told that Disney controls virtual rides,
the Air Force controls telescope batteries, the Navy runs its
weather service for carrier-borne jet fighters, Motorola runs its
ordering system for packaging hardware, a number of Russian banks control their Web-based account
access,
and Pixar Animation does a lot of its
animation, using software written in Scheme or Lisp. I don't have
details on these projects.
- Here's another list of
companies using
Lisp or Scheme for industrial applications
- There's an annual conference on Commercial Uses of Functional
Programming.
- The State of Tennessee public school system includes a course
called Programming
and Logic, for which the recommended textbook and
platform are How to Design Programs
and DrScheme respectively.
(Somewhat puzzlingly, this course is a recommended part of many "career
and technical education" programs; I don't see anything on the site
about college-prep programs.)
- Kathi Fisler's
list of articles about real-world uses.
However, industrial uses of Scheme are sorta beside the point. If
you're teaching students who need to get programming jobs next month,
you teach them whatever is currently "hot" in industry. If
you're teaching students who need to become good programmers, you teach
them whatever will allow you to best teach the habits and principles of
good programming -- which is not necessarily the same thing!
Or as Prabhakar Ragde puts it,
Ever visit a gym? You were wasting your time. I've never seen a
Nautilus machine or a treadmill outside a gym. Barbells -- repeatedly
lifting two balanced weights connected by a narrower piece of metal --
completely contrived and artificial...
At the high end, Scheme has long had a number of features that other
languages have only recently added, e.g. lexical closures (as in Python,
Ruby, C#, and Perl 5) and continuations (as in Ruby).
Questions and Answers
To find other schools and teachers who use this approach, try
a
Google search for htdp.org or
a
Google search for drscheme.org.
Last modified:
Stephen Bloch / sbloch@adelphi.edu