Controlling complexity is the essence of computer programming.
– p.319, Software Tools
If our basic tool, the language in which we design and code our programs,
is also complicated, the language itself becomes part of the problem
rather than part of its solution.
– C.A.T Hoare, Turing Award Lecture
I conclude that there are two ways of constructing a software design: One
way is to make it so simple that there are obviously no deficiencies
and the other way is to make it so complicated that there are no
obvious deficiencies.
– C. A. T Hoare, Turing Award Lecture
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
The important thing is to start with a good design. It is much easier
to relax the standards for something well written than it is to tighten
them for something badly written.
– p.257, Software Tools
Our rule is always: Write something clean and acceptable that works, then
polish it later if necessary.
– p.265, Software Tools
But we try to avoid such solutions, convenient as they may at first appear,
because they violate a basic principle of top-down design: every function
should return to where it is called. This way, strategy is kept
visible (and changeable) at the highest level of the code, and execution
proceeds strictly from top to bottom.
– p.47, Software Tools
The value of a telecommunications network is proportional to the square of
the number of connected users of the system (n2).
– Metcalfe’s law
Given enough eyeballs, all bugs are shallow.
– Eric Steven Raymond puts it as “Linus’ Law”
Program testing can be used to show the presence of bugs, but never to show
their absence.
– Dijkstra
C makes it easy to shoot yourself in the foot; C++ makes it harder, but
when you do, it blows away your whole leg.
– Bjarne Stroustrup, creator of C++
Sometimes, the elegant implementation is just a function. Not a method. Not
a class. Not a framework. Just a function.
– John Carmack
Such is modern computing: everything simple is made too complicated because
it’s easy to fiddle with; everything complicated stays complicated because
it’s hard to fix.
– Rob Pike
Java is like a variant of the game of Tetris in which none of the pieces
can fill gaps created by the other pieces, so all you can do is pile them
up endlessly.
– Steve Yegge
Languages that try to disallow idiocy become themselves idiotic.
– Rob Pike
The problem with object-oriented languages is they’ve got all this implicit
environment that they carry around with them. You wanted a banana but what
you got was a gorilla holding the banana and the entire jungle.
– Joe Armstrong
The purpose of software engineering is to control complexity, not to create
it.
– Dr. Pamela Zave
“design patterns” are concepts used by people who can’t learn by any method
except memorization, so in place of actual programming ability, they
memorize “patterns” and throw each one in sequence at a problem until it
works.
– Jason Garrett-Glaser (a.k.a. Dark_Shikari)
The object-oriented model makes it easy to build up programs by
accretion. What this often means, in practice, is that it provides a
structured way to write spaghetti code.
– Paul Graham
Assignment statements - even abstract ones - express very low-level
goals… Human programmers aren’t Turing machines - and the less their
programming systems require Turing machine techniques, the better.
– Alan Kay
When people react instantly, they’re not thinking, they’re doing a table
look up.
– Alan Kay
The basic principle of recursive design is making the parts as powerful as
the whole.
– Bob Barton
Science is not there to tell us about the universe, but to tell us how to
talk about the universe.
– Niels Bohr
All magic comes with a price.
– Rumplestiltskin, from Once Upon A Time
I did it because it was easy. It was a mistake. There were other
paths. Harder paths, and I wish I had taken them. … Let’s take the hard
path.
– Snow White, from Once Upon A Time
Programs should not only work, but they should appear to work as well.
– PDP-1X Dogma
Be conservative in what you do, be liberal in what you accept from others.
– Robust Principle
Show me your flow charts and conceal your tables and I shall continue to be mystified, show me your
tables and I won’t usually need your flow charts; they’ll be obvious.
– Fred Brooks
Bad programmers worry about the code. Good programmers worry about data structures and their relationships. – Linus Torvalds
Form follows function.
– Louis Sullivan
Symmetry is a complexity reducing concept (co-routines include sub-routines); seek it everywhere.
– Alan J. Perlis
Our customers feel the variance, not the mean. – What is Six Sigma? The roadmap to customer impact
Important skill: ability to estimate performance of a system design without actually having to build
it.
– Jeff Dean
The purpose of abstracting is not to be vague, but to create a new semantic level in which one can
be absolutely precise.
– Dijkstra
Program into a programming language, not in it.
– p.235, The Science of Programming