TB: Hackers and Painters (Paul Graham)
Core Thesis
Hackers are makers — closer to painters than to scientists. Great hacking requires taste, empathy, and the willingness to think what you're not supposed to think. A programming language should be malleable because programs are how you think, not how you express what you've already thought. The best design is timeless; the best systems are ones that can be rewritten as understanding evolves.
Key Takeaways
Hackers as makers
- Hackers start original and get good; scientists start good and get original.
- The best hacking has morale at its core: if you're bored when building something, the result will be boring.
- If you can imagine someone surpassing you, you should do it yourself.
- Aiming at timelessness is also a way to evade the grip of fashion. The only style worth having is the one you can't help.
Empathy is the core skill
- Empathy is probably the single most important difference between a good hacker and a great one.
- Programs should be written for people to read, and only incidentally for machines to execute.
- A test of empathy: can you explain a technical matter to a non-technical person without using jargon they don't know?
Thinking what you're not supposed to think
- If everything you believe is something you're supposed to believe, that is almost certainly not a coincidence. You probably just think whatever you're told.
- Great work tends to grow out of ideas others have overlooked, and no idea is so overlooked as one that's unthinkable.
- Draw a sharp line between your thoughts and your speech. Inside your head, anything is allowed.
- Argue with idiots, and you become an idiot.
Design and iteration
- It's unrealistic to expect program specifications to be perfect. Write programs in a way that allows specifications to change on the fly.
- Plans are just another word for ideas on the shelf. When good ideas arrive, implement them.
- The best writing is rewriting. Worse is better — a rough sketch refined is better than a perfect outline executed mechanically.
- Committees yield bad design. Their worst danger is that they interfere with redesign.
On wealth and leverage
- If a job feels safe, you will not get rich — because if there's no danger there's almost certainly no leverage.
- To say a certain kind of work is underpaid is identical to saying people want the wrong things.
- You need rich people in society not because they create jobs by spending, but because of what they have to do to get rich — they make things others want.
Programming languages
- A programming language is for thinking about programs, not for expressing programs you've already thought of.
- The main branches of the evolutionary tree of languages pass through those with the smallest, cleanest cores. The more of a language you can write in itself, the better.
- Programming languages are not just technology — they're what programmers think in. Half technology, half religion.
- After a certain age programmers rarely switch languages voluntarily; they tend to consider whatever they're used to as just good enough.
Mental Models
- Take the Other Person's Point of View — empathy is Graham's core criterion for greatness as a hacker or designer
- Inversion — Graham inverts the question: instead of what should I add, ask what can I not help but include (the only style worth having)