Hackers and Painters by Paul Graham — Book Summary, Notes, and Takeaways


 

Hackers and Painters by Paul Graham

Rating: 7/10

Buy the book here — Print | Kindle

Timeless essays from Paul Graham on the early days of the internet, building wealth, starting startups, and the art and science of hacking. Few people pack more wisdom per word than Paul Graham.


1 — Why Nerds Are Unpopular

  • Being smart in a typical American secondary school makes your life difficult — why?
  • American teenagers work at being popular every waking hour, 365 days a year
  • “When you tread water, you lift yourself up by pushing water down”
  • “In some parts of Manhattan, life for women sounds like a continuation of high school with all the same petty intrigues”
  • “ Someone who think his feet naturally hurt is not going to stop to consider the possibility that he is wearing the wrong size shoes”
  • In short, school is a waste of time in which there is no clear goal. We are taught things we don’t need, the social hierarchy ranking is just your ability to improve you rank, and thus for a nerd, its the worst of both worlds. Adults, who have no economic use for teenagers due to specialization, have abandoned teenagers to spend years cooped up together with nothing real to do”
  • Hierarchies in which there is no objective skill or ability is called a court hierarchy — there is no admiration from the bottom up nor noblesse oblige from the top down

2 — Hackers and Painters

  • Hackers and painters have more in common than people want to believe
  • On the computer science spectrum, you have pseudo-mathematicians on one side and hackers on the other. Only the people in the middle are actually doing science
  • Measuring the level of beauty of a piece of software is difficult, and thus measures such as lines of code are used
  • “Hackers need to understand the theory of computation about as much as painters need to understand paint chemistry”
  • Ha — Paul Graham and I both never learned to hold our pencil the way they wanted us to
  • Hacking and Sketching are one in the same — good software is put out there and gradually combed, pruned, and sometimes beaten into shape over continuous iterations. I find this is what I am lacking in some of my technical projects. Code can be improved and modules extended far more than I want to believe
  • “When you damn oscillations, you lose the high points as well” — big companies seek to lower the distribution of outcomes by having huge teams work on very small parts in silos
  • You learn to hack by hacking — just continue doing. And you also learn from examples. Reading some of Mert’s source code like his date_utils will be very valuable to seeing how my modules could be written.
  • Great software requires a fanatical devotion to beauty. Even the parts you expect no one to ever see should be well-written, readable, and well documented.
  • Save a list of easy tasks to do when you are burnt out or not feeling as creative for a large scale project.
  • Looking at things from other people’s point of view is practically the secret of success — empathy is 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”

3 — What You Can’t Say

  • What would someone coming back to visit us in a time machine have to be careful not to say?
  • The Conformist Test
    • Is there any opinions that you would be reluctant to express in front of a group of your peers?
    • If you believe everything you’re supposed to now, how can you be sure you wouldn’t have been a Nazi?
  • Trouble
    • Start keeping track of opinions that get people in trouble and start asking, could this be true?
  • Heresy
    • Which of our taboos future generations will laugh at — start with the labels. Might the things people label as sexist, racist, etc just actually be true?
  • Time and Space
    • Look at what used to be acceptable and is now unthinkable
    • These notions change like the tides in areas that are less concrete
    • If identifying two cultures, in one x is okay, and in y it is unthinkable, its likely that culture y is the mistaken one
  • Prigs
    • Prigs are individuals who go out of their way to vehemently defend their point of view
    • A well brought-up teenage kid’s brain is more or less a collection of all taboos, untainted by experience
  • Mechaism
    • Identifying how taboos are formed
    • What groups are powerful but nervous, and what ideas would they like to suppress?
  • Why
    • Why do we want to do this? 1) Curiousity 2) Want to be ahead of the curve on what later generations will find ridiculous 3) Good for the brain
    • In any competitive field, you can win big by seeing things that others arent. And in every field there are probably heresies that few dare utter
  • Pensieri Stretti
    • Draw a sharp line between your thoughts and your speech
    • The people you can say heretical things to without getting jumped on are the most interesting
  • Viso Sciolto
    • Zealots will try to draw you to a hard line on your thoughts on a given topic
    • Defend this by ratchetching it up one level of abstraction, using metaphors, or with humor
  • Always be questioning
    • When statements are being attacked as x-ist and y-ic, start asking why. And start asking if they might be true.

4 — Good Bad Attitude

  • Ugly and imaginative solutions have something in common — they both break the rules
  • The disobedient attitude of hackers is a net win, but its advantages are not well understood
  • “Florence is famous in that in 1450, it was New York .. filed with turbulent and ambitious people you now find in America”
  • The Laffer cure is an upside-down U shaped parabola that plots tax revenue on the Y axis and tax-rate on the X axis, there is a global max at which people are still willing to work and pay that tax rate

5 — The Other Road Ahead

  • Application Service Provider — since this book was written in 2004, the idea of software being run on the server and not locally on the desktop was so foreign, and 15 years later it dominates the world
  • “You’ll pay for more internet services than you do for the hardware” — this is 15 years ago!
  • “The idea of ‘your computer’ is going away and being replaced by ‘your data’

City of Code

  • Designing web-based software is like designing a city rather than a building; as well as buildings, you need roads, street signs, utilities, police and fire departments, and plans for both growth and various kinds of disasters
  • Server-based software allows you to use any language you want “the top hackers are using languages far remove from C and C++
  • Web-based software allows for continuous deployment, rapid bug identification

Bugs

  • “Fixing a bug in something you wrote six months ago (the average case if you release once a year) is a lot more work

Support

  • A closely-connected customer support and engineering team allows for immediate fixing of bugs. One of the biggest advantages of a start up over a large company is this lack of bureaucracy

Morale

  • Working to implement a single idea in a piece of software breeds hundreds of other ideas. So shelving an idea costs you not only that delay in implementing it, but also all the ideas that implementing it would have led to

Brooks in reverse

  • The Mythical man-month — adding people to a project slows it down as the number of connections between developers grows exponentially with the size of the group.

Watching Users

  • Watching users use your product for the first time is the only necessary thing to do for UX improvements
  • Test-drive when using the product for the first time, something necessary for conversion.

Money

  • Subscription fees as the natural way to bill for web-based applications.
  • Web-based software is far easier to buy than desktop software

6 — How to Make Wealth

A startup is a small company that takes on a hard technical problem

Instead of working at a low intensity for forty years, you work as hard as you possibly can for four

If a fairly good hacker is worth $80,000 a year at a big company, then a smart hacker working very hard without any corporate bullshit to slow him down should be able to do work worth about $3 million a year.

you want to make a million dollars, you have to endure a million dollars' worth of pain

6.1. The Proposition

You do tend to get a certain bulk discount if you buy the economy-size pain, but you can't evade the fundamental conservation law. If starting a startup were easy, everyone would do it.

6.2. Millions, not Billions

There are a lot of ways to get rich, and this essay is about only one of them

6.3. Money Is Not Wealth

7 — Mind the Gap

No one complains when a few people surpass all the rest at playing chess or writing novels, but when a few people make more money than the rest, we get editorials saying this is wrong. the misleading model of wealth we learn as children; the disreputable way in which, till recently, most fortunes were accumulated; and the worry that great variations in income are somehow bad for society

Three reasons wealth accumulation is scrutinized

  • Model we learn as children is that wealth is evenly distributed
  • History of illegal wealth accumulation until recently
  • The axiom that wealth inequality is somehow bad

Wealth is not evenly distributed

  • Money is an exchange of wealth
  • Most jobs create wealth for others in exchange for money to exchange for wealth
  • The idea of work being underpaid is saying people want the wrong things. Of course they do. But how is that unjust?
  • It's only unjust if you think wealth is distributed and not earned on the basis of supply and demand

For the first time, it is more efficient to create wealth than to steal it

Technology has increased the gap of productivity which leads to income inequality

  • But teach has also closed the comfort gap.
  • Brand is the only thing technology can't devalue
  • Social/material gap much smaller than the income gap

The income gap is a sign of a healthy economy

  • Relative poverty > absolute poverty
  • Wealth creation stops when the incentive to generate wealth is taken away

9 — Taste for Makers

He wanted students who were not just good technicians, but who could use their technical knowledge to design beautiful things.

how do you make good stuff

lot of people will tell you that "taste is subjective. Saying that taste is just personal preference is a good way to prevent disputes. The trouble is, it's not true. You feel this when you start to design things. If so, your old tastes were not merely different, but worse. Poof goes the axiom that taste can't be wrong

GOOD DESIGN IS SIMPLE

In writing it means: say what you mean and say it briefly

Underneath the long words or the "expressive" brush strokes, there's not much going on, and that's frightening

GOOD DESIGN IS TIMELESS

if you can imagine someone surpassing you, you should do it yourself

GOOD DESIGN SOLVES THE RIGHT PROBLEM

Better to arrange the dials in a square like the burners

GOOD DESIGN IS SUGGESTIVE

In software, it means you should give users a few basic elements that they can combine as they wish

GOOD DESIGN IS OFTEN SLIGHTLY FUNNY

And so the mark—or at least the prerogative— of strength is not to take oneself too seriously

GOOD DESIGN IS HARD

And so an architect who has to build on a difficult site, or a small budget, will find that he's forced to produce an elegant design

GOOD DESIGN LOOKS EASY

Perhaps what practice does is train your unconscious mind to handle tasks that used to require conscious thought

GOOD DESIGN USES SYMMETRY

repetition and recursion

In software, a problem that can be solved by recursion is nearly always best solved that way. The Eiffel Tower looks striking partly because it is a recursive solution, a tower on a tower.

GOOD DESIGN RESEMBLES NATURE

GOOD DESIGN IS REDESIGN

GOOD DESIGN CAN COPY

I think the greatest masters go on to achieve a kind of selflessness

They're confident enough to take from anyone without feeling that their own vision will be lost in the process

eiπ = -1

GOOD DESIGN HAPPENS IN CHUNKS

10 — Programming Languages Explained

The complete list of things a computer can do is its machine language

The more you have to say to get something done, the harder it is to see bugs.

In fact, this is how most programmers do work. Except the assistant isn't a person, but a compiler. A compiler is a program that translates programs written in a convenient form, like the one liner above, into the simple-minded language that the hardware understands

You could also use an interpreter, which examines your program one piece at a time and executes the corresponding machine language commands

Object code is so hard to read that it is effectively encrypted, thus protecting the company's trade secrets

Fortran, Lisp, Cobol, Basic, C, Pascal, Smalltalk, C++, Java, Perl, and Python

So which one do you use? Ah, well, there is a great deal of disagreement about that

If you only ever eat at McDonald's, it will seem that food is much the same in every country.

10.5. Abstractness

prospect of buffer-overflow attacks to keep them on their toes.1

10.6. Seat Belts or Handcuffs?

Java is in the former camp, and Perl in the latter. (Not surprisingly, the DoD is big on Java

In a statically-typed language, you have to know the kind of values each variable can have at the time you write the program. With dynamic typing, you can set any variable to any value, whenever you want.

10.7. OO

But the object-orientedness of a language is a matter of degree. Indeed, there are two senses of object-oriented: some languages are object-oriented in the sense that they let you program in that style, and others in the sense that they force you to.

10.8. Renaissance

top-heavy: a language whose inner core is not very well designed, but which has enormously powerful libraries of code for solving specific problems

11 — The Hundred-Year Language

What kind of programming language will they use to write the software controlling those flying cars

or by the number of undergrads who believe they have to learn it to get a job

The reason I want to know what languages will be like in a hundred years is so that I know which branch of the tree to bet on now

language can be divided into two parts: some set of fundamental operators that play the role of axioms, and the rest of the language, which could in principle be written in terms of these fundamental operators

It's like the rule that in buying a house you should consider location first of all. Everything else you can fix later, but you can't fix the location.

have a hunch that the main branches of the evolutionary tree pass through the languages that have the smallest, cleanest cores.

My guess is that a hundred years from now people will still tell computers what to do using programs we would recognize as such

Looking forward a hundred years is a graspable idea when we consider how slowly languages have evolved in the past fifty.

Mathematical notation does evolve, but not with the giant leaps you see in technology.

And indeed, the most likely prediction in the speed department may be that Moore's Law will stop working. Anything that's supposed to double every eighteen months seems likely to run up against some kind of fundamental limit eventually

Some of the problems we want to solve with computers are created by computers; for example, the rate at which you have to process video images depends on the rate at which another computer can generate them

I'm like someone who grew up poor and can't bear to spend money even for something important, like going to the doctor.

In language design, we should be consciously seeking out situations where we can trade efficiency for even the smallest increase in convenience.

Instead of having both lists and strings, have just lists, with some way to give the compiler optimization advice that will allow it to lay out strings as contiguous bytes if necessary.1

think some of the best programs were essays, in the sense that the authors didn't know when they started exactly what they were trying to write.

What programmers in a hundred years will be looking for, most of all, is a language where you can throw together an unbelievably inefficient version 1 of a program with the least possible effort

Will we get rid of arrays, for example? After all, they're just a subset of hash tables where the keys are vectors of integers. Will we replace hash tables themselves with lists?

In practice any program that wanted to do any amount of math would probably represent numbers in binary, but this would be an optimization, not part of the core language semantics.

Bottom-up programming means writing a program as a series of layers, each of which serves as a language for the one above

Consider libraries: they're reusable because they're language, whether they're written in an object-oriented style or not.

Large organizations always tend to develop software this way, and I expect this to be as true in a hundred years as it is today.

Except in special kinds of applications, parallelism won't pervade the programs that are written in a hundred years. It would be premature optimization if it did.

It's not true that those who can't do, teach (some of the best hackers I know are professors), but it is true that there are a lot of things that those who teach can't do

Unfortunately the distinction between acceptable and forbidden topics is usually based on how intellectual the work sounds when described in research papers, rather than how important it is

One way to answer this question is to look back. If present-day programming languages had been available in 1960, would anyone have wanted to use them?

But I think the smartest programmers would have had no troublemaking the most of present-day languages, if they'd had them

suggest interesting possibilities: (1) the hundred-year language could, in principle, be designed today, and (2) such a language, if it existed, might be good to program in today. When

12 — Beating the Averages

Viaweb, because our software worked via the Web, instead of running on your desktop computer.

He suggests starting with Python and Java

Lisp is worth learning for the profound enlightenment experience you will have when you finally get it

Lisp will make you a better programmer, and yet you won't use it.

A company that gets software written faster and better will, all other things being equal, put its competitors out of business

The problem here is, average performance means you'll go out of business

Ten years ago, writing applications meant writing applications in C. But with Web-based software, especially when you have the source code of both the language and the operating system, you can use whatever language you want.

But with Lisp our development cycle was so fast that we could sometimes duplicate a new feature within a day or two of a competitor announcing it in a press release

In business, there is nothing more valuable than a technical advantage your competitors don't understand. In business, as in war, surprise is worth as much as force

A startup should give its competitors as little information as possible

Lisp is so great not because of some magic quality visible only to devotees, but because it is simply the most powerful language available. And the reason everyone doesn't use it is that programming languages are not merely technologies, but habits of mind as well

there is a more general principle here: that if you have a choice of several languages, it is, all other things being equal, a mistake to program in anything but the most powerful one

Whatever language people happen to be used to, they tend to consider just good enough.

By induction, the only programmers in a position to see all the differences in power between the various languages are those who understand the most powerful one

But those parentheses are there for a reason. They are the outward evidence of a fundamental difference between Lisp and other languages.

In Lisp, these programs are called macros. They are programs that write programs.

What that means is that at least 20-25% of the code in this program is doing things that you can't easily do in any other language

Computer hardware changes so much faster than personal habits that programming practice is usually ten to twenty years behind the processor

turn the Blub paradox to your advantage: you can use technology that your competitors, glued immovably to the median language, will never be able to match.

here's a handy tip for evaluating competitors. Read their job listings

If they wanted Perl or Python programmers, that would be a bit frightening—that's starting to sound like a company where the technical side, at least, is run by real hackers

The pointy-haired boss miraculously combines two qualities that are common by themselves, but rarely seen together: (a) he knows nothing whatsoever about technology, and (b) he has very strong opinions about it.

13 — Revenge of the Nerds

The pointy-haired boss believes that all programming languages are pretty much equivalent. If that were true, he would be right on target. If languages are all equivalent, sure, use whatever language everyone else is using.

The disadvantage of believing that all programming languages are equivalent is that it's not true. But the advantage is that it makes your life a lot simpler. And I think that's the main reason the idea is so widespread. It is a comfortable idea

If you look at these languages in order, Java, Perl, Python, Ruby, you notice an interesting pattern. At least, you notice this pattern if you are a Lisp hacker. Each one is progressively more like Lisp

As a rule, the more demanding the application, the more leverage you get from using a powerful language

If you just need to feed data from one Windows app to another, sure, use Visual Basic.

I can think of three problems that could arise from using less common languages. Your programs might not work well with programs written in other languages. You might have fewer libraries at your disposal. And you might have trouble hiring programmers.