| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- Want to start a startup? Get funded by
- Y Combinator.
- April 2001, rev. April 2003(This article is derived from a talk given at the 2001 Franz
- Developer Symposium.)
- In the summer of 1995, my friend Robert Morris and I
- started a startup called
- Viaweb.
- Our plan was to write
- software that would let end users build online stores.
- What was novel about this software, at the time, was
- that it ran on our server, using ordinary Web pages
- as the interface.A lot of people could have been having this idea at the
- same time, of course, but as far as I know, Viaweb was
- the first Web-based application. It seemed such
- a novel idea to us that we named the company after it:
- Viaweb, because our software worked via the Web,
- instead of running on your desktop computer.Another unusual thing about this software was that it
- was written primarily in a programming language called
- Lisp. It was one of the first big end-user
- applications to be written in Lisp, which up till then
- had been used mostly in universities and research labs. [1]The Secret WeaponEric Raymond has written an essay called "How to Become a Hacker,"
- and in it, among other things, he tells would-be hackers what
- languages they should learn. He suggests starting with Python and
- Java, because they are easy to learn. The serious hacker will also
- want to learn C, in order to hack Unix, and Perl for system
- administration and cgi scripts. Finally, the truly serious hacker
- should consider learning Lisp:
- Lisp is worth learning for the profound enlightenment experience
- you will have when you finally get it; that experience will make
- you a better programmer for the rest of your days, even if you
- never actually use Lisp itself a lot.
- This is the same argument you tend to hear for learning Latin. It
- won't get you a job, except perhaps as a classics professor, but
- it will improve your mind, and make you a better writer in languages
- you do want to use, like English.But wait a minute. This metaphor doesn't stretch that far. The
- reason Latin won't get you a job is that no one speaks it. If you
- write in Latin, no one can understand you. But Lisp is a computer
- language, and computers speak whatever language you, the programmer,
- tell them to.So if Lisp makes you a better programmer, like he says, why wouldn't
- you want to use it? If a painter were offered a brush that would
- make him a better painter, it seems to me that he would want to
- use it in all his paintings, wouldn't he? I'm not trying to make
- fun of Eric Raymond here. On the whole, his advice is good. What
- he says about Lisp is pretty much the conventional wisdom. But
- there is a contradiction in the conventional wisdom: Lisp will
- make you a better programmer, and yet you won't use it.Why not? Programming languages are just tools, after all. If Lisp
- really does yield better programs, you should use it. And if it
- doesn't, then who needs it?This is not just a theoretical question. Software is a very
- competitive business, prone to natural monopolies. A company that
- gets software written faster and better will, all other things
- being equal, put its competitors out of business. And when you're
- starting a startup, you feel this very keenly. Startups tend to
- be an all or nothing proposition. You either get rich, or you get
- nothing. In a startup, if you bet on the wrong technology, your
- competitors will crush you.Robert and I both knew Lisp well, and we couldn't see any reason
- not to trust our instincts and go with Lisp. We knew that everyone
- else was writing their software in C++ or Perl. But we also knew
- that that didn't mean anything. If you chose technology that way,
- you'd be running Windows. When you choose technology, you have to
- ignore what other people are doing, and consider only what will
- work the best.This is especially true in a startup. In a big company, you can
- do what all the other big companies are doing. But a startup can't
- do what all the other startups do. I don't think a lot of people
- realize this, even in startups.The average big company grows at about ten percent a year. So if
- you're running a big company and you do everything the way the
- average big company does it, you can expect to do as well as the
- average big company-- that is, to grow about ten percent a year.The same thing will happen if you're running a startup, of course.
- If you do everything the way the average startup does it, you should
- expect average performance. The problem here is, average performance
- means that you'll go out of business. The survival rate for startups
- is way less than fifty percent. So if you're running a startup,
- you had better be doing something odd. If not, you're in trouble.Back in 1995, we knew something that I don't think our competitors
- understood, and few understand even now: when you're writing
- software that only has to run on your own servers, you can use
- any language you want. When you're writing desktop software,
- there's a strong bias toward writing applications in the same
- language as the operating system. Ten years ago, writing applications
- meant writing applications in C. But with Web-based software,
- especially when you have the source code of both the language and
- the operating system, you can use whatever language you want.This new freedom is a double-edged sword, however. Now that you
- can use any language, you have to think about which one to use.
- Companies that try to pretend nothing has changed risk finding that
- their competitors do not.If you can use any language, which do you use? We chose Lisp.
- For one thing, it was obvious that rapid development would be
- important in this market. We were all starting from scratch, so
- a company that could get new features done before its competitors
- would have a big advantage. We knew Lisp was a really good language
- for writing software quickly, and server-based applications magnify
- the effect of rapid development, because you can release software
- the minute it's done.If other companies didn't want to use Lisp, so much the better.
- It might give us a technological edge, and we needed all the help
- we could get. When we started Viaweb, we had no experience in
- business. We didn't know anything about marketing, or hiring
- people, or raising money, or getting customers. Neither of us had
- ever even had what you would call a real job. The only thing we
- were good at was writing software. We hoped that would save us.
- Any advantage we could get in the software department, we would
- take.So you could say that using Lisp was an experiment. Our hypothesis
- was that if we wrote our software in Lisp, we'd be able to get
- features done faster than our competitors, and also to do things
- in our software that they couldn't do. And because Lisp was so
- high-level, we wouldn't need a big development team, so our costs
- would be lower. If this were so, we could offer a better product
- for less money, and still make a profit. We would end up getting
- all the users, and our competitors would get none, and eventually
- go out of business. That was what we hoped would happen, anyway.What were the results of this experiment? Somewhat surprisingly,
- it worked. We eventually had many competitors, on the order of
- twenty to thirty of them, but none of their software could compete
- with ours. We had a wysiwyg online store builder that ran on the
- server and yet felt like a desktop application. Our competitors
- had cgi scripts. And we were always far ahead of them in features.
- Sometimes, in desperation, competitors would try to introduce
- features that we didn't have. But with Lisp our development cycle
- was so fast that we could sometimes duplicate a new feature within
- a day or two of a competitor announcing it in a press release. By
- the time journalists covering the press release got round to calling
- us, we would have the new feature too.It must have seemed to our competitors that we had some kind of
- secret weapon-- that we were decoding their Enigma traffic or
- something. In fact we did have a secret weapon, but it was simpler
- than they realized. No one was leaking news of their features to
- us. We were just able to develop software faster than anyone
- thought possible.When I was about nine I happened to get hold of a copy of The Day
- of the Jackal, by Frederick Forsyth. The main character is an
- assassin who is hired to kill the president of France. The assassin
- has to get past the police to get up to an apartment that overlooks
- the president's route. He walks right by them, dressed up as an
- old man on crutches, and they never suspect him.Our secret weapon was similar. We wrote our software in a weird
- AI language, with a bizarre syntax full of parentheses. For years
- it had annoyed me to hear Lisp described that way. But now it
- worked to our advantage. In business, there is nothing more valuable
- than a technical advantage your competitors don't understand. In
- business, as in war, surprise is worth as much as force.And so, I'm a little embarrassed to say, I never said anything
- publicly about Lisp while we were working on Viaweb. We never
- mentioned it to the press, and if you searched for Lisp on our Web
- site, all you'd find were the titles of two books in my bio. This
- was no accident. A startup should give its competitors as little
- information as possible. If they didn't know what language our
- software was written in, or didn't care, I wanted to keep it that
- way.[2]The people who understood our technology best were the customers.
- They didn't care what language Viaweb was written in either, but
- they noticed that it worked really well. It let them build great
- looking online stores literally in minutes. And so, by word of
- mouth mostly, we got more and more users. By the end of 1996 we
- had about 70 stores online. At the end of 1997 we had 500. Six
- months later, when Yahoo bought us, we had 1070 users. Today, as
- Yahoo Store, this software continues to dominate its market. It's
- one of the more profitable pieces of Yahoo, and the stores built
- with it are the foundation of Yahoo Shopping. I left Yahoo in
- 1999, so I don't know exactly how many users they have now, but
- the last I heard there were about 20,000.
- The Blub ParadoxWhat's so great about Lisp? And if Lisp is so great, why doesn't
- everyone use it? These sound like rhetorical questions, but actually
- they have straightforward answers. Lisp is so great not because
- of some magic quality visible only to devotees, but because it is
- simply the most powerful language available. And the reason everyone
- doesn't use it is that programming languages are not merely
- technologies, but habits of mind as well, and nothing changes
- slower. Of course, both these answers need explaining.I'll begin with a shockingly controversial statement: programming
- languages vary in power.Few would dispute, at least, that high level languages are more
- powerful than machine language. Most programmers today would agree
- that you do not, ordinarily, want to program in machine language.
- Instead, you should program in a high-level language, and have a
- compiler translate it into machine language for you. This idea is
- even built into the hardware now: since the 1980s, instruction sets
- have been designed for compilers rather than human programmers.Everyone knows it's a mistake to write your whole program by hand
- in machine language. What's less often understood is that there
- is a more general principle here: that if you have a choice of
- several languages, it is, all other things being equal, a mistake
- to program in anything but the most powerful one. [3]There are many exceptions to this rule. If you're writing a program
- that has to work very closely with a program written in a certain
- language, it might be a good idea to write the new program in the
- same language. If you're writing a program that only has to do
- something very simple, like number crunching or bit manipulation,
- you may as well use a less abstract language, especially since it
- may be slightly faster. And if you're writing a short, throwaway
- program, you may be better off just using whatever language has
- the best library functions for the task. But in general, for
- application software, you want to be using the most powerful
- (reasonably efficient) language you can get, and using anything
- else is a mistake, of exactly the same kind, though possibly in a
- lesser degree, as programming in machine language.You can see that machine language is very low level. But, at least
- as a kind of social convention, high-level languages are often all
- treated as equivalent. They're not. Technically the term "high-level
- language" doesn't mean anything very definite. There's no dividing
- line with machine languages on one side and all the high-level
- languages on the other. Languages fall along a continuum [4] of
- abstractness, from the most powerful all the way down to machine
- languages, which themselves vary in power.Consider Cobol. Cobol is a high-level language, in the sense that
- it gets compiled into machine language. Would anyone seriously
- argue that Cobol is equivalent in power to, say, Python? It's
- probably closer to machine language than Python.Or how about Perl 4? Between Perl 4 and Perl 5, lexical closures
- got added to the language. Most Perl hackers would agree that Perl
- 5 is more powerful than Perl 4. But once you've admitted that,
- you've admitted that one high level language can be more powerful
- than another. And it follows inexorably that, except in special
- cases, you ought to use the most powerful you can get.This idea is rarely followed to its conclusion, though. After a
- certain age, programmers rarely switch languages voluntarily.
- Whatever language people happen to be used to, they tend to consider
- just good enough.Programmers get very attached to their favorite languages, and I
- don't want to hurt anyone's feelings, so to explain this point I'm
- going to use a hypothetical language called Blub. Blub falls right
- in the middle of the abstractness continuum. It is not the most
- powerful language, but it is more powerful than Cobol or machine
- language.And in fact, our hypothetical Blub programmer wouldn't use either
- of them. Of course he wouldn't program in machine language. That's
- what compilers are for. And as for Cobol, he doesn't know how
- anyone can get anything done with it. It doesn't even have x (Blub
- feature of your choice).As long as our hypothetical Blub programmer is looking down the
- power continuum, he knows he's looking down. Languages less powerful
- than Blub are obviously less powerful, because they're missing some
- feature he's used to. But when our hypothetical Blub programmer
- looks in the other direction, up the power continuum, he doesn't
- realize he's looking up. What he sees are merely weird languages.
- He probably considers them about equivalent in power to Blub, but
- with all this other hairy stuff thrown in as well. Blub is good
- enough for him, because he thinks in Blub.When we switch to the point of view of a programmer using any of
- the languages higher up the power continuum, however, we find that
- he in turn looks down upon Blub. How can you get anything done in
- Blub? It doesn't even have y.By induction, the only programmers in a position to see all the
- differences in power between the various languages are those who
- understand the most powerful one. (This is probably what Eric
- Raymond meant about Lisp making you a better programmer.) You can't
- trust the opinions of the others, because of the Blub paradox:
- they're satisfied with whatever language they happen to use, because
- it dictates the way they think about programs.I know this from my own experience, as a high school kid writing
- programs in Basic. That language didn't even support recursion.
- It's hard to imagine writing programs without using recursion, but
- I didn't miss it at the time. I thought in Basic. And I was a
- whiz at it. Master of all I surveyed.The five languages that Eric Raymond recommends to hackers fall at
- various points on the power continuum. Where they fall relative
- to one another is a sensitive topic. What I will say is that I
- think Lisp is at the top. And to support this claim I'll tell you
- about one of the things I find missing when I look at the other
- four languages. How can you get anything done in them, I think,
- without macros? [5]Many languages have something called a macro. But Lisp macros are
- unique. And believe it or not, what they do is related to the
- parentheses. The designers of Lisp didn't put all those parentheses
- in the language just to be different. To the Blub programmer, Lisp
- code looks weird. But those parentheses are there for a reason.
- They are the outward evidence of a fundamental difference between
- Lisp and other languages.Lisp code is made out of Lisp data objects. And not in the trivial
- sense that the source files contain characters, and strings are
- one of the data types supported by the language. Lisp code, after
- it's read by the parser, is made of data structures that you can
- traverse.If you understand how compilers work, what's really going on is
- not so much that Lisp has a strange syntax as that Lisp has no
- syntax. You write programs in the parse trees that get generated
- within the compiler when other languages are parsed. But these
- parse trees are fully accessible to your programs. You can write
- programs that manipulate them. In Lisp, these programs are called
- macros. They are programs that write programs.Programs that write programs? When would you ever want to do that?
- Not very often, if you think in Cobol. All the time, if you think
- in Lisp. It would be convenient here if I could give an example
- of a powerful macro, and say there! how about that? But if I did,
- it would just look like gibberish to someone who didn't know Lisp;
- there isn't room here to explain everything you'd need to know to
- understand what it meant. In
- Ansi Common Lisp I tried to move
- things along as fast as I could, and even so I didn't get to macros
- until page 160.But I think I can give a kind of argument that might be convincing.
- The source code of the Viaweb editor was probably about 20-25%
- macros. Macros are harder to write than ordinary Lisp functions,
- and it's considered to be bad style to use them when they're not
- necessary. So every macro in that code is there because it has to
- be. What that means is that at least 20-25% of the code in this
- program is doing things that you can't easily do in any other
- language. However skeptical the Blub programmer might be about my
- claims for the mysterious powers of Lisp, this ought to make him
- curious. We weren't writing this code for our own amusement. We
- were a tiny startup, programming as hard as we could in order to
- put technical barriers between us and our competitors.A suspicious person might begin to wonder if there was some
- correlation here. A big chunk of our code was doing things that
- are very hard to do in other languages. The resulting software
- did things our competitors' software couldn't do. Maybe there was
- some kind of connection. I encourage you to follow that thread.
- There may be more to that old man hobbling along on his crutches
- than meets the eye.Aikido for StartupsBut I don't expect to convince anyone
- (over 25)
- to go out and learn
- Lisp. The purpose of this article is not to change anyone's mind,
- but to reassure people already interested in using Lisp-- people
- who know that Lisp is a powerful language, but worry because it
- isn't widely used. In a competitive situation, that's an advantage.
- Lisp's power is multiplied by the fact that your competitors don't
- get it.If you think of using Lisp in a startup, you shouldn't worry that
- it isn't widely understood. You should hope that it stays that
- way. And it's likely to. It's the nature of programming languages
- to make most people satisfied with whatever they currently use.
- Computer hardware changes so much faster than personal habits that
- programming practice is usually ten to twenty years behind the
- processor. At places like MIT they were writing programs in
- high-level languages in the early 1960s, but many companies continued
- to write code in machine language well into the 1980s. I bet a
- lot of people continued to write machine language until the processor,
- like a bartender eager to close up and go home, finally kicked them
- out by switching to a risc instruction set.Ordinarily technology changes fast. But programming languages are
- different: programming languages are not just technology, but what
- programmers think in. They're half technology and half religion.[6]
- And so the median language, meaning whatever language the median
- programmer uses, moves as slow as an iceberg. Garbage collection,
- introduced by Lisp in about 1960, is now widely considered to be
- a good thing. Runtime typing, ditto, is growing in popularity.
- Lexical closures, introduced by Lisp in the early 1970s, are now,
- just barely, on the radar screen. Macros, introduced by Lisp in the
- mid 1960s, are still terra incognita.Obviously, the median language has enormous momentum. I'm not
- proposing that you can fight this powerful force. What I'm proposing
- is exactly the opposite: that, like a practitioner of Aikido, you
- can use it against your opponents.If you work for a big company, this may not be easy. You will have
- a hard time convincing the pointy-haired boss to let you build
- things in Lisp, when he has just read in the paper that some other
- language is poised, like Ada was twenty years ago, to take over
- the world. But if you work for a startup that doesn't have
- pointy-haired bosses yet, you can, like we did, turn the Blub
- paradox to your advantage: you can use technology that your
- competitors, glued immovably to the median language, will never be
- able to match.If you ever do find yourself working for a startup, here's a handy
- tip for evaluating competitors. Read their job listings. Everything
- else on their site may be stock photos or the prose equivalent,
- but the job listings have to be specific about what they want, or
- they'll get the wrong candidates.During the years we worked on Viaweb I read a lot of job descriptions.
- A new competitor seemed to emerge out of the woodwork every month
- or so. The first thing I would do, after checking to see if they
- had a live online demo, was look at their job listings. After a
- couple years of this I could tell which companies to worry about
- and which not to. The more of an IT flavor the job descriptions
- had, the less dangerous the company was. The safest kind were the
- ones that wanted Oracle experience. You never had to worry about
- those. You were also safe if they said they wanted C++ or Java
- developers. If they wanted Perl or Python programmers, that would
- be a bit frightening-- that's starting to sound like a company
- where the technical side, at least, is run by real hackers. If I
- had ever seen a job posting looking for Lisp hackers, I would have
- been really worried.
- Notes[1] Viaweb at first had two parts: the editor, written in Lisp,
- which people used to build their sites, and the ordering system,
- written in C, which handled orders. The first version was mostly
- Lisp, because the ordering system was small. Later we added two
- more modules, an image generator written in C, and a back-office
- manager written mostly in Perl.In January 2003, Yahoo released a new version of the editor
- written in C++ and Perl. It's hard to say whether the program is no
- longer written in Lisp, though, because to translate this program
- into C++ they literally had to write a Lisp interpreter: the source
- files of all the page-generating templates are still, as far as I
- know, Lisp code. (See Greenspun's Tenth Rule.)[2] Robert Morris says that I didn't need to be secretive, because
- even if our competitors had known we were using Lisp, they wouldn't
- have understood why: "If they were that smart they'd already be
- programming in Lisp."[3] All languages are equally powerful in the sense of being Turing
- equivalent, but that's not the sense of the word programmers care
- about. (No one wants to program a Turing machine.) The kind of
- power programmers care about may not be formally definable, but
- one way to explain it would be to say that it refers to features
- you could only get in the less powerful language by writing an
- interpreter for the more powerful language in it. If language A
- has an operator for removing spaces from strings and language B
- doesn't, that probably doesn't make A more powerful, because you
- can probably write a subroutine to do it in B. But if A supports,
- say, recursion, and B doesn't, that's not likely to be something
- you can fix by writing library functions.[4] Note to nerds: or possibly a lattice, narrowing toward the top;
- it's not the shape that matters here but the idea that there is at
- least a partial order.[5] It is a bit misleading to treat macros as a separate feature.
- In practice their usefulness is greatly enhanced by other Lisp
- features like lexical closures and rest parameters.[6] As a result, comparisons of programming languages either take
- the form of religious wars or undergraduate textbooks so determinedly
- neutral that they're really works of anthropology. People who
- value their peace, or want tenure, avoid the topic. But the question
- is only half a religious one; there is something there worth
- studying, especially if you want to design new languages.
|