Graham's essay is basically about what general purpose language to use when you're a small technical startup of clever hackers who want to develop cool stuff as fast as possible, using the language as a competitive advantage.
His conclusion is, bluntly, Lisp, since you can reprogram that language arbitrarily and it won't get in your way.
It is also excellent for implementing DSLs, which can be as powerful as you want. For example, Viaweb uses (still!) a Lisp-based DSL to provide the non-Turing-complete customization language for their customers, and I suspect that whole thing was a weekend hack.
(Edit: it probably is Turing complete though.)
The ease of creating such restricted DSLs comes from Lisp's power. At some point you'll need a general purpose language, if only to implement your other specific languages. If your team can be competitively productive with a remarkably powerful language, Graham says you should use it.
Yes. Almost the whole point of wanting a more expressive implementation language is so that you can more easily and directly implement a wider range of more restrictive, more declarative languages in it, AND to lower the friction of moving information into, out of and between those sublanguages. Thesis, antithesis, synthesis, five cents please. /thread.
That's a similar idea, but with more of a focus on a single organically home-grown Lisp environment to make your application easier to write and change.
I love this, by the way:
> Language and program evolve together. Like the border between two warring states, the boundary between language and program is drawn and redrawn, until eventually it comes to rest along the mountains and rivers, the natural frontiers of your problem. In the end your program will look as if the language had been designed for it. And when language and program fit one another well, you end up with code which is clear, small, and efficient.
The other side of massive isolated productivity is: nobody except them knew it or could maintain it. Yahoo ended up doing the whole "rewrite lisp in C++" thing because you can't hire "experts in paul graham's custom lisp macros" at scale.
But, it worked, didn't it? Grow, scale, cash out, dump code on non-founders, become startup messiah.
Let’s see now. Paul Graham wrote viaweb in Lisp and claims it was a competitive advantage for a startup.
What is his track record with startup(s)? Do we just count N=1? Or do we include what YCombinator has accomplished?
Now let’s look at what Yahoo has accomplished as a BigCo.
Under the circumstances, would you bet that Paul was right about Lisp, Yahoo about C++, neither, or both?
I’d go with Paul being right about Lisp, and Yahoo, well... I’d call that N=1 at best. Clearly they started from a “We already have hordes of C++ programmers” point of view, and a “We apply hordes or programmers to every problem” point of view.
It might be the only point of view for them. It could very well be that there were hundreds of Lisp programmers available, but none might have wanted to work for Yahoo under any circumstances. Your mileage may well differ, based on the overlap in the venn diagram of language, culture, and problem set.
One thing that people forgot to mention is that Paul Graham was a Lisp expert before he started Viaweb - he had already written _On_Lisp_ which is still considered as one of the references to learn Common Lisp - and probably Robert Morris wasn't a bad lisper as well. They most likely were much better programmers than their competitors or Yahoo's median employee, so while Lisp may have been a competitive advantage for them, it wasn't the one that gave them the strongest edge. We don't have the data of how Lisp experts fare against equally strong C++ (or some other language) - although it may be that Lisp magnifies programmer's strength.
If we take Paul’s “The Python Paradox” essay, and turn its conclusions up to eleven, we might end up with this extreme perspective:
Perhaps great programmers are great in any language, and a company employing great programmer will have great results in any language, it’s the programmers that are the competitive advantage for a startup.
But although they’d be great in any language, they have taste, and prefer to work in some languages regardless of whether that is a competitive advantage or not. And therefore, they prefer jobs and startups with languages that match their taste.
And taking that a step forward, these mythical great programmers might prefer working with other people they perceive have taste, so they tend to clump together, and they see the language choice as a kind of signal of what kind of colleagues they will have working for a particular company.
If all this handwaving has merit, it could be that choosing to do your startup in Lisp when Paul started ViaWeb was’t 100% about having a competitive advantage from Lisp itself, it was having a competitive advantage from having Paul and Robert, and anybody else they hired.
---
With larger companies, they will never say it, but sometimes they don’t want these “great programmers,” with their taste and their salary demands, and their code that causes an army of middle-of-the-road workmanlike programmers to stare thoughtfully for long periods of time working out how it does what it does.
Even if they end up being more productive, perhaps they end up being less predictable, because a smaller team of better programmers is more vulnerable to poaching as the company goes from developing the next big thing to an endless march of adding small enterprisey features. Even if you write in Scala, Haskell, Lisp, or Clojure, when the work becomes maintaining Yahoo... Maybe you don’t want people who relish a challenge, because they’ll quit.
So you want to anti-signal, by rewriting it all in a workmanlike language, so you get workmanlike people. And if it takes touch longer or costs a bit more overall, it’s predictable because the people are more fungible. They’re easier to replace.
So it could very well be that when you’re launching a startup, you want to go out on a limb and choose the language based on the kind of people you want to hire for a startup.
And when you mature, you might rewrite it in another language based on the kind of people you want to hire for a mature company.
And both choices might be right for their times. And neither might actually have anything to do with the “power” or “expressiveness” or “abstraction” of the language itself.
They will say it. I worked for a startup acquired by Yahoo. I was hired by the founders, but then they all left and I was kind of stranded. Anyway I tried to make a go of it, and proposed how we were going to hire some new great people, and my manager expressed confusion about why I wanted great people.
In his view, if you get great people to do not-so-great jobs, you'll end up overpaying and then they will just leave. For him it was obvious that not all jobs are going to be great. Most of them will kind of suck.
It was 180° away from how I thought, which is the standard "only hire A players" script. But then I realized it did make a kind of sense. Startups and small companies that win have geniuses doing everything, including very unglamorous work. Often they have great solutions which work okay for them, but are incomprehensible to others. (Example: Paul Graham's Yahoo Store builder in Lisp).
Such people are compensated with maybe stock options, but more importantly, with freedom. That wasn't really on offer at a big company. So we had to look for average people to do average things at an average rate, and usually it would be multiple people to do the job that one brilliant person would have taken on.
The vast majority of companies don't need these great/gifted programmers, they need the workmanlike people who will suffer the constantly changing requirements and priorities, and lack of product management, or even product definition.
Interesting. But what if it's both? Or maybe there's an interaction (expanding on "taste")?
That is, some languages are more expressive and/or powerful than others. Your great programmers will tend to gravitate towards these languages because they're able to spot and leverage their inherent advantages.
Conversely, other programmers will appreciate other qualities in languages, which may or may not overlap or interact with expressiveness etc. - e.g. ease (read: familiarity), rich ecosystem (read: lots of libraries and stackoverflow posts).
You can write any abstraction in any language (more or less). But working in some languages you're less likely to encounter code written by people who realize that.
But, great writing/analysis like this about two levels higher than the HN hivemind can comprehend. X = Y (lisp = productive), sure. But X = Y until Z then maybe Q = F is too nuanced for mass understanding around here. If it can't fit into a pmarca simultaneously smug and condescending tweet, nobody will believe you these days.
If they're such great programmers, don't you think they would also be really good at understanding what tools give them a competitive advantage? ;) "...it may be that Lisp magnifies programmers' strength," doesn't seem fair in this light.
Yeah, it all depends on what you're trying to do. I'd also wager that Graham et al simply had more fun writing Lisp than any other language, and I grant them the right to do whatever they like. Yahoo presumably bought the product because they found it valuable. If they found that rewriting Lisp in C++ was the only way to get people to work on it, I don't question their business decision, although it does seem like a kind of "now you have two problems" situation. (Personally I find C++ way more difficult than anything I've seen in Lisp.)
"Dump code on non-founders"? It's not like Yahoo was forced to take it; including the cost of dealing with the idiosyncrasies of the technology they're buying into the ROI calculation is their job. Assuming that cost was actually significant, pg et all paid the price in the form of a lower offer.
>For example, Viaweb uses (still!) a Lisp-based DSL to provide the non-Turing-complete customization language for their customers, and I suspect that whole thing was a weekend hack.
"Still"? I think that thing has been scrapped for 15 years or so, as Yahoo rewrote the store engine. Or you mean just the user visible language that resulted?
I've never used the thing, so I'm just going off what I've found.
According to Graham, in 2003:
> (a) The reason they rewrote it was entirely that the
current engineers didn't understand Lisp and were too
afraid to learn it.
> (b) The resulting program is a new world's record case
of Greenspun's Tenth Rule. The Yahoo Store Editor called
compile at runtime on s-expressions made on the fly.
To translate this into C++ they literally had to write a
Lisp interpreter.
>In 1998, Yahoo! bought Viaweb for $49.6 million and renamed the service Yahoo! Store.
Note how PG seems bullish on VC growth and large exits, whereas his company didn't take much VC money and had an insignificant exit compared to today's standards (even after adjusting for inflation).
Not to mention that even before sold, ViaWeb had an actual business model and paying customers, as opposed to the model followed by lots of YC companies today.
Practically it's like PG created and sold something like Basecamp/37 Signals, rather than the kind of startups he advocates for...
I think it is a little unfair to expect that PG should have acted 17 years ago in a way that he might do today. Today he has 17 years worth of extra experience to call upon. If I look at code I wrote 17 years ago I do not judge it by the fact that today I could do it better. At the time it was the best I could.
Besides, there are more reasons for selling your company than simply maximising the financial return. Maybe his partners wanted to sell, maybe he was exhausted, maybe he lost his passion for the project, maybe he valued never having to work again by selling for a certain payoff now.
>I think it is a little unfair to expect that PG should have acted 17 years ago in a way that he might do today. Today he has 17 years worth of extra experience to call upon.
But t's not just "today" -- he's been advocating that for over a decade -- so the change was much less than 17 years ago.
>Besides, there are more reasons for selling your company than simply maximising the financial return. Maybe his partners wanted to sell, maybe he was exhausted, maybe he lost his passion for the project, maybe he valued never having to work again by selling for a certain payoff now.
Sure. So why do PG (and others alike) piss on that model that worked for him?
I don't know why you think PG/YC "piss on that model."
The YC website says:
> We try to interfere as little as possible in the startups we fund. We don’t take board seats or many of the other powers investors sometimes require. We offer lots of advice, but we can’t force anyone to take it. We realize that independence is one of the reasons people want to start startups in the first place. And frankly, it’s also one of the reasons startups succeed. Investors who try to control the companies they fund often end up destroying them.
> One concrete consequence is that Y Combinator funding lets you sell early, if you want to. It can sometimes make sense to sell yourself when you’re small for a few million, rather than take more funding and roll the dice again.
And maybe $50M was a pretty fucking nice luiqidation event in 1998 and Yahoo had a brand and user footprint very much larger than what Viaweb could have reasonable been expected to capture on their own.
According to the original developer, the only reason the next developer rewrote the software was because he/she didn't understand or was too afraid to learn.
I think I've heard that argument before, and it doesn't get more convincing over time...
His conclusion is, bluntly, Lisp, since you can reprogram that language arbitrarily and it won't get in your way.
It is also excellent for implementing DSLs, which can be as powerful as you want. For example, Viaweb uses (still!) a Lisp-based DSL to provide the non-Turing-complete customization language for their customers, and I suspect that whole thing was a weekend hack.
(Edit: it probably is Turing complete though.)
The ease of creating such restricted DSLs comes from Lisp's power. At some point you'll need a general purpose language, if only to implement your other specific languages. If your team can be competitively productive with a remarkably powerful language, Graham says you should use it.