More on this book
Community
Kindle Notes & Highlights
by
Paul Graham
Read between
June 9, 2022 - March 5, 2023
Moral fashions more often seem to be created deliberately. When there’s something we can’t say, it’s often because some group doesn’t want us to.
I suspect the biggest source of moral taboos will turn out to be power struggles in which one side barely has the upper hand. That’s where you’ll find a group powerful enough to enforce taboos, but weak enough to need them.
Most struggles, whatever they’re really about, will be cast as struggles between competing ideas.
It’s easier to get people to fight for an idea. And whichever side wins, their ideas will also be considered to have triumphed, as if God wanted to signal his agreement by selecting that side as the victor.
I’m not saying that struggles are never about ideas, just that they will always be made to seem to be about ideas, whether they are or not. And just as there is nothing so unfashionable as the last, discarded fashion, there is nothing so wrong as the principles of the most recently defeated opponent.
Although fashions in ideas tend to arise from different sources than fashions in clothing, the mechanism of their adoption seems much the same. The early adopters will be driven by ambition: self-consciously cool people who want to distinguish themselves from the common herd. As the fashion becomes established they’ll be joined by a second, much larger group, driven by fear.9 This second group adopt the fashion not because they want to stand out but because they are afraid of standing out.
Great work tends to grow out of ideas that others have overlooked, and no idea is so overlooked as one that’s unthinkable.
In the sciences, especially, it’s a great advantage to be able to question assumptions. The m.o. of scientists, or at least of the good ones, is precisely that: look for places where conventional wisdom is broken, and then try to pry apart the cracks and see what’s underneath. That’s where new theories come from.
Whatever the reason, there seems a clear correlation between intelligence and willingness to consider shocking ideas. This isn’t just because smart people actively work to find holes in conventional thinking. Conventions also have less hold over them to start with. You can see that in the way they dress.
Training yourself to think unthinkable thoughts has advantages beyond the thoughts themselves. It’s like stretching. When you stretch before running, you put your body into positions much more extreme than any it will assume during the run. If you can think things so outside the box that they’d make people’s hair stand on end, you’ll have no trouble with the small trips outside the box that people call innovative.
When you find something you can’t say, what do you do with it? My advice is, don’t say it. Or at least, pick your battles.
Argue with idiots, and you become an idiot.
The most important thing is to be able to think what you want, not to say what you want. And if you feel you have to say everything you think, it may inhibit you from thinking improper thoughts.
The trouble with keeping your thoughts secret, though, is that you lose the advantages of discussion. Talking about an idea leads to more ideas. So the optimal plan, if you can manage it, is to have a few trusted friends you can speak openly to. This is not just a way to develop ideas; it’s also a good rule of thumb for choosing friends. The people you can say heretical things to without getting jumped on are also the most interesting to know.
Zealots will try to draw you out, but you don’t have to answer them. If they try to force you to treat a question on their terms by asking “are you with us or against us?” you can always just answer “neither.” Better still, answer “I haven’t decided.”
Like skirmishers in an ancient army, you want to avoid directly engaging the main body of the enemy’s troops. Better to harass them with arrows from a distance. One way to do this is to ratchet the debate up one level of abstraction. If you argue against censorship in general, you can avoid being accused of whatever heresy is contained in the book or film that someone is trying to censor.
You can attack labels with meta-labels: labels that refer to the use of labels to prevent discussion. The spread of the term “political correctness” meant the beginning of the end of political correctness, because it enabled one to attack the phenomenon as a whole without being accused of any of the specific heresies it sought to suppress.
Time gives us such distance for free. Indeed, the arrival of new fashions makes old fashions easy to see, because they seem so ridiculous by contrast. From one end of a pendulum’s swing, the other end seems especially far away.
To see fashion in your own time, though, requires a conscious effort. Without time to give you distance, you have to create distance yourself. Instead of being part of the mob, stand as far away from it as you can and watch what it’s doing. And pay especially close attention whenever an idea is being suppressed.
If a statement is false, that’s the worst thing you can say about it. You don’t need to say that it’s heretical. And if it isn’t false, it shouldn’t be suppressed. So when you see statements being attacked as x-ist or y-ic (substitute your current values of x and y), whether in 1630 or 2030, that’s a sure sign that something is wrong. When you hear such labels being used, ask why.
How can you see the wave, when you’re the water? Always be questioning. That’s the only defence. What can’t you say? And why?
To the popular press, “hacker” means someone who breaks into computers. Among programmers it means a good programmer. But the two meanings are connected. To programmers, “hacker” connotes mastery in the most literal sense: someone who can make a computer do what he wants — whether the computer wants to or not.
Those in authority tend to be annoyed by hackers’ general attitude of disobedience. But that disobedience is a byproduct of the qualities that make them good programmers.
there is a deeper reason that hackers are alarmed by measures like copyrights and patents. They see increasingly aggressive measures to protect “intellectual property” as a threat to the intellectual freedom they need to do their job. And they are right.
The next generation of computer technology has often — perhaps more often than not — been developed by outsiders. In 1977 there was no doubt some group within IBM developing what they expected to be the next generation of business computer. They were mistaken. The next generation of business computer was being developed on entirely different lines by two long-haired guys called Steve in a garage in Los Altos.
The latest intellectual property laws impose unprecedented restrictions on the sort of poking around that leads to new ideas. In the past, a competitor might use patents to prevent you from selling a copy of something they made, but they couldn’t prevent you from taking one apart to see how it worked. The latest laws make this a crime. How are we to develop new technology if we can’t study current technology to figure out how to improve it?
Increasingly, the brains (and thus the value) of products is in software.2 And by this I mean software in the general sense: i.e. data. A song on an LP is physically stamped into the plastic. A song on an iPod’s disk is merely stored on it. Data is by definition easy to copy. And the Internet makes copies easy to distribute. So it is no wonder companies are afraid.
Hackers are unruly. That is the essence of hacking. And it is also the essence of American-ness. It is no accident that Silicon Valley is in America, and not France, or Germany, or England, or Japan. In those countries, people color inside the lines.
I think a society in which people can do and say what they want will also tend to be one in which the most efficient solutions win, rather than those sponsored by the most influential people. Authoritarian countries become corrupt; corrupt countries become poor; and poor countries are weak.
it is the people who break rules that are the source of America’s wealth and power.
When we started Viaweb, hardly anyone understood what we meant when we said that the software ran on the server. It was not until Hotmail was launched a year later that people started to get it. Now everyone knows that this is a valid approach. There is a name now for what we were: an Application Service Provider, or ASP.
Web-based applications are programs that run on web servers and use web pages as the user interface. For the average user this new kind of software will be easier, cheaper, more mobile, more reliable, and often more powerful than desktop software.
To use a purely web-based application, all you need is a browser connected to the Internet. So you can use a web-based application anywhere. When you install software on your desktop computer, you can only use it on that computer. Worse still, your files are trapped on that computer. The inconvenience of this model becomes more and more evident as people get used to networks.
The whole idea of “your computer” is going away, and being replaced with “your data.” You should be able to get at your data from any computer. Or rather, any client, and a client doesn’t have to be a computer.
When you use a web-based application, your data will be safer. Disk crashes won’t be a thing of the past, but users won’t hear about them anymore. They’ll happen within server farms. And companies offering web-based applications will actually do backups — not only because they’ll have real system administrators worrying about such things, but because an ASP that does lose people’s data will be in big, big trouble. When people lose their own data in a disk crash, they can’t get that mad, because they only have themselves to be mad at. When a company loses their data for them, they’ll get a lot
...more
To developers, the most conspicuous difference between web based and desktop software is that a web-based application is not a single piece of code. It will be a collection of programs of different types rather than a single big binary. And so 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.
Because the software in a web-based application will be a collection of programs rather than a single binary, it can be written in any number of different languages. When you’re writing desktop software, you’re practically forced to write the application in the same language as the underlying operating system — meaning C and C++.
With server-based software, no one can tell you what language to use, because you control the whole system, right down to the hardware. Different languages are good for different tasks. You can use whichever is best for each. And when you have competitors, “you can” means “you must” (we’ll return to this later), because if you don’t take advantage of this possibility, your competitors will.
With server-based software, most of the change is small and incremental. That in itself is less likely to introduce bugs. It also means you know what to test most carefully when you’re about to release software: the last thing you changed. You end up with a much firmer grip on the code.
With web-based software, you never have to release software before it works, and you can release it as soon as it does work.
Fixing fresh bugs is easier than fixing old ones. It’s usually fairly quick to find a bug in code you just wrote. When it turns up you often know what’s wrong before you even look at the source, because you were already worrying about it subconsciously. Fixing a bug in something you wrote six months ago (the average case if you release once a year) is a lot more work. And since you don’t understand the code as well, you’re more likely to fix it in an ugly way, or even introduce more bugs.
When you catch bugs early, you also get fewer compound bugs. Compound bugs are two separate bugs that interact: you trip going downstairs, and when you reach for the handrail it comes off in your hand.
It helps if you use a technique called functional programming. Functional programming means avoiding side effects. It’s something you’re more likely to see in research papers than commercial software, but for web-based applications it turns out to be really useful.
At Viaweb, support was free, because we wanted to hear from customers. If someone had a problem, we wanted to know about it right away so we could reproduce the error and release a fix.
Our approach to support made everyone happier. The customers were delighted. Just imagine how it would feel to call a support line and be treated as someone bringing important news. The customer support people liked it because it meant they could help the users, instead of reading scripts at them. And the programmers liked it because they could reproduce bugs instead of just hearing vague second-hand reports about them.
At most software companies, support people are underpaid human shields, and hackers are little copies of God the Father, creators of the world. Whatever the procedure for reporting bugs, it is likely to be one-directional: support people who hear about bugs fill out some form that eventually gets passed on (possibly via QA) to programmers, who put it on their list of things to do. It was different at Viaweb. Within a minute of hearing about a bug from a customer, the support people could be standing next to a programmer hearing him say “Shit, you’re right, it’s a bug.” It delighted the support
...more
Plans are just another word for ideas on the shelf. When we thought of good ideas, we implemented them.
as groups get smaller, software development gets exponentially more efficient. I can’t remember the programmers at Viaweb ever having an actual meeting. We never had more to say at any one time than we could say as we were walking to lunch.
Software should do what users think it will. But you can’t have any idea what users will be thinking, believe me, until you watch them.
Efficiency matters for server-based software, because you’re paying for the hardware. The number of users you can support per server is the divisor of your capital cost, so if you can make your software very efficient, you can undersell competitors and still make a profit.