The Refragmentation
January 2016
One advantage of being old is that you can see change happen in
your lifetime.  A lot of the change I've seen is fragmentation.  US
politics is much more polarized than it used to be.  Culturally we
have ever less common ground. The creative class flocks to a handful
of happy cities, abandoning the rest.  And increasing economic
inequality means the spread between rich and poor is growing too.
I'd like to propose a hypothesis: that all these trends are instances
of the same phenomenon.  And moreover, that the cause is not some
force that's pulling us apart, but rather the erosion of forces
that had been pushing us together.
Worse still, for those who worry about these trends, the forces
that were pushing us together were an anomaly, a one-time combination
of circumstances that's unlikely to be repeated — and indeed, that
we would not want to repeat.
The two forces were war (above all World War II), and the rise of
large corporations.
The effects of World War II were both economic and social.
Economically, it decreased variation in income.  Like all modern
armed forces, America's were socialist economically.  From each
according to his ability, to each according to his need.  More or
less.  Higher ranking members of the military got more (as higher
ranking members of socialist societies always do), but what they
got was fixed according to their rank.  And the flattening effect
wasn't limited to those under arms, because the US economy was
conscripted too.  Between 1942 and 1945 all wages were set by the
National War Labor Board. Like the military, they defaulted to
flatness.  And this national standardization of wages was so pervasive
that its effects could still be seen years after the war ended.
[
1
]
Business owners weren't supposed to be making money either.  FDR
said "not a single war millionaire" would be permitted.  To ensure
that, any increase in a company's profits over prewar levels was
taxed at 85%.  And when what was left after corporate taxes reached
individuals, it was taxed again at a marginal rate of 93%.
[
2
]
Socially too the war tended to decrease variation.  Over 16 million
men and women from all sorts of different backgrounds were brought
together in a way of life that was literally uniform.  Service rates
for men born in the early 1920s approached 80%. And working toward
a common goal, often under stress, brought them still closer together.
Though strictly speaking World War II lasted less than 4 years for
the US, its effects lasted longer.  Wars make central governments
more powerful, and World War II was an extreme case of this.  In
the US, as in all the other Allied countries, the federal government
was slow to give up the new powers it had acquired.  Indeed, in
some respects the war didn't end in 1945; the enemy just switched
to the Soviet Union.  In tax rates, federal power, defense spending,
conscription, and nationalism, the decades after the war looked more
like wartime than prewar peacetime.
[
3
]
And the social effects
lasted too.  The kid pulled into the army from behind a mule team
in West Virginia didn't simply go back to the farm afterward.
Something else was waiting for him, something that looked a lot
like the army.
If total war was the big political story of the 20th century, the
big economic story was the rise of a new kind of company.  And this
too tended to produce both social and economic cohesion.
[
4
]
The 20th century was the century of the big, national corporation.
General Electric, General Foods, General Motors.  Developments in
finance, communications, transportation, and manufacturing enabled
a new type of company whose goal was above all scale.  Version 1
of this world was low-res: a Duplo world of a few giant companies
dominating each big market.
[
5
]
The late 19th and early 20th centuries had been a time of consolidation,
led especially by J. P. Morgan.  Thousands of companies run by their
founders were merged into a couple hundred giant ones run by
professional managers. Economies of scale ruled the day.  It seemed
to people at the time that this was the final state of things.  John
D. Rockefeller said in 1880
The day of combination is here to stay. Individualism has gone,
  never to return.
He turned out to be mistaken, but he seemed right for the next
hundred years.
The consolidation that began in the late 19th century continued for
most of the 20th.  By the end of World War II, as Michael Lind
writes, "the major sectors of the economy were either organized
as government-backed cartels or dominated by a few oligopolistic
corporations."
For consumers this new world meant the same choices everywhere, but
only a few of them.  When I grew up there were only 2 or 3 of most
things, and since they were all aiming at the middle of the market
there wasn't much to differentiate them.
One of the most important instances of this phenomenon was in TV.
Here there were 3 choices: NBC, CBS, and ABC. Plus public TV for
eggheads and communists.  The programs that the 3 networks offered were
indistinguishable.  In fact, here there was a triple pressure toward
the center. If one show did try something daring, local affiliates
in conservative markets would make them stop. Plus since TVs were
expensive, whole families watched the same shows together, so they
had to be suitable for everyone.
And not only did everyone get the same thing, they got it at the
same time.  It's difficult to imagine now, but every night tens of
millions of families would sit down together in front of their TV
set watching the same show, at the same time, as their next door
neighbors.  What happens now with the Super Bowl used to happen
every night. We were literally in sync.
[
6
]
In a way mid-century TV culture was good. The view it gave of the
world was like you'd find in a children's book, and it probably had
something of the effect that (parents hope) children's books have
in making people behave better.  But, like children's books, TV was
also misleading.  Dangerously misleading, for adults. In his
autobiography, Robert MacNeil talks of seeing gruesome images that
had just come in from Vietnam and thinking, we can't show these to
families while they're having dinner.
I know how pervasive the common culture was, because I tried to opt
out of it, and it was practically impossible to find alternatives.
When I was 13 I realized, more from internal evidence than any
outside source, that the ideas we were being fed on TV were crap,
and I stopped watching it.
[
7
]
But it wasn't just TV.  It seemed
like everything around me was crap.  The politicians all saying the
same things, the consumer brands making almost identical products
with different labels stuck on to indicate how prestigious they
were meant to be, the balloon-frame houses with fake "colonial"
skins, the cars with several feet of gratuitous metal on each end
that started to fall apart after a couple years, the "red delicious"
apples that were red but only
nominally
apples. And in retrospect, it
was
crap.
[
8
]
But when I went looking for alternatives to fill this void, I found
practically nothing.  There was no Internet then.  The only place
to look was in the chain bookstore in our local shopping mall.
[
9
]
There I found a copy of
The Atlantic
.  I wish I could say it became
a gateway into a wider world, but in fact I found it boring and
incomprehensible.  Like a kid tasting whisky for the first time and
pretending to like it, I preserved that magazine as carefully as
if it had been a book. I'm sure I still have it somewhere.  But
though it was evidence that there was, somewhere, a world that
wasn't red delicious, I didn't find it till college.
It wasn't just as consumers that the big companies made us similar.
They did as employers too.  Within companies there were powerful
forces pushing people toward a single model of how to look and act.
IBM was particularly notorious for this, but they were only a little
more extreme than other big companies.  And the models of how to
look and act varied little between companies. Meaning everyone
within this world was expected to seem more or less the same.  And
not just those in the corporate world, but also everyone who aspired
to it — which in the middle of the 20th century meant most people
who weren't already in it.  For most of the 20th century, working-class
people tried hard to look middle class.  You can see it in old
photos.  Few adults aspired to look dangerous in 1950.
But the rise of national corporations didn't just compress us
culturally.  It compressed us economically too, and on both ends.
Along with giant national corporations, we got giant national labor
unions.  And in the mid 20th century the corporations cut deals
with the unions where they paid over market price for labor.  Partly
because the unions were monopolies.
[
10
]
Partly because, as
components of oligopolies themselves, the corporations knew they
could safely pass the cost on to their customers, because their
competitors would have to as well.  And partly because in mid-century
most of the giant companies were still focused on finding new ways
to milk economies of scale.  Just as startups rightly pay AWS a
premium over the cost of running their own servers so they can focus
on growth, many of the big national corporations were willing to
pay a premium for labor.
[
11
]
As well as pushing incomes up from the bottom, by overpaying unions,
the big companies of the 20th century also pushed incomes down at
the top, by underpaying their top management. Economist J. K.
Galbraith wrote in 1967 that "There are few corporations in which
it would be suggested that executive salaries are at a maximum."
[
12
]
To some extent this was an illusion.  Much of the de facto pay of
executives never showed up on their income tax returns, because it
took the form of perks.  The higher the rate of income tax, the
more pressure there was to pay employees upstream of it.  (In the
UK, where taxes were even higher than in the US, companies would
even pay their kids' private school tuitions.)  One of the most
valuable things the big companies of the mid 20th century gave their
employees was job security, and this too didn't show up in tax
returns or income statistics. So the nature of employment in these
organizations tended to yield falsely low numbers about economic
inequality.  But even accounting for that, the big companies paid
their best people less than market price.  There was no market; the
expectation was that you'd work for the same company for decades
if not your whole career.
[
13
]
Your work was so illiquid there was little chance of getting market
price. But that same illiquidity also encouraged you not to seek
it.  If the company promised to employ you till you retired and
give you a pension afterward, you didn't want to extract as much
from it this year as you could. You needed to take care of the
company so it could take care of you.  Especially when you'd been
working with the same group of people for decades.  If you tried
to squeeze the company for more money, you were squeezing the
organization that was going to take care of
them
.  Plus if
you didn't put the company first you wouldn't be promoted, and if
you couldn't switch ladders, promotion on this one was the only way
up.
[
14
]
To someone who'd spent several formative years in the armed forces,
this situation didn't seem as strange as it does to us now.  From
their point of view, as big company executives, they were high-ranking
officers.  They got paid a lot more than privates.  They got to
have expense account lunches at the best restaurants and fly around
on the company's Gulfstreams.  It probably didn't occur to most of
them to ask if they were being paid market price.
The ultimate way to get market price is to work for yourself, by
starting your own company.  That seems obvious to any ambitious
person now.  But in the mid 20th century it was an alien concept.
Not because starting one's own company seemed too ambitious, but
because it didn't seem ambitious enough. Even as late as the 1970s,
when I grew up, the ambitious plan was to get lots of education at
prestigious institutions, and then join some other prestigious
institution and work one's way up the hierarchy.  Your prestige was
the prestige of the institution you belonged to.  People did start
their own businesses of course, but educated people rarely did,
because in those days there was practically zero concept of starting
what we now call a
startup
:
a business that starts small and grows
big.  That was much harder to do in the mid 20th century.  Starting
one's own business meant starting a business that would start small
and stay small. Which in those days of big companies often meant
scurrying around trying to avoid being trampled by elephants.  It
was more prestigious to be one of the executive class riding the
elephant.
By the 1970s, no one stopped to wonder where the big prestigious
companies had come from in the first place.  It seemed like they'd
always been there, like the chemical elements.  And indeed, there
was a double wall between ambitious kids in the 20th century and
the origins of the big companies.  Many of the big companies were
roll-ups that didn't have clear founders.  And when they did, the
founders didn't seem like us.  Nearly all of them had been uneducated,
in the sense of not having been to college.  They were what Shakespeare
called rude mechanicals.  College trained one to be a member of the
professional classes.  Its graduates didn't expect to do the sort
of grubby menial work that Andrew Carnegie or Henry Ford started
out doing.
[
15
]
And in the 20th century there were more and more college graduates.
They increased from about 2% of the population in 1900 to about 25%
in 2000. In the middle of the century our two big forces intersect,
in the form of the GI Bill, which sent 2.2 million World War II
veterans to college.  Few thought of it in these terms, but the
result of making college the canonical path for the ambitious was
a world in which it was socially acceptable to work for Henry Ford,
but not to be Henry Ford.
[
16
]
I remember this world well. I came of age just as it was starting
to break up. In my childhood it was still dominant. Not quite so
dominant as it had been.  We could see from old TV shows and yearbooks
and the way adults acted that people in the 1950s and 60s had been
even more conformist than us.  The mid-century model was already
starting to get old. But that was not how we saw it at the time.
We would at most have said that one could be a bit more daring in
1975 than 1965.  And indeed, things hadn't changed much yet.
But change was coming soon. And when the Duplo economy started to
disintegrate, it disintegrated in several different ways at once.
Vertically integrated companies literally dis-integrated because
it was more efficient to.  Incumbents faced new competitors as (a)
markets went global and (b) technical innovation started to trump
economies of scale, turning size from an asset into a liability.
Smaller companies were increasingly able to survive as formerly
narrow channels to consumers broadened.  Markets themselves started
to change faster, as whole new categories of products appeared. And
last but not least, the federal government, which had previously
smiled upon J. P. Morgan's world as the natural state of things,
began to realize it wasn't the last word after all.
What J. P. Morgan was to the horizontal axis, Henry Ford was to the
vertical.  He wanted to do everything himself. The giant plant he
built at River Rouge between 1917 and 1928 literally took in iron
ore at one end and sent cars out the other.  100,000 people worked
there. At the time it seemed the future. But that is not how car
companies operate today.  Now much of the design and manufacturing
happens in a long supply chain, whose products the car companies
ultimately assemble and sell.  The reason car companies operate
this way is that it works better.  Each company in the supply chain
focuses on what they know best. And they each have to do it well
or they can be swapped out for another supplier.
Why didn't Henry Ford realize that networks of cooperating companies
work better than a single big company? One reason is that supplier
networks take a while to evolve. In 1917, doing everything himself
seemed to Ford the only way to get the scale he needed. And the
second reason is that if you want to solve a problem using a network
of cooperating companies, you have to be able to coordinate their
efforts, and you can do that much better with computers.  Computers
reduce the transaction costs that Coase argued are the raison d'etre
of corporations. That is a fundamental change.
In the early 20th century, big companies were synonymous with
efficiency.  In the late 20th century they were synonymous with
inefficiency.  To some extent this was because the companies
themselves had become sclerotic.  But it was also because our
standards were higher.
It wasn't just within existing industries that change occurred.
The industries themselves changed.  It became possible to make lots
of new things, and sometimes the existing companies weren't the
ones who did it best.
Microcomputers are a classic example. The market was pioneered by
upstarts like Apple. When it got big enough, IBM decided it was
worth paying attention to.  At the time IBM completely dominated
the computer industry. They assumed that all they had to do, now
that this market was ripe, was to reach out and pick it.  Most
people at the time would have agreed with them.  But what happened
next illustrated how much more complicated the world had become.
IBM did launch a microcomputer.  Though quite successful, it did
not crush Apple.  But even more importantly, IBM itself ended up
being supplanted by a supplier coming in from the side — from
software, which didn't even seem to be the same business.  IBM's
big mistake was to accept a non-exclusive license for DOS.  It must
have seemed a safe move at the time.  No other computer manufacturer
had ever been able to outsell them. What difference did it make if
other manufacturers could offer DOS too?  The result of that
miscalculation was an explosion of inexpensive PC clones.  Microsoft
now owned the PC standard, and the customer.  And the microcomputer
business ended up being Apple vs Microsoft.
Basically, Apple bumped IBM and then Microsoft stole its wallet.
That sort of thing did not happen to big companies in mid-century.
But it was going to happen increasingly often in the future.
Change happened mostly by itself in the computer business.  In other
industries, legal obstacles had to be removed first.  Many of the
mid-century oligopolies had been anointed by the federal government
with policies (and in wartime, large orders) that kept out competitors.
This didn't seem as dubious to government officials at the time as
it sounds to us. They felt a two-party system ensured sufficient
competition in politics.  It ought to work for business too.
Gradually the government realized that anti-competitive policies
were doing more harm than good, and during the Carter administration
it started to remove them. The word used for this process was
misleadingly narrow: deregulation.  What was really happening was
de-oligopolization.  It happened to one industry after another.
Two of the most visible to consumers were air travel and long-distance
phone service, which both became dramatically cheaper after
deregulation.
Deregulation also contributed to the wave of hostile takeovers in
the 1980s.  In the old days the only limit on the inefficiency of
companies, short of actual bankruptcy, was the inefficiency of their
competitors.  Now companies had to face absolute rather than relative
standards.  Any public company that didn't generate sufficient
returns on its assets risked having its management replaced with
one that would.  Often the new managers did this by breaking companies
up into components that were more valuable separately.
[
17
]
Version 1 of the national economy consisted of a few big blocks
whose relationships were negotiated in back rooms by a handful of
executives, politicians, regulators, and labor leaders.  Version 2
was higher resolution: there were more companies, of more different
sizes, making more different things, and their relationships changed
faster. In this world there were still plenty of back room negotiations,
but more was left to market forces.  Which further accelerated the
fragmentation.
It's a little misleading to talk of versions when describing a
gradual process, but not as misleading as it might seem.  There was
a lot of change in a few decades, and what we ended up with was
qualitatively different.  The companies in the S&P 500 in 1958 had
been there an average of 61 years. By 2012 that number was 18 years.
[
18
]
The breakup of the Duplo economy happened simultaneously with the
spread of computing power. To what extent were computers a precondition?
It would take a book to answer that. Obviously the spread of computing
power was a precondition for the rise of startups.  I suspect it
was for most of what happened in finance too.  But was it a
precondition for globalization or the LBO wave?  I don't know, but
I wouldn't discount the possibility.  It may be that the refragmentation
was driven by computers in the way the industrial revolution was
driven by steam engines.  Whether or not computers were a precondition,
they have certainly accelerated it.
The new fluidity of companies changed people's relationships with
their employers. Why climb a corporate ladder that might be yanked
out from under you?  Ambitious people started to think of a career
less as climbing a single ladder than as a series of jobs that might
be at different companies. More movement (or even potential movement)
between companies introduced more competition in salaries.  Plus
as companies became smaller it became easier to estimate how much
an employee contributed to the company's revenue.  Both changes
drove salaries toward market price. And since people vary dramatically
in productivity, paying market price meant salaries started to
diverge.
By no coincidence it was in the early 1980s that the term "yuppie"
was coined.  That word is not much used now, because the phenomenon
it describes is so taken for granted, but at the time it was a label
for something novel. Yuppies were young professionals who made lots
of money.  To someone in their twenties today, this wouldn't seem
worth naming.  Why wouldn't young professionals make lots of money?
But until the 1980s, being underpaid early in your career was part
of what it meant to be a professional.  Young professionals were
paying their dues, working their way up the ladder.  The rewards
would come later.  What was novel about yuppies was that they wanted
market price for the work they were doing now.
The first yuppies did not work for startups. That was still in the
future.  Nor did they work for big companies. They were professionals
working in fields like law, finance, and consulting.  But their example
rapidly inspired their peers.  Once they saw that new BMW 325i, they
wanted one too.
Underpaying people at the beginning of their career only works if
everyone does it. Once some employer breaks ranks, everyone else
has to, or they can't get good people.  And once started this process
spreads through the whole economy, because at the beginnings of
people's careers they can easily switch not merely employers but
industries.
But not all young professionals benefitted. You had to produce to
get paid a lot.  It was no coincidence that the first yuppies worked
in fields where it was easy to measure that.
More generally, an idea was returning whose name sounds old-fashioned
precisely because it was so rare for so long: that you could make
your fortune.  As in the past there were multiple ways to do it.
Some made their fortunes by creating wealth, and others by playing
zero-sum games. But once it became possible to make one's fortune,
the ambitious had to decide whether or not to.  A physicist who
chose physics over Wall Street in 1990 was making a sacrifice that
a physicist in 1960 didn't have to think about.
The idea even flowed back into big companies.  CEOs of big companies
make more now than they used to, and I think much of the reason is
prestige.  In 1960, corporate CEOs had immense prestige.  They were
the winners of the only economic game in town. But if they made as
little now as they did then, in real dollar terms, they'd seem like
small fry compared to professional athletes and whiz kids making
millions from startups and hedge funds. They don't like that idea,
so now they try to get as much as they can, which is more than they
had been getting.
[
19
]
Meanwhile a similar fragmentation was happening at the other end
of the economic scale.  As big companies' oligopolies became less
secure, they were less able to pass costs on to customers and thus
less willing to overpay for labor.  And as the Duplo world of a few
big blocks fragmented into many companies of different sizes — some
of them overseas — it became harder for unions to enforce their
monopolies.  As a result workers' wages also tended toward market
price. Which (inevitably, if unions had been doing their job) tended
to be lower.  Perhaps dramatically so, if automation had decreased
the need for some kind of work.
And just as the mid-century model induced social as well as economic
cohesion, its breakup brought social as well as economic fragmentation.
People started to dress and act differently.  Those who would later
be called the "creative class" became more mobile. People who didn't
care much for religion felt less pressure to go to church for
appearances' sake, while those who liked it a lot opted for
increasingly colorful forms. Some switched from meat loaf to tofu,
and others to Hot Pockets. Some switched from driving Ford sedans
to driving small imported cars, and others to driving SUVs.  Kids
who went to private schools or wished they did started to dress
"preppy," and kids who wanted to seem rebellious made a conscious
effort to look disreputable.  In a hundred ways people spread apart.
[
20
]
Almost four decades later, fragmentation is still increasing.  Has
it been net good or bad?  I don't know; the question may be
unanswerable.  Not entirely bad though.  We take for granted the
forms of fragmentation we like, and worry only about the ones we
don't. But as someone who caught the tail end of mid-century
conformism
,
I can tell you it was no utopia.
[
21
]
My goal here is not to say whether fragmentation has been good or
bad, just to explain why it's happening.  With the centripetal
forces of total war and 20th century oligopoly mostly gone, what
will happen next?  And more specifically, is it possible to reverse
some of the fragmentation we've seen?
If it is, it will have to happen piecemeal.  You can't reproduce
mid-century cohesion the way it was originally produced.  It would
be insane to go to war just to induce more national unity.  And
once you understand the degree to which the economic history of the
20th century was a low-res version 1, it's clear you can't reproduce
that either.
20th century cohesion was something that happened at least in a
sense naturally.  The war was due mostly to external forces, and
the Duplo economy was an evolutionary phase.  If you want cohesion
now, you'd have to induce it deliberately.  And it's not obvious
how.  I suspect the best we'll be able to do is address the symptoms
of fragmentation.  But that may be enough.
The form of fragmentation people worry most about lately is
economic inequality
, and if you want to eliminate
that you're up against a truly formidable headwind that has
been in operation since the stone age. Technology.
Technology is
a lever. It magnifies work.  And the lever not only grows increasingly
long, but the rate at which it grows is itself increasing.
Which in turn means the variation in the amount of wealth people
can create has not only been increasing, but accelerating.  The
unusual conditions that prevailed in the mid 20th century masked
this underlying trend.  The ambitious had little choice but to join
large organizations that made them march in step with lots of other
people — literally in the case of the armed forces, figuratively
in the case of big corporations. Even if the big corporations had
wanted to pay people proportionate to their value, they couldn't
have figured out how.  But that constraint has gone now.  Ever since
it started to erode in the 1970s, we've seen the underlying forces
at work again.
[
22
]
Not everyone who gets rich now does it by creating wealth, certainly.
But a significant number do, and the Baumol Effect means all their
peers get dragged along too.
[
23
]
And as long as it's possible to
get rich by creating wealth, the default tendency will be for
economic inequality to increase.  Even if you eliminate all the
other ways to get rich.  You can mitigate this with subsidies at
the bottom and taxes at the top, but unless taxes are high enough
to discourage people from creating wealth, you're always going to
be fighting a losing battle against increasing variation in
productivity.
[
24
]
That form of fragmentation, like the others, is here to stay.  Or
rather, back to stay.  Nothing is forever, but the tendency toward
fragmentation should be more forever than most things, precisely
because it's not due to any particular cause.  It's simply a reversion
to the mean. When Rockefeller said individualism was gone, he was
right for a hundred years.  It's back now, and that's likely to be
true for longer.
I worry that if we don't acknowledge this, we're headed for trouble.
If we think 20th century cohesion disappeared because of few policy
tweaks, we'll be deluded into thinking we can get it back (minus
the bad parts, somehow) with a few countertweaks.  And then we'll
waste our time trying to eliminate fragmentation, when we'd be
better off thinking about how to mitigate its consequences.
Notes
[
1
]
Lester Thurow, writing in 1975, said the wage differentials
prevailing at the end of World War II had become so embedded that
they "were regarded as 'just' even after the egalitarian pressures
of World War II had disappeared.  Basically, the same differentials
exist to this day, thirty years later." But Goldin and Margo think
market forces in the postwar period also helped preserve the wartime
compression of wages — specifically increased demand for unskilled
workers, and oversupply of educated ones.
(Oddly enough, the American custom of having employers pay for
health insurance derives from efforts by businesses to circumvent
NWLB wage controls in order to attract workers.)
[
2
]
As always, tax rates don't tell the whole story.  There were
lots of exemptions, especially for individuals.  And in World War
II the tax codes were so new that the government had little acquired
immunity to tax avoidance.  If the rich paid high taxes during the
war it was more because they wanted to than because they had to.
After the war, federal tax receipts as a percentage of GDP were
about the same as they are now. In fact, for the entire period since
the war, tax receipts have stayed close to 18% of GDP, despite
dramatic changes in tax rates.  The lowest point occurred when
marginal income tax rates were highest: 14.1% in 1950.  Looking at
the data, it's hard to avoid the conclusion that tax rates have had
little effect on what people actually paid.
[
3
]
Though in fact the decade preceding the war had been a time
of unprecedented federal power, in response to the Depression.
Which is not entirely a coincidence, because the Depression was one
of the causes of the war.  In many ways the New Deal was a sort of
dress rehearsal for the measures the federal government took during
wartime.  The wartime versions were much more drastic and more
pervasive though.  As Anthony Badger wrote, "for many Americans the
decisive change in their experiences came not with the New Deal but
with World War II."
[
4
]
I don't know enough about the origins of the world wars to
say, but it's not inconceivable they were connected to the rise of
big corporations. If that were the case, 20th century cohesion would
have a single cause.
[
5
]
More precisely, there was a bimodal economy consisting, in
Galbraith's words, of "the world of the technically dynamic, massively
capitalized and highly organized corporations on the one hand and
the hundreds of thousands of small and traditional proprietors on
the other." Money, prestige, and power were concentrated in the
former, and there was near zero crossover.
[
6
]
I wonder how much of the decline in families eating together
was due to the decline in families watching TV together afterward.
[
7
]
I know when this happened because it was the season Dallas
premiered.  Everyone else was talking about what was happening on
Dallas, and I had no idea what they meant.
[
8
]
I didn't realize it till I started doing research for this
essay, but the meretriciousness of the products I grew up with is
a well-known byproduct of oligopoly. When companies can't compete
on price, they compete on tailfins.
[
9
]
Monroeville Mall was at the time of its completion in 1969
the largest in the country. In the late 1970s the movie
Dawn of
the Dead
was shot there. Apparently the mall was not just the
location of the movie, but its inspiration; the crowds of shoppers
drifting through this huge mall reminded George Romero of zombies.
My first job was scooping ice cream in the Baskin-Robbins.
[
10
]
Labor unions were exempted from antitrust laws by the Clayton
Antitrust Act in 1914 on the grounds that a person's work is not
"a commodity or article of commerce." I wonder if that means service
companies are also exempt.
[
11
]
The relationships between unions and unionized companies can
even be symbiotic, because unions will exert political pressure to
protect their hosts.  According to Michael Lind, when politicians
tried to attack the A&P supermarket chain because it was putting
local grocery stores out of business, "A&P successfully defended
itself by allowing the unionization of its workforce in 1938, thereby
gaining organized labor as a constituency." I've seen this phenomenon
myself: hotel unions are responsible for more of the political
pressure against Airbnb than hotel companies.
[
12
]
Galbraith was clearly puzzled that corporate executives would
work so hard to make money for other people (the shareholders)
instead of themselves.  He devoted much of
The New Industrial
State
to trying to figure this out.
His theory was that professionalism had replaced money as a motive,
and that modern corporate executives were, like (good) scientists,
motivated less by financial rewards than by the desire to do good
work and thereby earn the respect of their peers.  There is something
in this, though I think lack of movement between companies combined
with self-interest explains much of observed behavior.
[
13
]
Galbraith (p. 94) says a 1952 study of the 800 highest paid
executives at 300 big corporations found that three quarters of
them had been with their company for more than 20 years.
[
14
]
It seems likely that in the first third of the 20th century
executive salaries were low partly because companies then were more
dependent on banks, who would have disapproved if executives got
too much.  This was certainly true in the beginning. The first big
company CEOs were J. P. Morgan's hired hands.
Companies didn't start to finance themselves with retained earnings
till the 1920s.  Till then they had to pay out their earnings in
dividends, and so depended on banks for capital for expansion.
Bankers continued to sit on corporate boards till the Glass-Steagall
act in 1933.
By mid-century big companies funded 3/4 of their growth from earnings.
But the early years of bank dependence, reinforced by the financial
controls of World War II, must have had a big effect on social
conventions about executive salaries.  So it may be that the lack
of movement between companies was as much the effect of low salaries
as the cause.
Incidentally, the switch in the 1920s to financing growth with
retained earnings was one cause of the 1929 crash.  The banks now
had to find someone else to lend to, so they made more margin loans.
[
15
]
Even now it's hard to get them to. One of the things I find
hardest to get into the heads of would-be startup founders is how
important it is to do certain kinds of menial work early in the
life of a company.  Doing
things that don't
scale
is to how Henry Ford got started as a high-fiber diet is
to the traditional peasant's diet: they had no choice but to do the
right thing, while we have to make a conscious effort.
[
16
]
Founders weren't celebrated in the press when I was a kid.
"Our founder" meant a photograph of a severe-looking man with a
walrus mustache and a wing collar who had died decades ago. The
thing to be when I was a kid was an
executive
. If you weren't
around then it's hard to grasp the cachet that term had. The fancy
version of everything was called the "executive" model.
[
17
]
The wave of hostile takeovers in the 1980s was enabled by a
combination of circumstances: court decisions striking down state
anti-takeover laws, starting with the Supreme Court's 1982 decision
in Edgar v. MITE Corp.; the Reagan administration's comparatively
sympathetic attitude toward takeovers; the Depository Institutions
Act of 1982, which allowed banks and savings and loans to buy
corporate bonds; a new SEC rule issued in 1982 (rule 415) that made
it possible to bring corporate bonds to market faster; the creation
of the junk bond business by Michael Milken; a vogue for conglomerates
in the preceding period that caused many companies to be combined
that never should have been; a decade of inflation that left many
public companies trading below the value of their assets; and not
least, the increasing complacency of managements.
[
18
]
Foster, Richard. "Creative Destruction Whips through Corporate
America." Innosight, February 2012.
[
19
]
CEOs of big companies may be overpaid. I don't know enough
about big companies to say. But it is certainly not impossible for
a CEO to make 200x as much difference to a company's revenues as
the average employee.  Look at what Steve Jobs did for Apple when
he came back as CEO.  It would have been a good deal for the board
to give him 95% of the company.  Apple's market cap the day Steve
came back in July 1997 was 1.73 billion. 5% of Apple now (January
2016) would be worth about 30 billion.  And it would not be if Steve
hadn't come back; Apple probably wouldn't even exist anymore.
Merely including Steve in the sample might be enough to answer the
question of whether public company CEOs in the aggregate are overpaid.
And that is not as facile a trick as it might seem, because the
broader your holdings, the more the aggregate is what you care
about.
[
20
]
The late 1960s were famous for social upheaval. But that was
more rebellion (which can happen in any era if people are provoked
sufficiently) than fragmentation.  You're not seeing fragmentation
unless you see people breaking off to both left and right.
[
21
]
Globally the trend has been in the other direction.  While
the US is becoming more fragmented, the world as a whole is becoming
less fragmented, and mostly in good ways.
[
22
]
There were a handful of ways to make a fortune in the mid
20th century.  The main one was drilling for oil, which was open
to newcomers because it was not something big companies could
dominate through economies of scale.  How did individuals accumulate
large fortunes in an era of such high taxes?  Giant tax loopholes
defended by two of the most powerful men in Congress, Sam Rayburn
and Lyndon Johnson.
But becoming a Texas oilman was not in 1950 something one could
aspire to the way starting a startup or going to work on Wall Street
were in 2000, because (a) there was a strong local component and
(b) success depended so much on luck.
[
23
]
The Baumol Effect induced by startups is very visible in
Silicon Valley.  Google will pay people millions of dollars a year
to keep them from leaving to start or join startups.
[
24
]
I'm not claiming variation in productivity is the only cause
of economic inequality in the US. But it's a significant cause, and
it will become as big a cause as it needs to, in the sense that if
you ban other ways to get rich, people who want to get rich will
use this route instead.
Thanks
to Sam Altman, Trevor Blackwell, Paul Buchheit, Patrick
Collison, Ron Conway, Chris Dixon, Benedict Evans, Richard Florida,
Ben Horowitz, Jessica Livingston, Robert Morris, Tim O'Reilly, Geoff
Ralston, Max Roser, Alexia Tsotsis, and Qasar Younis for reading
drafts of this.  Max also told me about several valuable sources.
Bibliography
Allen, Frederick Lewis.
The Big Change
. Harper, 1952.
Averitt, Robert.
The Dual Economy
. Norton, 1968.
Badger, Anthony.
The New Deal
. Hill and Wang, 1989.
Bainbridge, John.
The Super-Americans
. Doubleday, 1961.
Beatty, Jack.
Collossus
. Broadway, 2001.
Brinkley, Douglas.
Wheels for the World
. Viking, 2003.
Brownleee, W. Elliot.
Federal Taxation in America
. Cambridge, 1996.
Chandler, Alfred.
The Visible Hand
. Harvard, 1977.
Chernow, Ron.
The House of Morgan
. Simon & Schuster, 1990.
Chernow, Ron.
Titan: The Life of John D. Rockefeller
. Random House,
1998.
Galbraith, John.
The New Industrial State
. Houghton Mifflin, 1967.
Goldin, Claudia and Robert A. Margo. "The Great Compression: The
Wage Structure in the United States at Mid-Century." NBER Working
Paper 3817, 1991.
Gordon, John.
An Empire of Wealth
. HarperCollins, 2004.
Klein, Maury.
The Genesis of Industrial America, 1870-1920
. Cambridge,
2007.
Lind, Michael.
Land of Promise
. HarperCollins, 2012.
Mickelthwaite, John, and Adrian Wooldridge.
The Company
. Modern
Library, 2003.
Nasaw, David.
Andrew Carnegie
. Penguin, 2006.
Sobel, Robert.
The Age of Giant Corporations
. Praeger, 1993.
Thurow, Lester.
Generating Inequality: Mechanisms of Distribution
.
Basic Books, 1975.
Witte, John.
The Politics and Development of the Federal Income
Tax
. Wisconsin, 1985.
Related:
Too Many Elite American Men Are Obsessed With Work and Wealth


@BleenishGurple As we all know, that kind of philosophical problem is not why those particular two countries were the only ones in the world to vote no.

@atomicstandard @neuralvarez Those aren't startups.

https://t.co/0ZleHiJDMe

@FrancisOKC You would think, and yet he continues to surprise me.

@nw3 That would actually be good for the world. Dylan would bring an increment of sanity to DC, and Miller's xenophobia would be cured in about 3 days if he saw what good startup founders look like.

Here's something I wrote about what YC looks for in founders: https://t.co/zXWErQqTmt

To the extent YC is good at picking founders, these are therefore also the qualities founders should cultivate.

It's generally this way. You could presumably have said the same thing in 1925. But the pattern seems especially pronounced now.

The news is a mix of surprisingly impressive things being done by optimistic founders and surprisingly horrible things being done by cynical politicians.

This is not merely a rhetorical question. Someone should make a serious effort to quantify it. How many people are the Teamsters proposing to kill in Boston, for example?

@itsAlexGuerrero Effective founders.

@grok @surmoulage Idea 4 isn't pure software. To automate all labor you'd need robots.


@nilukulasingham That was an anomaly. Those appointments were Warren plants that Biden would never have agreed to if he'd foreseen the consequences.

@justinbaragona Was he always like this, or is he losing it?

Remember the "tech backlash"? That seems to have died a quiet death. Presumably because it never actually existed...

@rickasaurus Sure enough. Who knew?

@0x_zak @america @SwipeWright That is also true. But I believe Harris knows this, and won't make the same mistake.

@america @SwipeWright This is true, but it's not a reason to vote for Trump. In fact it might be the greatest damage wokeness did if the reaction to it got Trump back into office.

@whstancil No. That would be Trump-level unprincipled, to penalize federal suppliers based on who they supported in the election. That's what we're trying to avoid here.

Plus it would be stupid pragmatically. SpaceX and Starlink are both very good.

@Ben_Longstaff Thank you, that made my day to read.

@jjrdk The article explains why pollsters got that so wrong.

@letonyo I am right now.


@antirxdoc The flights are so much shorter that you no longer need lay flat beds for international business class. You can use the seat pitch of domestic first class. So fuel per seat and thus price per customer will be the same as they are on subsonic planes now.

Unless there's some technical glitch or weather problem, the first privately developed supersonic aircraft will go supersonic in about 4 hours. https://t.co/Eryns7o5PG

12 yo chose Blake's "Tyger" for his school declamation. I tried to think of a present-day accent in which "hand or eye" rhymes with "symmetry." Answer: Cartman. It sounds amazing (he does a good Cartman), but I don't think I can convince him to do it for school.

When you get older, you'll notice that a lot of the very smartest people maintain this kind of innocent curiosity their whole lives. They still want to learn more. So this isn't just a way to compensate for inexperience. It's also the strategy used by the most experienced.

If you're inexperienced, don't try to pretend you're not. It will fool no one and make you look ridiculous. Instead just be openly curious. This will seem natural instead of awkward, and you'll learn a lot more.

A shop window in Hay on Wye. Anyone see it? (Hint: This was in fact where Fleming got the name.) https://t.co/yUKvFiYXW7

At the school bake sale I bought a baked good of indeterminate type from a pair of 7 year olds. I asked if they could give me change for £5. They said they couldn't. I pointed to their tub of coins, but they said they couldn't give me any of that, because it was for charity.

@pranman I can top you there, Mr. Smug. The bags you see are a collection of plastic bags I keep for my book buying trips to Hay. Not one was acquired on this trip, and indeed if you look closely you can see that some are from shops that are not in Hay.

The spoils of a good trip to Hay on Wye. https://t.co/UbIpSIZmDz

Or more precisely, you can optimize the rest of life by seeking out the places where it's applicable.


@salonium You mean that people you've blocked can still see your posts?

@victorinox_1 @cremieuxrecueil Pennsylvania. Pittsburgh was the center of the American nuclear industry.

@Noahpinion I don't think I'd call them leopards. They really seem more hyenas.

@michael_nielsen The Sherlock Holmes stories.

@salonium Why did you make your account private?

@cremieuxrecueil My family was part of the original one. My father was a mathematician who worked on the design of nuclear reactors. We emigrated from the UK to the US in 1968.

The interesting thing is how credible, how serious they seem, while making this unbelievable howler.

@thomasbsauer Actually the people, both Republicans and Democrats, overwhelmingly support more high-skilled immigration. What you call "the people" is a very, very special subset of the people.

@LRH_Superfan It has always been and will always be the case that a large percentage of high-risk, high-return investments fail. Do you really not get that?

@GodCloseMyEyes "Cheap labor" is the tell that you know nothing about startups. Successful startups focus on growth, not margins, and they pay ridiculously high salaries, compared to other industries, in order to get it.


@KenRoth Makes you wonder about Twitter. They'd be pretty slack if they only did this on Facebook. So is the Twitter bot network still in place?

Thank God the US at least has Tesla. Imagine if we had to depend on GM to compete with this.

Technological shifts often enable new entrants to displace incumbents. When they do, it tends to be permanent. So whether we like it or not, our default assumption should be that this is the new order of things.

@HumanoidHistory Sounds like a list of generic drug names.

@quantian1 I retired as CEO 5 years before this investment happened. I hear about the bigger deals YC does, but not every 10m investment they made out of the later-stage funds.

@ken_Kenobi1 @benhylak Yes, and I already explained it in the tweet you just replied to.

@ken_Kenobi1 @benhylak Do you think I was lying? Why would I do that?

Investments in the for-profit subsidiary of OpenAI aren't stock. They're profit shares, and the return is capped. So the investment is worth way less than 10m worth of stock would be.

@universal_sci How interesting. This comment seems to have had a noticeable effect on the poll results. (That was why I noted the 70% figure, so I could compare the number later.)

@benhylak It's not that significant. If it were worth a billion dollars, I'd have known about it, because it would have a noticeable effect on predicted returns. But it isn't and doesn't.

@universal_sci Since genes make us humans rather than worms or clams, I'm going to have to go with genes.

Revealing that over 70% of people currently say environment though...


Being Popular
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 Popularity
It'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 Factors
Let'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 Brevity
Given 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 write
add x to y giving z
instead of
z = x+y
as 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 Hackability
There 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 Programs
To 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 Libraries
Of 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 Syntax
Could 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 Efficiency
A 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 Time
The 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 Lisp
What 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 Language
By 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.
Postscript Version
Arc
Five Questions about Language Design
How to Become a Hacker
Japanese Translation


@Feder240516 The median person in tech isn't dismissive per se, just afraid to speak publicly about it.

@JillFilipovic When a couple of my friends got married about 10 years ago, the bride organized a cake fight for all the guests.

@aref_vc Bad founders are somewhat conformist, but the good ones are without exception extremely independent-minded.

Source: https://t.co/agzurnwovs

A study of 1452 undergrads at Northwestern and Michigan between 2023 and 2025 found that 88% pretended to hold more left wing views than they actually had in order to succeed socially or academically. https://t.co/xDSSSL3qTu

@cremieuxrecueil Do you have any guess about how increased wealth translates into increased body fat? People eating more restaurant food instead of home cooking?

@harold_bracy Here's one thing average Americans are doing.

https://t.co/zaHSwi7MEi

@tracewoodgrains Just block them. Life is too short. They never rise above moderately smart anyway.

@growing_daniel One of the people involved was a VC. (It wasn't me.)

@econmikeinsz Of course. It's part of the conspiracy. You wouldn't expect the you-know-who to omit such a critical element, would you?


@PicoPaco17 He'll drop out. It's just a matter of time.

Since there has been a lot of talk about beauty and symmetry lately, here's something I wrote about the subject: https://t.co/3GQUlfH58t

I asked a couple people in a position to know what percentage of top Democrats privately think Biden should drop out of the race, and their answers were 75% and 80%. I don't see how any campaign recovers from that.

@bjg @Rapahelz I put it in profile in a windowsill on the front stairs, so we all see this nose every time we go up or down.

@majorirfanakbar He's currently doing a pretty good job of it.

@thetimmorgan Independently. It was the last week of school, so they weren't doing much, which is why he was free to notice things that had nothing to do with their classwork.

@Rapahelz Funny you should mention the pure, austere beauty of sculpture, because I just bought this a couple weeks ago, which though fabulous is not exactly pure and austere. https://t.co/mhLBfOVOCH

12 yo noticed that successive squares are separated by successive odd numbers (i.e. n^2 = (n - 1)^2 + 2n - 1) and was more excited by this than anything he's ever learned in class. I told him this is what real math is like.

@abarrallen What did they steal?

@henry56112724 Thanks, Henry.