123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- January 2003(This article is derived from a keynote talk at the fall 2002 meeting
- of NEPLS.)Visitors to this country are often surprised to find that
- Americans like to begin a conversation by asking "what do you do?"
- I've never liked this question. I've rarely had a
- neat answer to it. But I think I have finally solved the problem.
- Now, when someone asks me what I do, I look them straight
- in the eye and say "I'm designing a
- new dialect of Lisp."
- I recommend this answer to anyone who doesn't like being asked what
- they do. The conversation will turn immediately to other topics.I don't consider myself to be doing research on programming languages.
- I'm just designing one, in the same way that someone might design
- a building or a chair or a new typeface.
- I'm not trying to discover anything new. I just want
- to make a language that will be good to program in. In some ways,
- this assumption makes life a lot easier.The difference between design and research seems to be a question
- of new versus good. Design doesn't have to be new, but it has to
- be good. Research doesn't have to be good, but it has to be new.
- I think these two paths converge at the top: the best design
- surpasses its predecessors by using new ideas, and the best research
- solves problems that are not only new, but actually worth solving.
- So ultimately we're aiming for the same destination, just approaching
- it from different directions.What I'm going to talk about today is what your target looks like
- from the back. What do you do differently when you treat
- programming languages as a design problem instead of a research topic?The biggest difference is that you focus more on the user.
- Design begins by asking, who is this
- for and what do they need from it? A good architect,
- for example, does not begin by creating a design that he then
- imposes on the users, but by studying the intended users and figuring
- out what they need.Notice I said "what they need," not "what they want." I don't mean
- to give the impression that working as a designer means working as
- a sort of short-order cook, making whatever the client tells you
- to. This varies from field to field in the arts, but
- I don't think there is any field in which the best work is done by
- the people who just make exactly what the customers tell them to.The customer is always right in
- the sense that the measure of good design is how well it works
- for the user. If you make a novel that bores everyone, or a chair
- that's horribly uncomfortable to sit in, then you've done a bad
- job, period. It's no defense to say that the novel or the chair
- is designed according to the most advanced theoretical principles.And yet, making what works for the user doesn't mean simply making
- what the user tells you to. Users don't know what all the choices
- are, and are often mistaken about what they really want.The answer to the paradox, I think, is that you have to design
- for the user, but you have to design what the user needs, not simply
- what he says he wants.
- It's much like being a doctor. You can't just treat a patient's
- symptoms. When a patient tells you his symptoms, you have to figure
- out what's actually wrong with him, and treat that.This focus on the user is a kind of axiom from which most of the
- practice of good design can be derived, and around which most design
- issues center.If good design must do what the user needs, who is the user? When
- I say that design must be for users, I don't mean to imply that good
- design aims at some kind of
- lowest common denominator. You can pick any group of users you
- want. If you're designing a tool, for example, you can design it
- for anyone from beginners to experts, and what's good design
- for one group might be bad for another. The point
- is, you have to pick some group of users. I don't think you can
- even talk about good or bad design except with
- reference to some intended user.You're most likely to get good design if the intended users include
- the designer himself. When you design something
- for a group that doesn't include you, it tends to be for people
- you consider to be less sophisticated than you, not more sophisticated.That's a problem, because looking down on the user, however benevolently,
- seems inevitably to corrupt the designer.
- I suspect that very few housing
- projects in the US were designed by architects who expected to live
- in them. You can see the same thing
- in programming languages. C, Lisp, and Smalltalk were created for
- their own designers to use. Cobol, Ada, and Java, were created
- for other people to use.If you think you're designing something for idiots, the odds are
- that you're not designing something good, even for idiots.
- Even if you're designing something for the most sophisticated
- users, though, you're still designing for humans. It's different
- in research. In math you
- don't choose abstractions because they're
- easy for humans to understand; you choose whichever make the
- proof shorter. I think this is true for the sciences generally.
- Scientific ideas are not meant to be ergonomic.Over in the arts, things are very different. Design is
- all about people. The human body is a strange
- thing, but when you're designing a chair,
- that's what you're designing for, and there's no way around it.
- All the arts have to pander to the interests and limitations
- of humans. In painting, for example, all other things being
- equal a painting with people in it will be more interesting than
- one without. It is not merely an accident of history that
- the great paintings of the Renaissance are all full of people.
- If they hadn't been, painting as a medium wouldn't have the prestige
- that it does.Like it or not, programming languages are also for people,
- and I suspect the human brain is just as lumpy and idiosyncratic
- as the human body. Some ideas are easy for people to grasp
- and some aren't. For example, we seem to have a very limited
- capacity for dealing with detail. It's this fact that makes
- programing languages a good idea in the first place; if we
- could handle the detail, we could just program in machine
- language.Remember, too, that languages are not
- primarily a form for finished programs, but something that
- programs have to be developed in. Anyone in the arts could
- tell you that you might want different mediums for the
- two situations. Marble, for example, is a nice, durable
- medium for finished ideas, but a hopelessly inflexible one
- for developing new ideas.A program, like a proof,
- is a pruned version of a tree that in the past has had
- false starts branching off all over it. So the test of
- a language is not simply how clean the finished program looks
- in it, but how clean the path to the finished program was.
- A design choice that gives you elegant finished programs
- may not give you an elegant design process. For example,
- I've written a few macro-defining macros full of nested
- backquotes that look now like little gems, but writing them
- took hours of the ugliest trial and error, and frankly, I'm still
- not entirely sure they're correct.We often act as if the test of a language were how good
- finished programs look in it.
- It seems so convincing when you see the same program
- written in two languages, and one version is much shorter.
- When you approach the problem from the direction of the
- arts, you're less likely to depend on this sort of
- test. You don't want to end up with a programming
- language like marble.For example, it is a huge win in developing software to
- have an interactive toplevel, what in Lisp is called a
- read-eval-print loop. And when you have one this has
- real effects on the design of the language. It would not
- work well for a language where you have to declare
- variables before using them, for example. When you're
- just typing expressions into the toplevel, you want to be
- able to set x to some value and then start doing things
- to x. You don't want to have to declare the type of x
- first. You may dispute either of the premises, but if
- a language has to have a toplevel to be convenient, and
- mandatory type declarations are incompatible with a
- toplevel, then no language that makes type declarations
- mandatory could be convenient to program in.In practice, to get good design you have to get close, and stay
- close, to your users. You have to calibrate your ideas on actual
- users constantly, especially in the beginning. One of the reasons
- Jane Austen's novels are so good is that she read them out loud to
- her family. That's why she never sinks into self-indulgently arty
- descriptions of landscapes,
- or pretentious philosophizing. (The philosophy's there, but it's
- woven into the story instead of being pasted onto it like a label.)
- If you open an average "literary" novel and imagine reading it out loud
- to your friends as something you'd written, you'll feel all too
- keenly what an imposition that kind of thing is upon the reader.In the software world, this idea is known as Worse is Better.
- Actually, there are several ideas mixed together in the concept of
- Worse is Better, which is why people are still arguing about
- whether worse
- is actually better or not. But one of the main ideas in that
- mix is that if you're building something new, you should get a
- prototype in front of users as soon as possible.The alternative approach might be called the Hail Mary strategy.
- Instead of getting a prototype out quickly and gradually refining
- it, you try to create the complete, finished, product in one long
- touchdown pass. As far as I know, this is a
- recipe for disaster. Countless startups destroyed themselves this
- way during the Internet bubble. I've never heard of a case
- where it worked.What people outside the software world may not realize is that
- Worse is Better is found throughout the arts.
- In drawing, for example, the idea was discovered during the
- Renaissance. Now almost every drawing teacher will tell you that
- the right way to get an accurate drawing is not to
- work your way slowly around the contour of an object, because errors will
- accumulate and you'll find at the end that the lines don't meet.
- Instead you should draw a few quick lines in roughly the right place,
- and then gradually refine this initial sketch.In most fields, prototypes
- have traditionally been made out of different materials.
- Typefaces to be cut in metal were initially designed
- with a brush on paper. Statues to be cast in bronze
- were modelled in wax. Patterns to be embroidered on tapestries
- were drawn on paper with ink wash. Buildings to be
- constructed from stone were tested on a smaller scale in wood.What made oil paint so exciting, when it
- first became popular in the fifteenth century, was that you
- could actually make the finished work from the prototype.
- You could make a preliminary drawing if you wanted to, but you
- weren't held to it; you could work out all the details, and
- even make major changes, as you finished the painting.You can do this in software too. A prototype doesn't have to
- be just a model; you can refine it into the finished product.
- I think you should always do this when you can. It lets you
- take advantage of new insights you have along the way. But
- perhaps even more important, it's good for morale.Morale is key in design. I'm surprised people
- don't talk more about it. One of my first
- drawing teachers told me: if you're bored when you're
- drawing something, the drawing will look boring.
- For example, suppose you have to draw a building, and you
- decide to draw each brick individually. You can do this
- if you want, but if you get bored halfway through and start
- making the bricks mechanically instead of observing each one,
- the drawing will look worse than if you had merely suggested
- the bricks.Building something by gradually refining a prototype is good
- for morale because it keeps you engaged. In software, my
- rule is: always have working code. If you're writing
- something that you'll be able to test in an hour, then you
- have the prospect of an immediate reward to motivate you.
- The same is true in the arts, and particularly in oil painting.
- Most painters start with a blurry sketch and gradually
- refine it.
- If you work this way, then in principle
- you never have to end the day with something that actually
- looks unfinished. Indeed, there is even a saying among
- painters: "A painting is never finished, you just stop
- working on it." This idea will be familiar to anyone who
- has worked on software.Morale is another reason that it's hard to design something
- for an unsophisticated user. It's hard to stay interested in
- something you don't like yourself. To make something
- good, you have to be thinking, "wow, this is really great,"
- not "what a piece of shit; those fools will love it."Design means making things for humans. But it's not just the
- user who's human. The designer is human too.Notice all this time I've been talking about "the designer."
- Design usually has to be under the control of a single person to
- be any good. And yet it seems to be possible for several people
- to collaborate on a research project. This seems to
- me one of the most interesting differences between research and
- design.There have been famous instances of collaboration in the arts,
- but most of them seem to have been cases of molecular bonding rather
- than nuclear fusion. In an opera it's common for one person to
- write the libretto and another to write the music. And during the Renaissance,
- journeymen from northern
- Europe were often employed to do the landscapes in the
- backgrounds of Italian paintings. But these aren't true collaborations.
- They're more like examples of Robert Frost's
- "good fences make good neighbors." You can stick instances
- of good design together, but within each individual project,
- one person has to be in control.I'm not saying that good design requires that one person think
- of everything. There's nothing more valuable than the advice
- of someone whose judgement you trust. But after the talking is
- done, the decision about what to do has to rest with one person.Why is it that research can be done by collaborators and
- design can't? This is an interesting question. I don't
- know the answer. Perhaps,
- if design and research converge, the best research is also
- good design, and in fact can't be done by collaborators.
- A lot of the most famous scientists seem to have worked alone.
- But I don't know enough to say whether there
- is a pattern here. It could be simply that many famous scientists
- worked when collaboration was less common.Whatever the story is in the sciences, true collaboration
- seems to be vanishingly rare in the arts. Design by committee is a
- synonym for bad design. Why is that so? Is there some way to
- beat this limitation?I'm inclined to think there isn't-- that good design requires
- a dictator. One reason is that good design has to
- be all of a piece. Design is not just for humans, but
- for individual humans. If a design represents an idea that
- fits in one person's head, then the idea will fit in the user's
- head too.Related:
|