Epigrams on programming, and Bicicleta
Kragen Javier Sitaker
kragen at pobox.com
Mon Sep 18 03:37:01 EDT 2006
In 1982, Alan Perlis wrote a widely-quoted series of epigrams on
programming. All the good programmers I know recognize deep truths in
many of these epigrams, but some are enigmatic, and I have come to find
new meanings in many of them that I missed at first. Sometimes, I'm
embarrassed to think of what I used to think some of them meant.
I'm engaged in developing a revolutionary new programming environment
called Bicicleta, which I described a little bit in my earlier
kragen-tol posts, "functional programming for amateurs in an outliner"
and "towards a modern programming environment". It's unusual in many
ways, and it's sometimes difficult to explain to other people why I'm
making certain choices in its development. Perhaps a screencast will
help, when it reaches a sufficiently mature stage of development.
I'm calling it Bicicleta for four reasons:
1. A human being on foot is slower than any other land animal of the
same size; but a human being on a bicycle can go 80MPH, faster than
any other land animal. Bicicleta is a bicycle for your mind.
2. According to folklore.org, the above anecdote was a favorite of Steve
Jobs's during the early development of the Macintosh, and for a time
it looked like the new machine might be called Bicycle. If it's
successful, Bicicleta will change the way people interact with
computers as much as the Macintosh did, and in many of the same ways:
it will make difficult things easier for experts, and it will make it
possible for amateurs to do things that previously required experts.
3. There's already software called Bicycle and lots of software about
bicycles, but "Bicicleta" is far more googlable. I plan to spend the
next several years of my life in Spanish-speaking countries, talking
mostly to speakers of Spanish, so a Spanish name seems reasonable.
4. "Functional Programming for Amateurs in an Outliner" is too long and
contains at least three words that scare or offend some people.
(Maybe I shouldn't worry about this, follow the lead of the Bell Labs
folks, and call it Castrado or something.)
Rereading Perlis's epigrams, I was struck by how relevant they are to
these difficult-to-explain aspects of Bicicleta. I thought I would try
to explain Bicicleta in terms of comments on some of the epigrams. So I
have selected 34 of the 120 epigrams, and added comments. Probably I'll
be embarrassed when I look back in a few years and see what I used to
think some of these epigrams meant.
1. One man's constant is another man's variable.
In Bicicleta, every named constant is a potential parameter, with its
originally specified value as a default.
2. Functions delay binding; data structures induce binding. Moral:
Structure data late in the programming process.
In Bicicleta, data structures are replaced by, in essence, functions
with multiple named return values. Consequently it is never too late
to restructure the data.
3. Syntactic sugar causes cancer of the semicolon.
Bicicleta's basic syntax can be written down in a few lines, but it
does have syntactic sugar.
6. Symmetry is a complexity-reducing concept (co-routines include
subroutines); seek it everywhere.
Bicicleta uses the same construct to replace the data structure,
the procedure, the function, the object, the class, and the module.
Thus many classical OO refactorings become no-ops.
7. It is easier to write an incorrect program than understand a correct
one.
Bicicleta supports interactive experimentation, so that you can
understand correct programs more quickly, and find the bugs in your
incorrect programs as well.
11. If you have a procedure with ten parameters, you probably missed
some.
Bicicleta allows the caller to override the value of any variable in
the routine they call.
15. Everything should be built top-down, except the first time.
To support bottom-up programming, Bicicleta programs execute on
example values as you write them, so that you can see if they do what
you wanted; to support top-down programming, it's easy to stub out
lower-level parts of your code.
19. A language that doesn't affect the way you think about programming,
is not worth knowing.
Bicicleta differs fundamentally from every well-known or widely-used
programming language.
22. A good system can't have a weak command language.
Bicicleta's concise and limitless programming language works for
manual interaction with your data as well as writing programs to be
reused, and there is a smooth slope between the two. It's so good
that the programming environment itself serves as the user
interface for many Bicicleta programs.
24. Perhaps if we wrote programs from childhood on, as adults we'd be
able to read them.
Bicicleta helps children write programs in two ways: first, its
immediate and visual nature enables them to create programs more
easily than traditional systems, and children can study and modify
existing programs in Bicicleta more easily than in traditional
systems, because it is easy to inspect their execution.
25. One can only display complex information in the mind. Like seeing,
movement or flow or alteration of view is more important than the static
picture, no matter how lovely.
Bicicleta makes it instant and easy to see what a program would do if
invoked a little differently; while, of course, no system can make it
easy to understand a complex program, this ability speeds the process
up a bit.
26. There will always be things we wish to say in our programs that in
all known languages can only be said poorly.
The usual solution to this problem is to invent a new domain-specific
language, which can either be a standalone language or embedded in an
existing language. Existing languages vary in how well they support
embedding domain-specific languages in them. Bicicleta is close to
Scheme's and Haskell's excellence here.
28. Around computers it is difficult to find the correct unit of time to
measure progress. Some cathedrals took a century to complete. Can you
imagine the grandeur and scope of a program that would take as long?
Today, we have programs and libraries that have taken 20 or 30 years
--- Emacs, DB2, Oracle, BSD, Nethack, SAS, Ingres/PostgreSQL, BRLCAD,
GCC, and, of course, OS/360/z/OS, VMS, and Microsoft Windows.
Grandeur is not the first term that comes to mind. "Rococo, then
rubble," seems more apt. Perhaps this is because each new generation
of masons cannot understand the work of their fathers, or feels
incompetent to change it? Bicicleta, more than anything else,
supports the understanding of existing Bicicleta programs in an
unprecedented way.
30. In programming, everything we do is a special case of something more
general -- and often we know it too quickly.
Bicicleta is designed to turn this weakness into a strength, by
smoothing the path from a solution to a specific case of a problem to
a more general solution.
35. Everyone can be taught to sculpt: Michelangelo would have had to be
taught not to. So it is with great programmers.
I began programming when I was 4, and when no computer is handy, I
write programs with pen and paper. But I do not think I am yet a
great programmer; I have only had 25 years to learn, and I wasted ten
of them not learning because I thought I was a great programmer.
Perhaps in another 15 years I will be a great programmer.
39. Re graphics: A picture is worth 10K words - but only those to
describe the picture. Hardly any sets of 10K words can be adequately
described with pictures.
Consequently, the user interface of Bicicleta is still essentially
textual in nature, although it accommodates pictures and uses
visual organization.
42. You can measure a programmer's perspective by noting his attitude on
the continuing vitality of FORTRAN.
My perspective is that FORTRAN has begun to absorb progress, and its
continuing vitality is a testament to the importance (above all else)
of language implementation quality, which in this case has won out
over language design quality.
43. In software systems, it is often the early bird that makes the worm.
Bicicleta is a radical rethinking of some of our oldest worms: the
nature of the source/execution distinction, the program/data
distinction, the definition/use distinction, and the development/use
distinction. None of these distinctions disappear, but they change
in nature. Such a rethinking is long overdue.
51. Bringing computers into the home won't change either one, but may
revitalize the corner saloon.
And today we have computers in our homes recycling software systems
designed for use in research labs and hierarchical office
environments. It is time to change the way we interact with
computers again, as fundamentally as the Macintosh did.
57. It is easier to change the specification to fit the program than
vice versa.
This is often because the program, once written, was practical to
write, or to use; while no program that fits the specification was.
59. In English every word can be verbed. Would that it were so in our
programming languages.
In Bicicleta, the distinction betwen data structure and function,
noun and verb, disappears from the language and remains only as a
property of how different things are used. This is possible because
it is purely applicative.
68. If we believe in data structures, we must believe in independent
(hence simultaneous) processing. For why else would we collect items
within a structure? Why do we tolerate languages that give us the one
without the other?
Data structures make programming easier; in the absence of parallel
hardware, concurrent shared-mutable-memory programs only make it
harder. Perhaps a different programming paradigm will change this.
Bicicleta is purely applicative, which offers one way out.
74. Is it possible that software is not like anything else, that it is
meant to be discarded: that the whole point is to see it as a soap
bubble?
Bicicleta is designed with the idea that ephemeral programs quickly
thrown together by end-users are as important as the more enduring
and carefully crafted artifacts upon which they build. Burning Man
has changed me, as has Excel.
76. It is the user who should parameterize procedures, not their
creators.
Any caller of a Bicicleta procedure can override the value of any
variable, up to and including the return value.
94. Interfaces keep things tidy, but don't accelerate growth: Functions
do.
In Bicicleta, as in Smalltalk or Python, any object can be replaced
by another that implements the same (subset of its) interface that
its callers demand, so interfaces are implicit; and any object
attribute can contain functional computation.
100. We will never run out of things to program as long as there is a
single program around.
Bicicleta expands the set of people who can write any particular
program, and reduces the effort required, by reducing the gulfs of
evaluation and action and by making it easier to study the work of
others. This only makes sense if you believe in the above epigram.
103. Purely applicative languages are poorly applicable.
Certainly this was true in 1982; perhaps today Haskell provides a
counterexample, or perhaps not. Bicicleta will fail if it turns out
to be an immutable truth.
104. The proof of a system's value is its existence.
Bicicleta does not yet exist, so its value is unproved.
106. It's difficult to extract sense from strings, but they're the only
communication coin we can count on.
Consequently, Bicicleta stores its programs as strings that you can
send to other people in email or keep in your Darcs or Subversion
repository; but it provides a user interface that supports the
programmer in their attempts to understand the programs much better
than reading the raw strings could.
108. Whenever two programmers meet to criticize their programs, both are
silent.
Unless they are competent, in which case either one can talk for
hours about the flaws in their own program.
109. Think of it! With VLSI we can pack 100 ENIACS in 1 sq. cm.
Yet we cannot yet sell 100 ENIACs to every citizen of the world,
because they can't yet program them, and because our computers are
designed for US businesses, who will pay hundreds of dollars for one.
115. Most people find the concept of programming obvious, but the doing
impossible.
Bicicleta is designed to change this.
117. It goes against the grain of modern education to teach children to
program. What fun is there in making plans, acquiring discipline in
organizing thoughts, devoting attention to detail and learning to be
self-critical?
Bicicleta does not eliminate these requirements of programming, but
it does eliminate other unnecessary barriers to children programming:
the difficulty of imagining in your head events that you can never
see, for example.
120. Adapting old programs to fit new machines usually means adapting
new machines to behave like old ones.
As true today as ever. Much of my computing time today, before
Bicicleta, is spent using my laptop to run Emacs in full-screen mode,
editing code and compiling it with a batch-mode compiler ---
effectively, I'm emulating a space-cadet-keyboard video terminal
talking to a PDP-10, except that some joker labeled my Meta key
"Alt", and I'm writing C instead of Lisp. I'm developing Bicicleta
in Squeak, which pretends my 3D-accelerated video card is a
framebuffer on a colorized Alto that can barely blit by itself.
More information about the Kragen-tol
mailing list