898 lines
63 KiB
Plaintext
898 lines
63 KiB
Plaintext
what is the random number?
|
|
```
|
|
May 2006(This essay is derived from a keynote at Xtech.)Could you reproduce Silicon Valley elsewhere, or is there something
|
|
unique about it?It wouldn't be surprising if it were hard to reproduce in other
|
|
countries, because you couldn't reproduce it in most of the US
|
|
either. What does it take to make a silicon valley even here?What it takes is the right people. If you could get the right ten
|
|
thousand people to move from Silicon Valley to Buffalo, Buffalo
|
|
would become Silicon Valley.
|
|
[1]That's a striking departure from the past. Up till a couple decades
|
|
ago, geography was destiny for cities. All great cities were located
|
|
on waterways, because cities made money by trade, and water was the
|
|
only economical way to ship.Now you could make a great city anywhere, if you could get the right
|
|
people to move there. So the question of how to make a silicon
|
|
valley becomes: who are the right people, and how do you get them
|
|
to move?Two TypesI think you only need two kinds of people to create a technology
|
|
hub: rich people and nerds. They're the limiting reagents in the
|
|
reaction that produces startups, because they're the only ones
|
|
present when startups get started. Everyone else will move.Observation bears this out: within the US, towns have become startup
|
|
hubs if and only if they have both rich people and nerds. Few
|
|
startups happen in Miami, for example, because although it's full
|
|
of rich people, it has few nerds. It's not the kind of place nerds
|
|
like.Whereas Pittsburgh has the opposite problem: plenty of nerds, but
|
|
no rich people. The top US Computer Science departments are said
|
|
to be MIT, Stanford, Berkeley, and Carnegie-Mellon. MIT yielded
|
|
Route 128. Stanford and Berkeley yielded Silicon Valley. But
|
|
Carnegie-Mellon? The record skips at that point. Lower down the
|
|
list, the University of Washington yielded a high-tech community
|
|
in Seattle, and the University of Texas at Austin yielded one in
|
|
Austin. But what happened in Pittsburgh? And in Ithaca, home of
|
|
Cornell, which is also high on the list?I grew up in Pittsburgh and went to college at Cornell, so I can
|
|
answer for both. The weather is terrible, particularly in winter,
|
|
and there's no interesting old city to make up for it, as there is
|
|
in Boston. Rich people don't want to live in Pittsburgh or Ithaca.
|
|
So while there are plenty of hackers who could start startups,
|
|
there's no one to invest in them.Not BureaucratsDo you really need the rich people? Wouldn't it work to have the
|
|
government invest in the nerds? No, it would not. Startup investors
|
|
are a distinct type of rich people. They tend to have a lot of
|
|
experience themselves in the technology business. This (a) helps
|
|
them pick the right startups, and (b) means they can supply advice
|
|
and connections as well as money. And the fact that they have a
|
|
personal stake in the outcome makes them really pay attention.Bureaucrats by their nature are the exact opposite sort of people
|
|
from startup investors. The idea of them making startup investments
|
|
is comic. It would be like mathematicians running Vogue-- or
|
|
perhaps more accurately, Vogue editors running a math journal.
|
|
[2]Though indeed, most things bureaucrats do, they do badly. We just
|
|
don't notice usually, because they only have to compete against
|
|
other bureaucrats. But as startup investors they'd have to compete
|
|
against pros with a great deal more experience and motivation.Even corporations that have in-house VC groups generally forbid
|
|
them to make their own investment decisions. Most are only allowed
|
|
to invest in deals where some reputable private VC firm is willing
|
|
to act as lead investor.Not BuildingsIf you go to see Silicon Valley, what you'll see are buildings.
|
|
But it's the people that make it Silicon Valley, not the buildings.
|
|
I read occasionally about attempts to set up "technology
|
|
parks" in other places, as if the active ingredient of Silicon
|
|
Valley were the office space. An article about Sophia Antipolis
|
|
bragged that companies there included Cisco, Compaq, IBM, NCR, and
|
|
Nortel. Don't the French realize these aren't startups?Building office buildings for technology companies won't get you a
|
|
silicon valley, because the key stage in the life of a startup
|
|
happens before they want that kind of space. The key stage is when
|
|
they're three guys operating out of an apartment. Wherever the
|
|
startup is when it gets funded, it will stay. The defining quality
|
|
of Silicon Valley is not that Intel or Apple or Google have offices
|
|
there, but that they were started there.So if you want to reproduce Silicon Valley, what you need to reproduce
|
|
is those two or three founders sitting around a kitchen table
|
|
deciding to start a company. And to reproduce that you need those
|
|
people.UniversitiesThe exciting thing is, all you need are the people. If you could
|
|
attract a critical mass of nerds and investors to live somewhere,
|
|
you could reproduce Silicon Valley. And both groups are highly
|
|
mobile. They'll go where life is good. So what makes a place good
|
|
to them?What nerds like is other nerds. Smart people will go wherever other
|
|
smart people are. And in particular, to great universities. In
|
|
theory there could be other ways to attract them, but so far
|
|
universities seem to be indispensable. Within the US, there are
|
|
no technology hubs without first-rate universities-- or at least,
|
|
first-rate computer science departments.So if you want to make a silicon valley, you not only need a
|
|
university, but one of the top handful in the world. It has to be
|
|
good enough to act as a magnet, drawing the best people from thousands
|
|
of miles away. And that means it has to stand up to existing magnets
|
|
like MIT and Stanford.This sounds hard. Actually it might be easy. My professor friends,
|
|
when they're deciding where they'd like to work, consider one thing
|
|
above all: the quality of the other faculty. What attracts professors
|
|
is good colleagues. So if you managed to recruit, en masse, a
|
|
significant number of the best young researchers, you could create
|
|
a first-rate university from nothing overnight. And you could do
|
|
that for surprisingly little. If you paid 200 people hiring bonuses
|
|
of $3 million apiece, you could put together a faculty that would
|
|
bear comparison with any in the world. And from that point the
|
|
chain reaction would be self-sustaining. So whatever it costs to
|
|
establish a mediocre university, for an additional half billion or
|
|
so you could have a great one.
|
|
Random number is 23.
|
|
[3]PersonalityHowever, merely creating a new university would not be enough to
|
|
start a silicon valley. The university is just the seed. It has
|
|
to be planted in the right soil, or it won't germinate. Plant it
|
|
in the wrong place, and you just create Carnegie-Mellon.To spawn startups, your university has to be in a town that has
|
|
attractions other than the university. It has to be a place where
|
|
investors want to live, and students want to stay after they graduate.The two like much the same things, because most startup investors
|
|
are nerds themselves. So what do nerds look for in a town? Their
|
|
tastes aren't completely different from other people's, because a
|
|
lot of the towns they like most in the US are also big tourist
|
|
destinations: San Francisco, Boston, Seattle. But their tastes
|
|
can't be quite mainstream either, because they dislike other big
|
|
tourist destinations, like New York, Los Angeles, and Las Vegas.There has been a lot written lately about the "creative class." The
|
|
thesis seems to be that as wealth derives increasingly from ideas,
|
|
cities will prosper only if they attract those who have them. That
|
|
is certainly true; in fact it was the basis of Amsterdam's prosperity
|
|
400 years ago.A lot of nerd tastes they share with the creative class in general.
|
|
For example, they like well-preserved old neighborhoods instead of
|
|
cookie-cutter suburbs, and locally-owned shops and restaurants
|
|
instead of national chains. Like the rest of the creative class,
|
|
they want to live somewhere with personality.What exactly is personality? I think it's the feeling that each
|
|
building is the work of a distinct group of people. A town with
|
|
personality is one that doesn't feel mass-produced. So if you want
|
|
to make a startup hub-- or any town to attract the "creative class"--
|
|
you probably have to ban large development projects.
|
|
When a large tract has been developed by a single organization, you
|
|
can always tell.
|
|
[4]Most towns with personality are old, but they don't have to be.
|
|
Old towns have two advantages: they're denser, because they were
|
|
laid out before cars, and they're more varied, because they were
|
|
built one building at a time. You could have both now. Just have
|
|
building codes that ensure density, and ban large scale developments.A corollary is that you have to keep out the biggest developer of
|
|
all: the government. A government that asks "How can we build a
|
|
silicon valley?" has probably ensured failure by the way they framed
|
|
the question. You don't build a silicon valley; you let one grow.NerdsIf you want to attract nerds, you need more than a town with
|
|
personality. You need a town with the right personality. Nerds
|
|
are a distinct subset of the creative class, with different tastes
|
|
from the rest. You can see this most clearly in New York, which
|
|
attracts a lot of creative people, but few nerds.
|
|
[5]What nerds like is the kind of town where people walk around smiling.
|
|
This excludes LA, where no one walks at all, and also New York,
|
|
where people walk, but not smiling. When I was in grad school in
|
|
Boston, a friend came to visit from New York. On the subway back
|
|
from the airport she asked "Why is everyone smiling?" I looked and
|
|
they weren't smiling. They just looked like they were compared to
|
|
the facial expressions she was used to.If you've lived in New York, you know where these facial expressions
|
|
come from. It's the kind of place where your mind may be excited,
|
|
but your body knows it's having a bad time. People don't so much
|
|
enjoy living there as endure it for the sake of the excitement.
|
|
And if you like certain kinds of excitement, New York is incomparable.
|
|
It's a hub of glamour, a magnet for all the shorter half-life
|
|
isotopes of style and fame.Nerds don't care about glamour, so to them the appeal of New York
|
|
is a mystery. People who like New York will pay a fortune for a
|
|
small, dark, noisy apartment in order to live in a town where the
|
|
cool people are really cool. A nerd looks at that deal and sees
|
|
only: pay a fortune for a small, dark, noisy apartment.Nerds will pay a premium to live in a town where the smart people
|
|
are really smart, but you don't have to pay as much for that. It's
|
|
supply and demand: glamour is popular, so you have to pay a lot for
|
|
it.Most nerds like quieter pleasures. They like cafes instead of
|
|
clubs; used bookshops instead of fashionable clothing shops; hiking
|
|
instead of dancing; sunlight instead of tall buildings. A nerd's
|
|
idea of paradise is Berkeley or Boulder.YouthIt's the young nerds who start startups, so it's those specifically
|
|
the city has to appeal to. The startup hubs in the US are all
|
|
young-feeling towns. This doesn't mean they have to be new.
|
|
Cambridge has the oldest town plan in America, but it feels young
|
|
because it's full of students.What you can't have, if you want to create a silicon valley, is a
|
|
large, existing population of stodgy people. It would be a waste
|
|
of time to try to reverse the fortunes of a declining industrial town
|
|
like Detroit or Philadelphia by trying to encourage startups. Those
|
|
places have too much momentum in the wrong direction. You're better
|
|
off starting with a blank slate in the form of a small town. Or
|
|
better still, if there's a town young people already flock to, that
|
|
one.The Bay Area was a magnet for the young and optimistic for decades
|
|
before it was associated with technology. It was a place people
|
|
went in search of something new. And so it became synonymous with
|
|
California nuttiness. There's still a lot of that there. If you
|
|
wanted to start a new fad-- a new way to focus one's "energy," for
|
|
example, or a new category of things not to eat-- the Bay Area would
|
|
be the place to do it. But a place that tolerates oddness in the
|
|
search for the new is exactly what you want in a startup hub, because
|
|
economically that's what startups are. Most good startup ideas
|
|
seem a little crazy; if they were obviously good ideas, someone
|
|
would have done them already.(How many people are going to want computers in their houses?
|
|
What, another search engine?)That's the connection between technology and liberalism. Without
|
|
exception the high-tech cities in the US are also the most liberal.
|
|
But it's not because liberals are smarter that this is so. It's
|
|
because liberal cities tolerate odd ideas, and smart people by
|
|
definition have odd ideas.Conversely, a town that gets praised for being "solid" or representing
|
|
"traditional values" may be a fine place to live, but it's never
|
|
going to succeed as a startup hub. The 2004 presidential election,
|
|
though a disaster in other respects, conveniently supplied us with
|
|
a county-by-county
|
|
map of such places.
|
|
[6]To attract the young, a town must have an intact center. In most
|
|
American cities the center has been abandoned, and the growth, if
|
|
any, is in the suburbs. Most American cities have been turned
|
|
inside out. But none of the startup hubs has: not San Francisco,
|
|
or Boston, or Seattle. They all have intact centers.
|
|
[7]
|
|
My guess is that no city with a dead center could be turned into a
|
|
startup hub. Young people don't want to live in the suburbs.Within the US, the two cities I think could most easily be turned
|
|
into new silicon valleys are Boulder and Portland. Both have the
|
|
kind of effervescent feel that attracts the young. They're each
|
|
only a great university short of becoming a silicon valley, if they
|
|
wanted to.TimeA great university near an attractive town. Is that all it takes?
|
|
That was all it took to make the original Silicon Valley. Silicon
|
|
Valley traces its origins to William Shockley, one of the inventors
|
|
of the transistor. He did the research that won him the Nobel Prize
|
|
at Bell Labs, but when he started his own company in 1956 he moved
|
|
to Palo Alto to do it. At the time that was an odd thing to do.
|
|
Why did he? Because he had grown up there and remembered how nice
|
|
it was. Now Palo Alto is suburbia, but then it was a charming
|
|
college town-- a charming college town with perfect weather and San
|
|
Francisco only an hour away.The companies that rule Silicon Valley now are all descended in
|
|
various ways from Shockley Semiconductor. Shockley was a difficult
|
|
man, and in 1957 his top people-- "the traitorous eight"-- left to
|
|
start a new company, Fairchild Semiconductor. Among them were
|
|
Gordon Moore and Robert Noyce, who went on to found Intel, and
|
|
Eugene Kleiner, who founded the VC firm Kleiner Perkins. Forty-two
|
|
years later, Kleiner Perkins funded Google, and the partner responsible
|
|
for the deal was John Doerr, who came to Silicon Valley in 1974 to
|
|
work for Intel.So although a lot of the newest companies in Silicon Valley don't
|
|
make anything out of silicon, there always seem to be multiple links
|
|
back to Shockley. There's a lesson here: startups beget startups.
|
|
People who work for startups start their own. People who get rich
|
|
from startups fund new ones. I suspect this kind of organic growth
|
|
is the only way to produce a startup hub, because it's the only way
|
|
to grow the expertise you need.That has two important implications. The first is that you need
|
|
time to grow a silicon valley. The university you could create in
|
|
a couple years, but the startup community around it has to grow
|
|
organically. The cycle time is limited by the time it takes a
|
|
company to succeed, which probably averages about five years.The other implication of the organic growth hypothesis is that you
|
|
can't be somewhat of a startup hub. You either have a self-sustaining
|
|
chain reaction, or not. Observation confirms this too: cities
|
|
either have a startup scene, or they don't. There is no middle
|
|
ground. Chicago has the third largest metropolitan area in America.
|
|
As source of startups it's negligible compared to Seattle, number 15.The good news is that the initial seed can be quite small. Shockley
|
|
Semiconductor, though itself not very successful, was big enough.
|
|
It brought a critical mass of experts in an important new technology
|
|
together in a place they liked enough to stay.CompetingOf course, a would-be silicon valley faces an obstacle the original
|
|
one didn't: it has to compete with Silicon Valley. Can that be
|
|
done? Probably.One of Silicon Valley's biggest advantages is its venture capital
|
|
firms. This was not a factor in Shockley's day, because VC funds
|
|
didn't exist. In fact, Shockley Semiconductor and Fairchild
|
|
Semiconductor were not startups at all in our sense. They were
|
|
subsidiaries-- of Beckman Instruments and Fairchild Camera and
|
|
Instrument respectively. Those companies were apparently willing
|
|
to establish subsidiaries wherever the experts wanted to live.Venture investors, however, prefer to fund startups within an hour's
|
|
drive. For one, they're more likely to notice startups nearby.
|
|
But when they do notice startups in other towns they prefer them
|
|
to move. They don't want to have to travel to attend board meetings,
|
|
and in any case the odds of succeeding are higher in a startup hub.The centralizing effect of venture firms is a double one: they cause
|
|
startups to form around them, and those draw in more startups through
|
|
acquisitions. And although the first may be weakening because it's
|
|
now so cheap to start some startups, the second seems as strong as ever.
|
|
Three of the most admired
|
|
"Web 2.0" companies were started outside the usual startup hubs,
|
|
but two of them have already been reeled in through acquisitions.Such centralizing forces make it harder for new silicon valleys to
|
|
get started. But by no means impossible. Ultimately power rests
|
|
with the founders. A startup with the best people will beat one
|
|
with funding from famous VCs, and a startup that was sufficiently
|
|
successful would never have to move. So a town that
|
|
could exert enough pull over the right people could resist and
|
|
perhaps even surpass Silicon Valley.For all its power, Silicon Valley has a great weakness: the paradise
|
|
Shockley found in 1956 is now one giant parking lot. San Francisco
|
|
and Berkeley are great, but they're forty miles away. Silicon
|
|
Valley proper is soul-crushing suburban sprawl. It
|
|
has fabulous weather, which makes it significantly better than the
|
|
soul-crushing sprawl of most other American cities. But a competitor
|
|
that managed to avoid sprawl would have real leverage. All a city
|
|
needs is to be the kind of place the next traitorous eight look at
|
|
and say "I want to stay here," and that would be enough to get the
|
|
chain reaction started.Notes[1]
|
|
It's interesting to consider how low this number could be
|
|
made. I suspect five hundred would be enough, even if they could
|
|
bring no assets with them. Probably just thirty, if I could pick them,
|
|
would be enough to turn Buffalo into a significant startup hub.[2]
|
|
Bureaucrats manage to allocate research funding moderately
|
|
well, but only because (like an in-house VC fund) they outsource
|
|
most of the work of selection. A professor at a famous university
|
|
who is highly regarded by his peers will get funding, pretty much
|
|
regardless of the proposal. That wouldn't work for startups, whose
|
|
founders aren't sponsored by organizations, and are often unknowns.[3]
|
|
You'd have to do it all at once, or at least a whole department
|
|
at a time, because people would be more likely to come if they
|
|
knew their friends were. And you should probably start from scratch,
|
|
rather than trying to upgrade an existing university, or much energy
|
|
would be lost in friction.[4]
|
|
Hypothesis: Any plan in which multiple independent buildings
|
|
are gutted or demolished to be "redeveloped" as a single project
|
|
is a net loss of personality for the city, with the exception of
|
|
the conversion of buildings not previously public, like warehouses.[5]
|
|
A few startups get started in New York, but less
|
|
than a tenth as many per capita as in Boston, and mostly
|
|
in less nerdy fields like finance and media.[6]
|
|
Some blue counties are false positives (reflecting the
|
|
remaining power of Democractic party machines), but there are no
|
|
false negatives. You can safely write off all the red counties.[7]
|
|
Some "urban renewal" experts took a shot at destroying Boston's
|
|
in the 1960s, leaving the area around city hall a bleak wasteland,
|
|
but most neighborhoods successfully resisted them.Thanks to Chris Anderson, Trevor Blackwell, Marc Hedlund,
|
|
Jessica Livingston, Robert Morris, Greg Mcadoo, Fred Wilson,
|
|
and Stephen Wolfram for
|
|
reading drafts of this, and to Ed Dumbill for inviting me to speak.(The second part of this talk became Why Startups
|
|
Condense in America.)
|
|
May 2001(This article was written as a kind of business plan for a
|
|
new language.
|
|
So it is missing (because it takes for granted) the most important
|
|
feature of a good programming language: very powerful abstractions.)A friend of mine once told an eminent operating systems
|
|
expert that he wanted to design a really good
|
|
programming language. The expert told him that it would be a
|
|
waste of time, that programming languages don't become popular
|
|
or unpopular based on their merits, and so no matter how
|
|
good his language was, no one would use it. At least, that
|
|
was what had happened to the language he had designed.What does make a language popular? Do popular
|
|
languages deserve their popularity? Is it worth trying to
|
|
define a good programming language? How would you do it?I think the answers to these questions can be found by looking
|
|
at hackers, and learning what they want. Programming
|
|
languages are for hackers, and a programming language
|
|
is good as a programming language (rather than, say, an
|
|
exercise in denotational semantics or compiler design)
|
|
if and only if hackers like it.1 The Mechanics of PopularityIt's true, certainly, that most people don't choose programming
|
|
languages simply based on their merits. Most programmers are told
|
|
what language to use by someone else. And yet I think the effect
|
|
of such external factors on the popularity of programming languages
|
|
is not as great as it's sometimes thought to be. I think a bigger
|
|
problem is that a hacker's idea of a good programming language is
|
|
not the same as most language designers'.Between the two, the hacker's opinion is the one that matters.
|
|
Programming languages are not theorems. They're tools, designed
|
|
for people, and they have to be designed to suit human strengths
|
|
and weaknesses as much as shoes have to be designed for human feet.
|
|
If a shoe pinches when you put it on, it's a bad shoe, however
|
|
elegant it may be as a piece of sculpture.It may be that the majority of programmers can't tell a good language
|
|
from a bad one. But that's no different with any other tool. It
|
|
doesn't mean that it's a waste of time to try designing a good
|
|
language. Expert hackers
|
|
can tell a good language when they see
|
|
one, and they'll use it. Expert hackers are a tiny minority,
|
|
admittedly, but that tiny minority write all the good software,
|
|
and their influence is such that the rest of the programmers will
|
|
tend to use whatever language they use. Often, indeed, it is not
|
|
merely influence but command: often the expert hackers are the very
|
|
people who, as their bosses or faculty advisors, tell the other
|
|
programmers what language to use.The opinion of expert hackers is not the only force that determines
|
|
the relative popularity of programming languages — legacy software
|
|
(Cobol) and hype (Ada, Java) also play a role — but I think it is
|
|
the most powerful force over the long term. Given an initial critical
|
|
mass and enough time, a programming language probably becomes about
|
|
as popular as it deserves to be. And popularity further separates
|
|
good languages from bad ones, because feedback from real live users
|
|
always leads to improvements. Look at how much any popular language
|
|
has changed during its life. Perl and Fortran are extreme cases,
|
|
but even Lisp has changed a lot. Lisp 1.5 didn't have macros, for
|
|
example; these evolved later, after hackers at MIT had spent a
|
|
couple years using Lisp to write real programs. [1]So whether or not a language has to be good to be popular, I think
|
|
a language has to be popular to be good. And it has to stay popular
|
|
to stay good. The state of the art in programming languages doesn't
|
|
stand still. And yet the Lisps we have today are still pretty much
|
|
what they had at MIT in the mid-1980s, because that's the last time
|
|
Lisp had a sufficiently large and demanding user base.Of course, hackers have to know about a language before they can
|
|
use it. How are they to hear? From other hackers. But there has to
|
|
be some initial group of hackers using the language for others even
|
|
to hear about it. I wonder how large this group has to be; how many
|
|
users make a critical mass? Off the top of my head, I'd say twenty.
|
|
If a language had twenty separate users, meaning twenty users who
|
|
decided on their own to use it, I'd consider it to be real.Getting there can't be easy. I would not be surprised if it is
|
|
harder to get from zero to twenty than from twenty to a thousand.
|
|
The best way to get those initial twenty users is probably to use
|
|
a trojan horse: to give people an application they want, which
|
|
happens to be written in the new language.2 External FactorsLet's start by acknowledging one external factor that does affect
|
|
the popularity of a programming language. To become popular, a
|
|
programming language has to be the scripting language of a popular
|
|
system. Fortran and Cobol were the scripting languages of early
|
|
IBM mainframes. C was the scripting language of Unix, and so, later,
|
|
was Perl. Tcl is the scripting language of Tk. Java and Javascript
|
|
are intended to be the scripting languages of web browsers.Lisp is not a massively popular language because it is not the
|
|
scripting language of a massively popular system. What popularity
|
|
it retains dates back to the 1960s and 1970s, when it was the
|
|
scripting language of MIT. A lot of the great programmers of the
|
|
day were associated with MIT at some point. And in the early 1970s,
|
|
before C, MIT's dialect of Lisp, called MacLisp, was one of the
|
|
only programming languages a serious hacker would want to use.Today Lisp is the scripting language of two moderately popular
|
|
systems, Emacs and Autocad, and for that reason I suspect that most
|
|
of the Lisp programming done today is done in Emacs Lisp or AutoLisp.Programming languages don't exist in isolation. To hack is a
|
|
transitive verb — hackers are usually hacking something — and in
|
|
practice languages are judged relative to whatever they're used to
|
|
hack. So if you want to design a popular language, you either have
|
|
to supply more than a language, or you have to design your language
|
|
to replace the scripting language of some existing system.Common Lisp is unpopular partly because it's an orphan. It did
|
|
originally come with a system to hack: the Lisp Machine. But Lisp
|
|
Machines (along with parallel computers) were steamrollered by the
|
|
increasing power of general purpose processors in the 1980s. Common
|
|
Lisp might have remained popular if it had been a good scripting
|
|
language for Unix. It is, alas, an atrociously bad one.One way to describe this situation is to say that a language isn't
|
|
judged on its own merits. Another view is that a programming language
|
|
really isn't a programming language unless it's also the scripting
|
|
language of something. This only seems unfair if it comes as a
|
|
surprise. I think it's no more unfair than expecting a programming
|
|
language to have, say, an implementation. It's just part of what
|
|
a programming language is.A programming language does need a good implementation, of course,
|
|
and this must be free. Companies will pay for software, but individual
|
|
hackers won't, and it's the hackers you need to attract.A language also needs to have a book about it. The book should be
|
|
thin, well-written, and full of good examples. K&R is the ideal
|
|
here. At the moment I'd almost say that a language has to have a
|
|
book published by O'Reilly. That's becoming the test of mattering
|
|
to hackers.There should be online documentation as well. In fact, the book
|
|
can start as online documentation. But I don't think that physical
|
|
books are outmoded yet. Their format is convenient, and the de
|
|
facto censorship imposed by publishers is a useful if imperfect
|
|
filter. Bookstores are one of the most important places for learning
|
|
about new languages.3 BrevityGiven that you can supply the three things any language needs — a
|
|
free implementation, a book, and something to hack — how do you
|
|
make a language that hackers will like?One thing hackers like is brevity. Hackers are lazy, in the same
|
|
way that mathematicians and modernist architects are lazy: they
|
|
hate anything extraneous. It would not be far from the truth to
|
|
say that a hacker about to write a program decides what language
|
|
to use, at least subconsciously, based on the total number of
|
|
characters he'll have to type. If this isn't precisely how hackers
|
|
think, a language designer would do well to act as if it were.It is a mistake to try to baby the user with long-winded expressions
|
|
that are meant to resemble English. Cobol is notorious for this
|
|
flaw. A hacker would consider being asked to writeadd x to y giving zinstead ofz = x+yas something between an insult to his intelligence and a sin against
|
|
God.It has sometimes been said that Lisp should use first and rest
|
|
instead of car and cdr, because it would make programs easier to
|
|
read. Maybe for the first couple hours. But a hacker can learn
|
|
quickly enough that car means the first element of a list and cdr
|
|
means the rest. Using first and rest means 50% more typing. And
|
|
they are also different lengths, meaning that the arguments won't
|
|
line up when they're called, as car and cdr often are, in successive
|
|
lines. I've found that it matters a lot how code lines up on the
|
|
page. I can barely read Lisp code when it is set in a variable-width
|
|
font, and friends say this is true for other languages too.Brevity is one place where strongly typed languages lose. All other
|
|
things being equal, no one wants to begin a program with a bunch
|
|
of declarations. Anything that can be implicit, should be.The individual tokens should be short as well. Perl and Common Lisp
|
|
occupy opposite poles on this question. Perl programs can be almost
|
|
cryptically dense, while the names of built-in Common Lisp operators
|
|
are comically long. The designers of Common Lisp probably expected
|
|
users to have text editors that would type these long names for
|
|
them. But the cost of a long name is not just the cost of typing
|
|
it. There is also the cost of reading it, and the cost of the space
|
|
it takes up on your screen.4 HackabilityThere is one thing more important than brevity to a hacker: being
|
|
able to do what you want. In the history of programming languages
|
|
a surprising amount of effort has gone into preventing programmers
|
|
from doing things considered to be improper. This is a dangerously
|
|
presumptuous plan. How can the language designer know what the
|
|
programmer is going to need to do? I think language designers would
|
|
do better to consider their target user to be a genius who will
|
|
need to do things they never anticipated, rather than a bumbler
|
|
who needs to be protected from himself. The bumbler will shoot
|
|
himself in the foot anyway. You may save him from referring to
|
|
variables in another package, but you can't save him from writing
|
|
a badly designed program to solve the wrong problem, and taking
|
|
forever to do it.Good programmers often want to do dangerous and unsavory things.
|
|
By unsavory I mean things that go behind whatever semantic facade
|
|
the language is trying to present: getting hold of the internal
|
|
representation of some high-level abstraction, for example. Hackers
|
|
like to hack, and hacking means getting inside things and second
|
|
guessing the original designer.Let yourself be second guessed. When you make any tool, people use
|
|
it in ways you didn't intend, and this is especially true of a
|
|
highly articulated tool like a programming language. Many a hacker
|
|
will want to tweak your semantic model in a way that you never
|
|
imagined. I say, let them; give the programmer access to as much
|
|
internal stuff as you can without endangering runtime systems like
|
|
the garbage collector.In Common Lisp I have often wanted to iterate through the fields
|
|
of a struct — to comb out references to a deleted object, for example,
|
|
or find fields that are uninitialized. I know the structs are just
|
|
vectors underneath. And yet I can't write a general purpose function
|
|
that I can call on any struct. I can only access the fields by
|
|
name, because that's what a struct is supposed to mean.A hacker may only want to subvert the intended model of things once
|
|
or twice in a big program. But what a difference it makes to be
|
|
able to. And it may be more than a question of just solving a
|
|
problem. There is a kind of pleasure here too. Hackers share the
|
|
surgeon's secret pleasure in poking about in gross innards, the
|
|
teenager's secret pleasure in popping zits. [2] For boys, at least,
|
|
certain kinds of horrors are fascinating. Maxim magazine publishes
|
|
an annual volume of photographs, containing a mix of pin-ups and
|
|
grisly accidents. They know their audience.Historically, Lisp has been good at letting hackers have their way.
|
|
The political correctness of Common Lisp is an aberration. Early
|
|
Lisps let you get your hands on everything. A good deal of that
|
|
spirit is, fortunately, preserved in macros. What a wonderful thing,
|
|
to be able to make arbitrary transformations on the source code.Classic macros are a real hacker's tool — simple, powerful, and
|
|
dangerous. It's so easy to understand what they do: you call a
|
|
function on the macro's arguments, and whatever it returns gets
|
|
inserted in place of the macro call. Hygienic macros embody the
|
|
opposite principle. They try to protect you from understanding what
|
|
they're doing. I have never heard hygienic macros explained in one
|
|
sentence. And they are a classic example of the dangers of deciding
|
|
what programmers are allowed to want. Hygienic macros are intended
|
|
to protect me from variable capture, among other things, but variable
|
|
capture is exactly what I want in some macros.A really good language should be both clean and dirty: cleanly
|
|
designed, with a small core of well understood and highly orthogonal
|
|
operators, but dirty in the sense that it lets hackers have their
|
|
way with it. C is like this. So were the early Lisps. A real hacker's
|
|
language will always have a slightly raffish character.A good programming language should have features that make the kind
|
|
of people who use the phrase "software engineering" shake their
|
|
heads disapprovingly. At the other end of the continuum are languages
|
|
like Ada and Pascal, models of propriety that are good for teaching
|
|
and not much else.5 Throwaway ProgramsTo be attractive to hackers, a language must be good for writing
|
|
the kinds of programs they want to write. And that means, perhaps
|
|
surprisingly, that it has to be good for writing throwaway programs.A throwaway program is a program you write quickly for some limited
|
|
task: a program to automate some system administration task, or
|
|
generate test data for a simulation, or convert data from one format
|
|
to another. The surprising thing about throwaway programs is that,
|
|
like the "temporary" buildings built at so many American universities
|
|
during World War II, they often don't get thrown away. Many evolve
|
|
into real programs, with real features and real users.I have a hunch that the best big programs begin life this way,
|
|
rather than being designed big from the start, like the Hoover Dam.
|
|
It's terrifying to build something big from scratch. When people
|
|
take on a project that's too big, they become overwhelmed. The
|
|
project either gets bogged down, or the result is sterile and
|
|
wooden: a shopping mall rather than a real downtown, Brasilia rather
|
|
than Rome, Ada rather than C.Another way to get a big program is to start with a throwaway
|
|
program and keep improving it. This approach is less daunting, and
|
|
the design of the program benefits from evolution. I think, if one
|
|
looked, that this would turn out to be the way most big programs
|
|
were developed. And those that did evolve this way are probably
|
|
still written in whatever language they were first written in,
|
|
because it's rare for a program to be ported, except for political
|
|
reasons. And so, paradoxically, if you want to make a language that
|
|
is used for big systems, you have to make it good for writing
|
|
throwaway programs, because that's where big systems come from.Perl is a striking example of this idea. It was not only designed
|
|
for writing throwaway programs, but was pretty much a throwaway
|
|
program itself. Perl began life as a collection of utilities for
|
|
generating reports, and only evolved into a programming language
|
|
as the throwaway programs people wrote in it grew larger. It was
|
|
not until Perl 5 (if then) that the language was suitable for
|
|
writing serious programs, and yet it was already massively popular.What makes a language good for throwaway programs? To start with,
|
|
it must be readily available. A throwaway program is something that
|
|
you expect to write in an hour. So the language probably must
|
|
already be installed on the computer you're using. It can't be
|
|
something you have to install before you use it. It has to be there.
|
|
C was there because it came with the operating system. Perl was
|
|
there because it was originally a tool for system administrators,
|
|
and yours had already installed it.Being available means more than being installed, though. An
|
|
interactive language, with a command-line interface, is more
|
|
available than one that you have to compile and run separately. A
|
|
popular programming language should be interactive, and start up
|
|
fast.Another thing you want in a throwaway program is brevity. Brevity
|
|
is always attractive to hackers, and never more so than in a program
|
|
they expect to turn out in an hour.6 LibrariesOf course the ultimate in brevity is to have the program already
|
|
written for you, and merely to call it. And this brings us to what
|
|
I think will be an increasingly important feature of programming
|
|
languages: library functions. Perl wins because it has large
|
|
libraries for manipulating strings. This class of library functions
|
|
are especially important for throwaway programs, which are often
|
|
originally written for converting or extracting data. Many Perl
|
|
programs probably begin as just a couple library calls stuck
|
|
together.I think a lot of the advances that happen in programming languages
|
|
in the next fifty years will have to do with library functions. I
|
|
think future programming languages will have libraries that are as
|
|
carefully designed as the core language. Programming language design
|
|
will not be about whether to make your language strongly or weakly
|
|
typed, or object oriented, or functional, or whatever, but about
|
|
how to design great libraries. The kind of language designers who
|
|
like to think about how to design type systems may shudder at this.
|
|
It's almost like writing applications! Too bad. Languages are for
|
|
programmers, and libraries are what programmers need.It's hard to design good libraries. It's not simply a matter of
|
|
writing a lot of code. Once the libraries get too big, it can
|
|
sometimes take longer to find the function you need than to write
|
|
the code yourself. Libraries need to be designed using a small set
|
|
of orthogonal operators, just like the core language. It ought to
|
|
be possible for the programmer to guess what library call will do
|
|
what he needs.Libraries are one place Common Lisp falls short. There are only
|
|
rudimentary libraries for manipulating strings, and almost none
|
|
for talking to the operating system. For historical reasons, Common
|
|
Lisp tries to pretend that the OS doesn't exist. And because you
|
|
can't talk to the OS, you're unlikely to be able to write a serious
|
|
program using only the built-in operators in Common Lisp. You have
|
|
to use some implementation-specific hacks as well, and in practice
|
|
these tend not to give you everything you want. Hackers would think
|
|
a lot more highly of Lisp if Common Lisp had powerful string
|
|
libraries and good OS support.7 SyntaxCould a language with Lisp's syntax, or more precisely, lack of
|
|
syntax, ever become popular? I don't know the answer to this
|
|
question. I do think that syntax is not the main reason Lisp isn't
|
|
currently popular. Common Lisp has worse problems than unfamiliar
|
|
syntax. I know several programmers who are comfortable with prefix
|
|
syntax and yet use Perl by default, because it has powerful string
|
|
libraries and can talk to the os.There are two possible problems with prefix notation: that it is
|
|
unfamiliar to programmers, and that it is not dense enough. The
|
|
conventional wisdom in the Lisp world is that the first problem is
|
|
the real one. I'm not so sure. Yes, prefix notation makes ordinary
|
|
programmers panic. But I don't think ordinary programmers' opinions
|
|
matter. Languages become popular or unpopular based on what expert
|
|
hackers think of them, and I think expert hackers might be able to
|
|
deal with prefix notation. Perl syntax can be pretty incomprehensible,
|
|
but that has not stood in the way of Perl's popularity. If anything
|
|
it may have helped foster a Perl cult.A more serious problem is the diffuseness of prefix notation. For
|
|
expert hackers, that really is a problem. No one wants to write
|
|
(aref a x y) when they could write a[x,y].In this particular case there is a way to finesse our way out of
|
|
the problem. If we treat data structures as if they were functions
|
|
on indexes, we could write (a x y) instead, which is even shorter
|
|
than the Perl form. Similar tricks may shorten other types of
|
|
expressions.We can get rid of (or make optional) a lot of parentheses by making
|
|
indentation significant. That's how programmers read code anyway:
|
|
when indentation says one thing and delimiters say another, we go
|
|
by the indentation. Treating indentation as significant would
|
|
eliminate this common source of bugs as well as making programs
|
|
shorter.Sometimes infix syntax is easier to read. This is especially true
|
|
for math expressions. I've used Lisp my whole programming life and
|
|
I still don't find prefix math expressions natural. And yet it is
|
|
convenient, especially when you're generating code, to have operators
|
|
that take any number of arguments. So if we do have infix syntax,
|
|
it should probably be implemented as some kind of read-macro.I don't think we should be religiously opposed to introducing syntax
|
|
into Lisp, as long as it translates in a well-understood way into
|
|
underlying s-expressions. There is already a good deal of syntax
|
|
in Lisp. It's not necessarily bad to introduce more, as long as no
|
|
one is forced to use it. In Common Lisp, some delimiters are reserved
|
|
for the language, suggesting that at least some of the designers
|
|
intended to have more syntax in the future.One of the most egregiously unlispy pieces of syntax in Common Lisp
|
|
occurs in format strings; format is a language in its own right,
|
|
and that language is not Lisp. If there were a plan for introducing
|
|
more syntax into Lisp, format specifiers might be able to be included
|
|
in it. It would be a good thing if macros could generate format
|
|
specifiers the way they generate any other kind of code.An eminent Lisp hacker told me that his copy of CLTL falls open to
|
|
the section format. Mine too. This probably indicates room for
|
|
improvement. It may also mean that programs do a lot of I/O.8 EfficiencyA good language, as everyone knows, should generate fast code. But
|
|
in practice I don't think fast code comes primarily from things
|
|
you do in the design of the language. As Knuth pointed out long
|
|
ago, speed only matters in certain critical bottlenecks. And as
|
|
many programmers have observed since, one is very often mistaken
|
|
about where these bottlenecks are.So, in practice, the way to get fast code is to have a very good
|
|
profiler, rather than by, say, making the language strongly typed.
|
|
You don't need to know the type of every argument in every call in
|
|
the program. You do need to be able to declare the types of arguments
|
|
in the bottlenecks. And even more, you need to be able to find out
|
|
where the bottlenecks are.One complaint people have had with Lisp is that it's hard to tell
|
|
what's expensive. This might be true. It might also be inevitable,
|
|
if you want to have a very abstract language. And in any case I
|
|
think good profiling would go a long way toward fixing the problem:
|
|
you'd soon learn what was expensive.Part of the problem here is social. Language designers like to
|
|
write fast compilers. That's how they measure their skill. They
|
|
think of the profiler as an add-on, at best. But in practice a good
|
|
profiler may do more to improve the speed of actual programs written
|
|
in the language than a compiler that generates fast code. Here,
|
|
again, language designers are somewhat out of touch with their
|
|
users. They do a really good job of solving slightly the wrong
|
|
problem.It might be a good idea to have an active profiler — to push
|
|
performance data to the programmer instead of waiting for him to
|
|
come asking for it. For example, the editor could display bottlenecks
|
|
in red when the programmer edits the source code. Another approach
|
|
would be to somehow represent what's happening in running programs.
|
|
This would be an especially big win in server-based applications,
|
|
where you have lots of running programs to look at. An active
|
|
profiler could show graphically what's happening in memory as a
|
|
program's running, or even make sounds that tell what's happening.Sound is a good cue to problems. In one place I worked, we had a
|
|
big board of dials showing what was happening to our web servers.
|
|
The hands were moved by little servomotors that made a slight noise
|
|
when they turned. I couldn't see the board from my desk, but I
|
|
found that I could tell immediately, by the sound, when there was
|
|
a problem with a server.It might even be possible to write a profiler that would automatically
|
|
detect inefficient algorithms. I would not be surprised if certain
|
|
patterns of memory access turned out to be sure signs of bad
|
|
algorithms. If there were a little guy running around inside the
|
|
computer executing our programs, he would probably have as long
|
|
and plaintive a tale to tell about his job as a federal government
|
|
employee. I often have a feeling that I'm sending the processor on
|
|
a lot of wild goose chases, but I've never had a good way to look
|
|
at what it's doing.A number of Lisps now compile into byte code, which is then executed
|
|
by an interpreter. This is usually done to make the implementation
|
|
easier to port, but it could be a useful language feature. It might
|
|
be a good idea to make the byte code an official part of the
|
|
language, and to allow programmers to use inline byte code in
|
|
bottlenecks. Then such optimizations would be portable too.The nature of speed, as perceived by the end-user, may be changing.
|
|
With the rise of server-based applications, more and more programs
|
|
may turn out to be i/o-bound. It will be worth making i/o fast.
|
|
The language can help with straightforward measures like simple,
|
|
fast, formatted output functions, and also with deep structural
|
|
changes like caching and persistent objects.Users are interested in response time. But another kind of efficiency
|
|
will be increasingly important: the number of simultaneous users
|
|
you can support per processor. Many of the interesting applications
|
|
written in the near future will be server-based, and the number of
|
|
users per server is the critical question for anyone hosting such
|
|
applications. In the capital cost of a business offering a server-based
|
|
application, this is the divisor.For years, efficiency hasn't mattered much in most end-user
|
|
applications. Developers have been able to assume that each user
|
|
would have an increasingly powerful processor sitting on their
|
|
desk. And by Parkinson's Law, software has expanded to use the
|
|
resources available. That will change with server-based applications.
|
|
In that world, the hardware and software will be supplied together.
|
|
For companies that offer server-based applications, it will make
|
|
a very big difference to the bottom line how many users they can
|
|
support per server.In some applications, the processor will be the limiting factor,
|
|
and execution speed will be the most important thing to optimize.
|
|
But often memory will be the limit; the number of simultaneous
|
|
users will be determined by the amount of memory you need for each
|
|
user's data. The language can help here too. Good support for
|
|
threads will enable all the users to share a single heap. It may
|
|
also help to have persistent objects and/or language level support
|
|
for lazy loading.9 TimeThe last ingredient a popular language needs is time. No one wants
|
|
to write programs in a language that might go away, as so many
|
|
programming languages do. So most hackers will tend to wait until
|
|
a language has been around for a couple years before even considering
|
|
using it.Inventors of wonderful new things are often surprised to discover
|
|
this, but you need time to get any message through to people. A
|
|
friend of mine rarely does anything the first time someone asks
|
|
him. He knows that people sometimes ask for things that they turn
|
|
out not to want. To avoid wasting his time, he waits till the third
|
|
or fourth time he's asked to do something; by then, whoever's asking
|
|
him may be fairly annoyed, but at least they probably really do
|
|
want whatever they're asking for.Most people have learned to do a similar sort of filtering on new
|
|
things they hear about. They don't even start paying attention
|
|
until they've heard about something ten times. They're perfectly
|
|
justified: the majority of hot new whatevers do turn out to be a
|
|
waste of time, and eventually go away. By delaying learning VRML,
|
|
I avoided having to learn it at all.So anyone who invents something new has to expect to keep repeating
|
|
their message for years before people will start to get it. We
|
|
wrote what was, as far as I know, the first web-server based
|
|
application, and it took us years to get it through to people that
|
|
it didn't have to be downloaded. It wasn't that they were stupid.
|
|
They just had us tuned out.The good news is, simple repetition solves the problem. All you
|
|
have to do is keep telling your story, and eventually people will
|
|
start to hear. It's not when people notice you're there that they
|
|
pay attention; it's when they notice you're still there.It's just as well that it usually takes a while to gain momentum.
|
|
Most technologies evolve a good deal even after they're first
|
|
launched — programming languages especially. Nothing could be better,
|
|
for a new techology, than a few years of being used only by a small
|
|
number of early adopters. Early adopters are sophisticated and
|
|
demanding, and quickly flush out whatever flaws remain in your
|
|
technology. When you only have a few users you can be in close
|
|
contact with all of them. And early adopters are forgiving when
|
|
you improve your system, even if this causes some breakage.There are two ways new technology gets introduced: the organic
|
|
growth method, and the big bang method. The organic growth method
|
|
is exemplified by the classic seat-of-the-pants underfunded garage
|
|
startup. A couple guys, working in obscurity, develop some new
|
|
technology. They launch it with no marketing and initially have
|
|
only a few (fanatically devoted) users. They continue to improve
|
|
the technology, and meanwhile their user base grows by word of
|
|
mouth. Before they know it, they're big.The other approach, the big bang method, is exemplified by the
|
|
VC-backed, heavily marketed startup. They rush to develop a product,
|
|
launch it with great publicity, and immediately (they hope) have
|
|
a large user base.Generally, the garage guys envy the big bang guys. The big bang
|
|
guys are smooth and confident and respected by the VCs. They can
|
|
afford the best of everything, and the PR campaign surrounding the
|
|
launch has the side effect of making them celebrities. The organic
|
|
growth guys, sitting in their garage, feel poor and unloved. And
|
|
yet I think they are often mistaken to feel sorry for themselves.
|
|
Organic growth seems to yield better technology and richer founders
|
|
than the big bang method. If you look at the dominant technologies
|
|
today, you'll find that most of them grew organically.This pattern doesn't only apply to companies. You see it in sponsored
|
|
research too. Multics and Common Lisp were big-bang projects, and
|
|
Unix and MacLisp were organic growth projects.10 Redesign"The best writing is rewriting," wrote E. B. White. Every good
|
|
writer knows this, and it's true for software too. The most important
|
|
part of design is redesign. Programming languages, especially,
|
|
don't get redesigned enough.To write good software you must simultaneously keep two opposing
|
|
ideas in your head. You need the young hacker's naive faith in
|
|
his abilities, and at the same time the veteran's skepticism. You
|
|
have to be able to think
|
|
how hard can it be? with one half of
|
|
your brain while thinking
|
|
it will never work with the other.The trick is to realize that there's no real contradiction here.
|
|
You want to be optimistic and skeptical about two different things.
|
|
You have to be optimistic about the possibility of solving the
|
|
problem, but skeptical about the value of whatever solution you've
|
|
got so far.People who do good work often think that whatever they're working
|
|
on is no good. Others see what they've done and are full of wonder,
|
|
but the creator is full of worry. This pattern is no coincidence:
|
|
it is the worry that made the work good.If you can keep hope and worry balanced, they will drive a project
|
|
forward the same way your two legs drive a bicycle forward. In the
|
|
first phase of the two-cycle innovation engine, you work furiously
|
|
on some problem, inspired by your confidence that you'll be able
|
|
to solve it. In the second phase, you look at what you've done in
|
|
the cold light of morning, and see all its flaws very clearly. But
|
|
as long as your critical spirit doesn't outweigh your hope, you'll
|
|
be able to look at your admittedly incomplete system, and think,
|
|
how hard can it be to get the rest of the way?, thereby continuing
|
|
the cycle.It's tricky to keep the two forces balanced. In young hackers,
|
|
optimism predominates. They produce something, are convinced it's
|
|
great, and never improve it. In old hackers, skepticism predominates,
|
|
and they won't even dare to take on ambitious projects.Anything you can do to keep the redesign cycle going is good. Prose
|
|
can be rewritten over and over until you're happy with it. But
|
|
software, as a rule, doesn't get redesigned enough. Prose has
|
|
readers, but software has users. If a writer rewrites an essay,
|
|
people who read the old version are unlikely to complain that their
|
|
thoughts have been broken by some newly introduced incompatibility.Users are a double-edged sword. They can help you improve your
|
|
language, but they can also deter you from improving it. So choose
|
|
your users carefully, and be slow to grow their number. Having
|
|
users is like optimization: the wise course is to delay it. Also,
|
|
as a general rule, you can at any given time get away with changing
|
|
more than you think. Introducing change is like pulling off a
|
|
bandage: the pain is a memory almost as soon as you feel it.Everyone knows that it's not a good idea to have a language designed
|
|
by a committee. Committees yield bad design. But I think the worst
|
|
danger of committees is that they interfere with redesign. It is
|
|
so much work to introduce changes that no one wants to bother.
|
|
Whatever a committee decides tends to stay that way, even if most
|
|
of the members don't like it.Even a committee of two gets in the way of redesign. This happens
|
|
particularly in the interfaces between pieces of software written
|
|
by two different people. To change the interface both have to agree
|
|
to change it at once. And so interfaces tend not to change at all,
|
|
which is a problem because they tend to be one of the most ad hoc
|
|
parts of any system.One solution here might be to design systems so that interfaces
|
|
are horizontal instead of vertical — so that modules are always
|
|
vertically stacked strata of abstraction. Then the interface will
|
|
tend to be owned by one of them. The lower of two levels will either
|
|
be a language in which the upper is written, in which case the
|
|
lower level will own the interface, or it will be a slave, in which
|
|
case the interface can be dictated by the upper level.11 LispWhat all this implies is that there is hope for a new Lisp. There
|
|
is hope for any language that gives hackers what they want, including
|
|
Lisp. I think we may have made a mistake in thinking that hackers
|
|
are turned off by Lisp's strangeness. This comforting illusion may
|
|
have prevented us from seeing the real problem with Lisp, or at
|
|
least Common Lisp, which is that it sucks for doing what hackers
|
|
want to do. A hacker's language needs powerful libraries and
|
|
something to hack. Common Lisp has neither. A hacker's language is
|
|
terse and hackable. Common Lisp is not.The good news is, it's not Lisp that sucks, but Common Lisp. If we
|
|
can develop a new Lisp that is a real hacker's language, I think
|
|
hackers will use it. They will use whatever language does the job.
|
|
All we have to do is make sure this new Lisp does some important
|
|
job better than other languages.History offers some encouragement. Over time, successive new
|
|
programming languages have taken more and more features from Lisp.
|
|
There is no longer much left to copy before the language you've
|
|
made is Lisp. The latest hot language, Python, is a watered-down
|
|
Lisp with infix syntax and no macros. A new Lisp would be a natural
|
|
step in this progression.I sometimes think that it would be a good marketing trick to call
|
|
it an improved version of Python. That sounds hipper than Lisp. To
|
|
many people, Lisp is a slow AI language with a lot of parentheses.
|
|
Fritz Kunze's official biography carefully avoids mentioning the
|
|
L-word. But my guess is that we shouldn't be afraid to call the
|
|
new Lisp Lisp. Lisp still has a lot of latent respect among the
|
|
very best hackers — the ones who took 6.001 and understood it, for
|
|
example. And those are the users you need to win.In "How to Become a Hacker," Eric Raymond describes Lisp as something
|
|
like Latin or Greek — a language you should learn as an intellectual
|
|
exercise, even though you won't actually use it:
|
|
|
|
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.
|
|
|
|
If I didn't know Lisp, reading this would set me asking questions.
|
|
A language that would make me a better programmer, if it means
|
|
anything at all, means a language that would be better for programming.
|
|
And that is in fact the implication of what Eric is saying.As long as that idea is still floating around, I think hackers will
|
|
be receptive enough to a new Lisp, even if it is called Lisp. But
|
|
this Lisp must be a hacker's language, like the classic Lisps of
|
|
the 1970s. It must be terse, simple, and hackable. And it must have
|
|
powerful libraries for doing what hackers want to do now.In the matter of libraries I think there is room to beat languages
|
|
like Perl and Python at their own game. A lot of the new applications
|
|
that will need to be written in the coming years will be
|
|
server-based
|
|
applications. There's no reason a new Lisp shouldn't have string
|
|
libraries as good as Perl, and if this new Lisp also had powerful
|
|
libraries for server-based applications, it could be very popular.
|
|
Real hackers won't turn up their noses at a new tool that will let
|
|
them solve hard problems with a few library calls. Remember, hackers
|
|
are lazy.It could be an even bigger win to have core language support for
|
|
server-based applications. For example, explicit support for programs
|
|
with multiple users, or data ownership at the level of type tags.Server-based applications also give us the answer to the question
|
|
of what this new Lisp will be used to hack. It would not hurt to
|
|
make Lisp better as a scripting language for Unix. (It would be
|
|
hard to make it worse.) But I think there are areas where existing
|
|
languages would be easier to beat. I think it might be better to
|
|
follow the model of Tcl, and supply the Lisp together with a complete
|
|
system for supporting server-based applications. Lisp is a natural
|
|
fit for server-based applications. Lexical closures provide a way
|
|
to get the effect of subroutines when the ui is just a series of
|
|
web pages. S-expressions map nicely onto html, and macros are good
|
|
at generating it. There need to be better tools for writing
|
|
server-based applications, and there needs to be a new Lisp, and
|
|
the two would work very well together.12 The Dream LanguageBy way of summary, let's try describing the hacker's dream language.
|
|
The dream language is
|
|
beautiful, clean, and terse. It has an
|
|
interactive toplevel that starts up fast. You can write programs
|
|
to solve common problems with very little code. Nearly all the
|
|
code in any program you write is code that's specific to your
|
|
application. Everything else has been done for you.The syntax of the language is brief to a fault. You never have to
|
|
type an unnecessary character, or even to use the shift key much.Using big abstractions you can write the first version of a program
|
|
very quickly. Later, when you want to optimize, there's a really
|
|
good profiler that tells you where to focus your attention. You
|
|
can make inner loops blindingly fast, even writing inline byte code
|
|
if you need to.There are lots of good examples to learn from, and the language is
|
|
intuitive enough that you can learn how to use it from examples in
|
|
a couple minutes. You don't need to look in the manual much. The
|
|
manual is thin, and has few warnings and qualifications.The language has a small core, and powerful, highly orthogonal
|
|
libraries that are as carefully designed as the core language. The
|
|
libraries all work well together; everything in the language fits
|
|
together like the parts in a fine camera. Nothing is deprecated,
|
|
or retained for compatibility. The source code of all the libraries
|
|
is readily available. It's easy to talk to the operating system
|
|
and to applications written in other languages.The language is built in layers. The higher-level abstractions are
|
|
built in a very transparent way out of lower-level abstractions,
|
|
which you can get hold of if you want.Nothing is hidden from you that doesn't absolutely have to be. The
|
|
language offers abstractions only as a way of saving you work,
|
|
rather than as a way of telling you what to do. In fact, the language
|
|
encourages you to be an equal participant in its design. You can
|
|
change everything about it, including even its syntax, and anything
|
|
you write has, as much as possible, the same status as what comes
|
|
predefined.Notes[1] Macros very close to the modern idea were proposed by Timothy
|
|
Hart in 1964, two years after Lisp 1.5 was released. What was
|
|
missing, initially, were ways to avoid variable capture and multiple
|
|
evaluation; Hart's examples are subject to both.[2] In When the Air Hits Your Brain, neurosurgeon Frank Vertosick
|
|
recounts a conversation in which his chief resident, Gary, talks
|
|
about the difference between surgeons and internists ("fleas"):
|
|
|
|
Gary and I ordered a large pizza and found an open booth. The
|
|
chief lit a cigarette. "Look at those goddamn fleas, jabbering
|
|
about some disease they'll see once in their lifetimes. That's
|
|
the trouble with fleas, they only like the bizarre stuff. They
|
|
hate their bread and butter cases. That's the difference between
|
|
us and the fucking fleas. See, we love big juicy lumbar disc
|
|
herniations, but they hate hypertension...."
|
|
|
|
It's hard to think of a lumbar disc herniation as juicy (except
|
|
literally). And yet I think I know what they mean. I've often had
|
|
a juicy bug to track down. Someone who's not a programmer would
|
|
find it hard to imagine that there could be pleasure in a bug.
|
|
Surely it's better if everything just works. In one way, it is.
|
|
And yet there is undeniably a grim satisfaction in hunting down
|
|
certain sorts of bugs.
|
|
``` |