All code is liability.
- Peter Norvig
Information wants to be free.
- Stewart Brand
Data wants to be dirty.
Duplicated data wants to skew.
Scope wants to creep.
Code wants to be broken.
All models are wrong. Some are useful.
By June 1949, people had begun to realize that it was not so easy to get a program right as had at one time appeared. … It was on one of my journeys between the EDSAC room and the punching equipment that the realization came over me with full force that a good part of the remainder of my life was going to be spent in finding errors in my own programs.
A systems programmer will know what to do when society breaks down, because the systems programmer already lives in a world without law.
Docker containers are kind of neat. They are also kind of a craven surrender to the rotting mess of excessive software complexity.
– John Carmack Hamming
The first rule of systems engineering is: If you optimize the components you will probably ruin the system performance.
- Richard W. Hamming
- Make the requirements less dumb.
(Aka, question the requirements.)
- Try very hard to delete the part or process.
(Aka, the best part is no part. The best process is no process.)
- Simplify and optimize the design.
- Accelerate cycle time.
- Elon Musk
To this very day, idiot software managers measure “programmer productivity” in terms of “lines of code produced,” whereas the notion of “lines of code spent” is much more appropriate.
- Edsger W. Dijkstra
Software has bugs. Security-relevant software has security-relevant bugs.
Running a successful open source project is just Good Will Hunting in reverse, where you start out as a respected genius and end up being a janitor who gets into fights.
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure.
When a program has nothing surprising, interesting or useful to say, it should say nothing.
A program that uses an interface must not be confused by an implementation of that interface.
- Liskov Substitution Principle
Gather together the things that change for the same reasons. Separate things that change for different reasons.
- Single Responsibility Principle
A Module should be open for extension but closed for modification.
- Open-Closed Principle
Keep interfaces small so that users don’t end up depending on things they don’t need.
- Interface Segregation Principle
Depend in the direction of abstraction. High level modules should not depend upon low level details.
- Dependency Inversion Principle
Type systems and type checking in programming languages are just an approximate solution to a more general problem: determining whether a program is free of errors for all possible values of variables along all possible control flow paths.
Always do the hard part first. If the hard part is impossible, why waste time on the easy part? Once the hard part is done, you’re home free.
- Al Schapira
Always do the easy part first. What you think at first is the easy part often turns out to be the hard part. Once the easy part is done, you can concentrate all your efforts on the hard part.
- Al Schapira
Of all my programming bugs, 80 percent are syntax errors. Of the remaining 20 percent, 80 percent are trivial logical errors. Of the remaining 4 percent, 80 percent are pointer errors. And the remaining 0.8 percent are hard.
- Marc Donner
Twenty percent of all input forms filled out by people contain bad data.
- Vie Vyssotsky
Eighty percent of all input forms ask questions they have no business asking.
- Mike Garey
When in doubt, use brute force.
- Ken Thompson, Bell Labs
To be a programmer is to develop a carefully managed relationship with error.
- Ellen Ullman
Everything should be built top-down, except the first time.
- Alan Perlis
We build our computer systems the way we build our cities: over time, without a plan, on top of ruins.
- Life in Code, Ellen Ulman
Choose the least powerful programming language suitable for a given purpose, not the most powerful.
- Rule of least power, W3C
maybe teaching sand to do math was a mistake
if you ever code something that “feels like a hack but it works,” just remember that a CPU is literally a rock that we tricked into thinking
not to oversimplify: first you have to flatten the rock and put lightning inside it
- ben (@daisyowl)
The more equally attractive two alternatives seem, the harder it can be to choose between them — no matter that, to the same degree, the choice can only matter less.
- Edward Fredkin
Before you can develop reusable software you need to have developed it three times. Before you can reap the benefits of reuse, you need to reuse it at least three times.
- “Rule of Threes,” Ted Biggerstaff, via Will Tracz
We have a squeaky bathroom door, so I thought we need to oil it. Then I realised there are a few other doors in the house that need oiled. Then I thought “wouldn’t it be cool if I could pour oil down one pipe and oil all the doors at once?” That’s how software engineers think.
When AT&T donated the V6 source code to Berkeley, it was classified as industrial waste for tax purposes.
As it was explained to me, the law at the time said if your business produced byproducts that had economically recoverable value, you could get a tax break by donating them.
So, for example, if you were Kodak, and your film factory produced effluent with silver dissolved in it, you could get a tax break by donating it to someone who’d recover the silver.
AT&T being the Phone Company, they were forbidden to commercialize anything not directly related to telephony. UNIX was a byproduct of their research work, and they couldn’t sell it. But they could give it away as sludge!
Just like entropy always increases, mean time to failure always decreases.
- Alan Perlis, paraphrased
I’ll buckle down and get to work as soon as I finish reading the internet.
Show me your flowcharts, and conceal your tables, and I shall continue to be mystified; show me your tables and I won’t usually need your flowcharts: they’ll be obvious.
- Fred Brooks, The Mythical Man Month
Technology is anything that doesn’t work quite yet.
- Danny Hillis
Early in the morning of 17 July 1997, human error at Network Solutions causes the DNS table for .com and .net domains to become corrupted, making millions of systems unreachable.
There are really only two types of computations: calculating stuff about an unchanging thing, and calculating a new version of a thing that is changing over time. Recognizing this simplifies the debate over functional versus imperative programming.
The Fallacies of Distributed Computing
* The network is reliable
* Latency is zero
* Bandwidth is infinite
* The network is secure
* Topology doesn’t change
* There is one administrator
* Transport cost is zero
* The network is homogeneous
- Bill Joy, Tom Lyon
The paging will continue until the nines improve.
All code is technical debt; it’s just different interest rates we’re paying on it. Debt powers the economy and it powers your business. None of this is inherently good or bad. It’s a tool.
- Dormain Drewitz
The condition of any backup is unknown until a restore is attempted.
- “Schrödinger’s Backup,” Redditor intelx88
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.
- Brian Kernighan (aka Kernighan’s Law)
[On naming systems]
Human-meaningful, secure, decentralized: choose two.
- Zooko’s Triangle, Zooko Wilcox-O’Hearn
Consistency, availability, partition tolerance: choose two.
- CAP Theorem, Eric Brewer
When we can finally print from any computer to any printer consistently, there will be no computer science problems left to solve.
- Steve Moyer (Moyer’s Law)
If it doesn’t work, it doesn’t matter how fast it doesn’t work.
- Mich Ravera
Never attribute to malice that which can be adequately explained by stupidity.
- Hanlon’s Razor
Never attribute to stupidity that which can be adequately explained by complexity.
- Thompson’s Razor
There is always a well-known solution to every human problem – neat, plausible, and wrong.
The Tao gave birth to machine language. Machine language gave birth to the assembler. The assembler gave birth to the compiler. Now there are ten thousand languages.
Each language has its purpose, however humble. Each language expresses the Yin and Yang of software. Each language has its place within the Tao.
But do not program in COBOL if you can avoid it.
Oftentimes, when trying to reinvent the wheel, you end up with a wheel. But there is a nice moment of “huh, I guess that’s why people just use wheels”… that process of justifying the standard is satisfying, if massively wasteful.
- Mike Bithell
An [engineer] can mull over complicated designs for months. Then suddenly the simple, elegant, beautiful solution occurs to them. When it happens to you, it feels as if God is talking! And maybe He is.
- Leo Frankowski
Cryptography turns a big amount of data to secure into a big amount of data and a small additional amount of radioactive waste.
Insecurity is like entropy. You can’t eliminate it, but you can move it around.
- internal NSA saying, via Steve Bellovin
All code you haven’t tested is wrong. All code you have tested is also wrong, but appears to work by coincidence. And code you’ve proven correct does the wrong thing, correctly.
The paradox is that when managers focus on productivity, long-term improvements are rarely made. On the other hand, when managers focus on quality, productivity improves continuously.
One of the superpowers of the most effective programmers must be not travelling down a meandering hole of upgrading all code possibly tangentially related to the thing they are working on.
I have not mastered this.
There exists in such a case a certain institution or law; let us say, for the sake of simplicity, a fence or gate erected across a road. The more modern type of reformer goes gaily up to it and says, ‘I don’t see the use of this; let us clear it away.’ To which the more intelligent type of reformer will do well to answer: ‘If you don’t see the use of it, I certainly won’t let you clear it away. Go away and think. Then, when you can come back and tell me that you do see the use of it, I may allow you to destroy it.’
– “Chesterton’s Fence” (G. K. Chesterton)
At my last job, a team put up a poster for their reusable components. It said:
We made a thing from scratch, so you don’t HAVE to make things from scratch.
But when engineers read this, they see:
We made a thing from scratch, so you don’t GET to make things from scratch.
What five words best describe programming?
Tell rocks what to think
It works on my computer
Google, StackOverflow, Quora, Reddit, Slack
My estimate of five words was slightly off
Turtles all the way down
How did this ever work?
When you finish a PhD in computer science, they take to a special room and explain that you must never use recursion in real life. Its only purpose is to make programming hard for undergrads.
Another flaw in the human character is that everybody wants to build and nobody wants to do maintenance.
- Kurt Vonnegut, Hocus Pocus
A simple heuristic for technical debt: It’s always fine to introduce a quick hack. But as soon as you have to work around that hack, stop and fix it instead.
If you have a procedure with 10 parameters, you probably missed some.
- Alan Perlis
Optimization hinders evolution.
- Alan Perlis
Every program has (at least) two purposes: the one for which it was written, and another for which it wasn’t.
- Alan Perlis
To err is human; to manage error is system.
- Kevin Kelly
If software cannot be maintained, then it will be rewritten.
- Dave Cheney
A programming language is low level when its programs require attention to the irrelevant.
- Alan Perlis
There is an old network saying: Bandwidth problems can be cured with money. Latency problems are harder because the speed of light is fixed. You can’t bribe God.
Peres’s Law: If a problem has no solution, it may not be a problem, but a fact; not to be solved, but to be coped with over time.
- Shimon Peres
One programmer’s constant is another programmer’s variable.
- Alan Perlis
Code is like humor. When you have to explain it, it’s bad.
- Cory House
The only thing you will get from a Big Bang Rewrite is a big bang.
- Martin Fowler
The first step of any project is to grossly underestimate its complexity and difficulty.
- Nicoll Hunt
Hofstadter’s Law: It always takes longer than you expect, even when you take into account Hofstadter’s Law.
The trick is to fix the problem you have, rather than the problem you want.
- Bram Cohen
- Pranay Pathole
Of all the technical debt you can incur, the worst in my experience is bad names – database columns, variables, functions, etc. Fix those IMMEDIATELY before they metastasize all over your codebase and become extremely painful to fix later…and they always do.
- Jeff Atwood
- Graham Lee, paraphrased
- Aaron Boodman
There is a rising tide of security breaches. There is an even faster rising tide of hysteria. Yet the world is doing remarkably well overall. This continuing general progress of society suggests that cyber security is not very important.
- Andrew Odlyzko
This stuff is really important. We don’t want to swap the As and the Ts, that would be a real mess.
- NIH / All of Us
The cost of adding a feature isn’t just the time it takes to code it. It’s also an obstacle to future expansion…The trick is to pick the features that don’t fight each other.
- John Carmack
First you listen to the users; then you ignore them.
- Ken Arnold
Why does a computer with 1000x faster processor and 100x more memory than 20 years ago still feel slower?
Our use of technology always expands to the very edge of its capacity. A thousand years from now, everyday technology will be just barely sufficient for the job.
- Jevon’s Paradox (aka Wirth’s law aka Page’s law aka Gates’s law aka May’s law)
- Make it work.
- Make it right.
- Make it fast.
- Kent Beck
Old technology fails frequently, but in a reliable way. New technology fails less often, but when it fails, it fails in an unexpectedly new way we are not prepared for.
- Kevin Kelly
The key to performance is elegance, not battalions of special cases. The terrible temptation to tweak should be resisted unless the payoff is really noticeable.
- Jon Bentley and Doug McIlroy
Marie Kondo, but for source code. Line by line, does this spark joy? Delete, delete, delete. So long, and thanks for all the bugs.
- Ben Werdmüller
Don’t solve a problem just because you can imagine it. Wait until there is a problem, then go after it. If you over-anticipate, you will design freedom out of the system.
- Stewart Brand
Matlab has normalized the practice of storing array indices as floats starting at 1.0, which now that I am used to it makes me think why bathe or brush my teeth? Why not start doing meth? Why bother at all?
- Seamus Blackley
Everything is broken.
- Quinn Norton, Bob Dylan, True Detective, and more…
People think that computer science is the art of geniuses but the actual reality is the opposite, just many people doing things that build on each other, like a wall of mini stones.
- Donald Knuth
Don’t patch bugs out, rewrite them out.
Absence is beauty, in error logs.
- Leonard Bogdonoff
Civilization advances by extending the number of important operations which we can perform without thinking of them.
- Alfred North Whitehead
Load-bearing optimization, n.
A performance-related change – for example, adding a cache – that accidentally becomes required for correctness.
It’s a curious thing about our industry: not only do we not learn from our mistakes, we also don’t learn from our successes.
- Keith Braithwaite
If you have error reporting and your team ignores it, you don’t have error reporting.
- Graham Hoefer
Sometimes the problem is to discover what the problem is.
- Gordon Glegg
Code gets rewritten all the time. Don’t get attached to it. The ideas are all that matter.
- Parisa Tabriz
|availability||downtime, per year||cost|
|99.9999||31.5s||you can’t afford it|
- Christopher Church (tweet)
$ git rebase -i master
error: from the abyss the howls of the Old Ones devour the last shreds of your sanity.
When you have resolved this error, use git rebase –continue
- Andrew Chatham (tweet)
Testing leads to failure, and failure leads to understanding.
- Burt Rutan (SpaceShipOne designer)
Hyrum’s Law: With a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors will be depended on by somebody.
- Hyrum Wright; obligatory XKCD
- Russ Cox and Titus Winters
Sometimes, the elegant implementation is just a function. Not a method. Not a class. Not a framework. Just a function.
- John Carmack
We sort of understood abstractly the idea that there are only two kinds of software projects: failures and future legacy horrors.
- Peter Weinberger
- Charles Goodhart
Walking on water and developing software from a specification are easy if both are frozen.
- Edward V Berard
No one in the brief history of computing has ever written a piece of perfect software. It’s unlikely that you’ll be the first.
- Andy Hunt
A primary cause of complexity is that software vendors uncritically adopt almost any feature that users want.
- Niklaus Wirth
The best programs are the ones written when the programmer is supposed to be working on something else.
- Melinda Varian
“Feral systems”: Access databases, spreadsheets with macros, and other hacked solutions made out of frustration when current systems don’t meet a need.
The trouble with programmers is that you can never tell what a programmer is doing until it’s too late.
- Seymour Cray
Measuring programming by lines of code is like measuring aircraft building by weight.
- Bill Gates
Rules of Optimization:
Rule 1: Don’t do it.
Rule 2 (for experts only): Don’t do it yet.
- Michael A. Jackson
CoffeeScript, Haml, Sass, all on top of me, holding me up psychologically for MONTHS.
– @erowidrecruiter (Markov-powered mashup of Erowid trip reports and tech recruiter emails)
Writing code is not an exercise in [ego].
- Mark Hahn
If you’ve been pounding nails with your forehead for years, it may feel strange the first time somebody hands you a hammer. But that doesn’t mean that you should strap the hammer to a headband just to give your skull that old familiar jolt.
- Wayne Throop
Junior developer: “I will just copy over this code to reuse it”
Middle developer: “I will make it DRY with code sharing/inheritance/macros”
Senior developer: “I will just copy over this code to reuse it”
We are in the business of novel outages.
Unix was not designed to stop people from doing stupid things, because that would also stop them from doing clever things.
- Doug Gwyn
Twyman’s Law: Any figure that looks interesting or different is usually wrong.
- Tony Twyman
As-builts are building plans that show in detail exactly what was built, which is always significantly different from what was in the original plans. Without accurate as-builts, says Chuck Charlton, “An electrical failure can have you wandering through the building shotgunning circuit breakers and shinnying down the chases.” …If the as-builts aren’t updated constantly, each bit of repair or remodeling, each new contractor, each change of property management makes the plans more misleading.
- Stewart Brand, How Buildings Learn (see my full presentation)
We live in a society exquisitely dependent on science and technology, in which hardly anyone knows anything about science and technology.
- Carl Sagan
Give someone a program, you frustrate them for a day. Teach them how to program, you frustrate them for a lifetime.
- David Leinweber
I call it my billion-dollar mistake. It was the invention of the null reference in 1965.
- Tony Hoare
Every technology, when sufficiently complicated, becomes programmable.
Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.
Compatibility means deliberately repeating other people’s mistakes.
- David Wheeler
If the code and the comments disagree, both are probably wrong.
- Norm Schryer
Debugging is like being the detective in a crime movie where you are also the murderer.
- Filipe Fortes
You don’t pay engineers to write code, you pay them to understand problems, subtleties, and edges. The code is incidental.
- Ted Dziuba
Given sufficient abstraction, every problem becomes hard.
Given sufficient abstraction, every problem becomes every problem.
Technology…is a queer thing. It brings you great gifts with one hand, and it stabs you in the back with the other.
- C. P. Snow
We’re trying to change the Kleenex mentality of technology – you buy a smartband or an Android Wear watch and next year you’ll throw it away…We need to create objects that are worth keeping and upgrading.
- Philippe Kahn
Any sufficiently advanced magic is indistinguishable from technology.
- unknown (apocryphal Larry Niven, Terry Pratchett; note inversion of Arthur C Clarke’s law!)
Technology is the knack of so arranging the world that we don’t have to experience it.
- Max Frisch
Productivity and reliability depend on the length of the program text, independent of language. You will produce roughly the same number of lines of code in assembly, per hour, as in Ruby or Scheme or Perl.
- Lutz Prechelt (based on actual research studies)
Any problem can be solved by adding a layer of indirection…but where network engineering is involved, it’s more effective to just stuff it into DNS.
- Geoff Huston
A week of coding can save an hour of thinking.
All technology should be assumed guilty until proven innocent.
- Jerry Mander
Engineering is what happens when you take science and economics and try to put them together.
- Greg Wilson
Why do engineers seem like such different people? We live every day in a world where one misplaced character brings the whole world crashing down around us.
“Write code that’s easy to delete, not easy to extend.”
The experienced CTO does not feel guilty about technical debt. What counts is how (and how much) they deal with it.
1995: Every object in your home has a clock & it is blinking 12:00
2025: Every object in your home has a IP address & the password is Admin
[Software] is never finished, only abandoned.
- Leonardo da Vinci
An action or resource should either not be permitted (zero), happen uniquely (one), or have no arbitrary limit at all (infinity).
- Willem van der Poel
Manual until it hurts.
- Ryan, re automation
Software is not an academic discipline, not a liberal art. It’s a craft. And the only way to learn craftsmanship is to apprentice.
At 9:37AM PST, an authorized S3 team member using an established playbook executed a command…one of the inputs to the command was entered incorrectly…
“The road of life is paved with flat squirrels who couldn’t make a decision.”
- Anonymous (via MSK)
Most papers in computer science describe how their author learned what someone else already knew.
- Peter Landin
You cannot release crap. There are companies that do this and end up making a tidy profit. You are not that person, because once you are rewarded for releasing crap, you begin a blind walk down a path of mediocrity that ends up with you working at Computer Associates on a product no one has heard of and that no one cares about.
BUG REPORT: I’ve written hundreds of great tweets and bad things are still happening.
Rules of abstraction: 1. Don’t use abstraction 2. Don’t use abstraction 3. Only consider abstraction when you see at least three things that ARE the same 4. All abstractions must pay for themselves 5. Beware DRY, the evil siren that tricks you into abstraction
In the beginning, the first programmer wrote code from scratch.
Henceforth, all code was copied, pasted, and modified.
- Programmer’s Bible, Code Psalms 12:56-57
Yesterday I was clever, so I wanted to change the world. Today I am wise, so I am changing myself. ― Jalaluddin Rumi
Have no fear of perfection. You’ll never reach it.
- Salvador Dali (via MSK)
My job is to copy data from one protocol buffer to another.
- ancient Google proverb
Anything from before you were born is normal and natural. Anything invented between when you were 15 and 35 is revolutionary and exciting. Anything invented after you’re 35 is against the natural order.
- Douglas Adams
[Looking at dependencies…]
Wait, my code depends on what?
- ancient Google proverb
Technical mistakes can and will be corrected with a strong community, but not the other way around.
- Yehuda Katz (via zack)
Talent hits a target no one else can hit. Genius hits a target no one else can see.
- Arthur Schopenhauer (via Othman)
The question of whether machines can think is about as relevant as the question of whether submarines can swim.
- Edsger Dijkstra
I love deadlines. I love the whooshing noise they make as they go by.
- Douglas Adams
When a computer receives conflicting instructions from its owner and a third party, the owner should always win.
- Cory Doctorow, re DRM
Object-oriented programming is an exceptionally bad idea which could only have originated in California.
- Edsger W. Dijkstra
We are stuck with technology when what we really want is just stuff that works.
- Douglas Adams
Computer Science is no more about computers than astronomy is about telescopes.
The Programmers’ Credo: we do these things not because they are easy, but because we thought they were going to be easy.
A good scientist has original ideas. A good engineer makes designs with as few original ideas as possible.
- Freeman Dyson
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Einstein argued that there must be simplified explanations of nature, because God is not capricious or arbitrary. No such faith comforts the software engineer.
- Fred Brooks
In computer science, we’re privileged to run elbows with the giants on whose shoulders we stand.
I define UNIX as 30 definitions of regular expressions living under one roof.
- Donald Knuth
The best minds of my generation are thinking about how to make people click ads.
- Jeff Hammerbacher
Defenders have to be right every time. Attackers only have to be right once.
A distributed system is one in which the failure of a computer you didn’t even know existed can render your own computer unusable.
- Leslie Lamport
Beware of bugs in the above code; I have only proved it correct, not tried it.
- Donald Knuth
In my experience, all distributed consensus algorithms are either 1: Paxos, 2: Paxos with extra unnecessary cruft, or 3: broken.
- Mike Burrows
We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.
Progress is a new error message.
The idea that new code is better than old is patently absurd. Old code has been used. It has been tested. Lots of bugs have been found, and they’ve been fixed. There’s nothing wrong with it. It doesn’t acquire bugs just by sitting around on your hard drive. Au contraire, baby! Is software supposed to be like an old Dodge Dart, that rusts just sitting in the garage? Is software like a teddy bear that’s kind of gross if it’s not made out of all new material?
The first step in fixing a broken program is getting it to fail repeatably.
- Tom Duff
It is basically always the case that the long-term costs of keeping a system working reliably vastly exceed any inconveniences you encounter while building it.