Glenn Vanderburg

: Quotations on Software Design

This is a collection of quotations (collected from my larger, more general quotes collection) which I see as having some relevance to the craft of programming and software design. There is a conspicuous dominance of quotes which extol the virtues of simplicity (and the deceptive difficulties involved in achieving it).

Simplicity is the soul of efficiency.

—Austin Freeman
(in The Eye of Osiris)

… it is simplicity that is difficult to make.

—Bertholdt Brecht

Unix was not designed to stop people from doing stupid things, because that would also stop them from doing clever things.

—Doug Gwyn

Please don't fall into the trap of believing that I am terribly dogmatical about [the goto statement]. I have the uncomfortable feeling that others are making a religion out of it, as if the conceptual problems of programming could be solved by a single trick, by a simple form of coding discipline!

—Edsger Dijkstra

The designer of a new kind of system must participate fully in the implementation.

—Donald E. Knuth

… the designer of a new system must not only be the implementor and the first large-scale user; the designer should also write the first user manual. … If I had not participated fully in all these activities, literally hundreds of improvements would never have been made, because I would never have thought of them or perceived why they were important.

—Donald E. Knuth

More good code has been written in languages denounced as bad than in languages proclaimed wonderful—much more.

—Bjarne Stroustrup
(in The Design and Evolution of C++) (1994)

I have yet to see any problem, however complicated, which, when you looked at it in the right way, did not become still more complicated.

—Poul Anderson

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.R. Hoare

… with proper design, the features come cheaply. This approach is arduous, but continues to succeed.

—Dennis Ritchie

Simple things should be simple and complex things should be possible.

—Alan Kay

Premature optimization is the root of all evil in programming.

—C.A.R. Hoare

Bird-feeding, for human consumption and mnemonic purposes, is perfectly appropriate in comments, but should be kept out of protocols.

—John Klensin

The problem with using C++ … is that there's already a strong tendency in the language to require you to know everything before you can do anything.

—Larry Wall

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

It should be noted that no ethically-trained software engineer would ever consent to write a DestroyBaghdad procedure. Basic professional ethics would instead require him to write a DestroyCity procedure, to which Baghdad could be given as a parameter.

—Nathaniel S. Borenstein

The lyf so short, the craft so long to lerne.

—Geoffrey Chaucer

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 <throopw%sheol.uucp@dg-rtp.dg.com>

There are features that should not be used.
there are concepts that should not be exploited.
There are problems that should not be solved.
There are programs that should not be written.

—Richard Harter <rh@smds.com>

Writing code … is not an exercise in manliness.

—Mark Hahn <hahn@neurocog.lrdc.pitt.edu>

The trouble with the world is that the stupid are cocksure and the intelligent are full of doubt.

—Bertrand Russell

Luck is the residue of design.

—Branch Rickey

I think psychoanalyze-pinhead is the important lesson of GNU Emacs.

—Bennett Todd <bet@mordor.com>
(I actually like Emacs a lot, but I agree that there's a lesson there.
I'm just not sure what it is.)

It's hard to read through a book on the principles of magic without glancing at the cover periodically to make sure it isn't a book on software design.

—Bruce Tognazzini

A charlatan makes obscure what is clear; a thinker makes clear what is obscure.

—Hugh Kingsmill

Anybody who thinks a little 9,000-line program that's distributed free and can be cloned by anyone is going to affect anything we do at Microsoft has his head screwed on wrong.

—Bill Gates
(regarding Java, shortly before Microsoft licensed Java
and cancelled the Blackbird project)

The real tight interface is between the book and the reader—the world of the book is plugged right into your brain, never mind the [virtual reality] bodysuit.

—Bill McKibben
(in The Age of Missing Information)

[ActiveX] will have no security, no reliability, and although the demos might be impressive, they are simply clothes with no emperor: it is a pretty face and no more.

—Carmine <carmine@mangione.com>

Good judgement is the result of experience … Experience is the result of bad judgement.

—Fred Brooks

Programs must be written for people to read, and only incidentally for machines to execute.

—Abelson and Sussman

A language that doesn't have everything is actually easier to program in than some that do.

—Dennis Ritchie

A designer can mull over complicated designs for months. Then suddenly the simple, elegant, beautiful solution occurs to him. When it happens to you, it feels as if God is talking! And maybe He is.

—Leo Frankowski
(in The Cross-Time Engineer)

Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary.

from Revised4 Report on the Algorithmic Language Scheme
(I contend that this statement is true of software systems in general.)

Unformed people delight in the gaudy and in novelty.
Cooked people delight in the ordinary.

—Erik Naggum

… the cost of adding a feature isn't just the time it takes to code it. The cost also includes the addition of an obstacle to future expansion. … The trick is to pick the features that don't fight each other.

—John Carmack

Increasingly, people seem to misinterpret complexity as sophistication, which is baffling—the incomprehensible should cause suspicion rather than admiration. Possibly this trend results from a mistaken belief that using a somewhat mysterious device confers an aura of power on the user.

—Niklaus Wirth

Although NT has lots of the cool stuff I discovered in UNIX, what it doesn't have is personalities.

—Rik Farrow

To keep large programs well structured, you either need superhuman will power, or proper language support for interfaces.

—Greg Nelson

… with the right value system, making good short-term decisions leads to good long-term results. … I think that is the purpose of a value system. We need to figure out the way to live so that when we are in the middle of life we do the right thing. When our neighbor comes over to argue with us, we are not going to start thinking about how this will effect our life ten years from now, but we react according to the way we were taught, and the way we taught ourselves.

—Ralph Johnson
(Unlikely as it may seem, this quote came from
a discussion of programming practices.)

One of the great skills in using any language is knowing what not to use, what not to say. … There's that simplicity thing again.

—Ron Jeffries

The ideal engineer is a composite … he is not a scientist, he is not a mathematician, he is not a sociologist, or a writer; but he may use the knowledge and techniques of any or all of these disciplines in solving engineering problems.

—N. W. Dougherty

When we use a language, we should commit ourselves to knowing it, being able to read it, and writing it idiomatically.

—Ron Jeffries
(in Wiki:ReturnBooleanEvaluations)

Learning research tells us that the time lag from experiment to feedback is critical …

—Kent Beck
(in Wiki:IsExtremeProgrammingWacko)

If we spoke a different language, we would perceive a somewhat different world.

—Wittgenstein

One of the most dangerous (and evil) things ever injected into the project world is the notion of process maturity. Process maturity is for replicable manufacturing contexts. Projects are one-time shots. Replicability is never the primary issue on one-time shots. More evil than good has come from the notion that we should stick to the methodology. This is a recipe for non-adaptive death. I'd rather die by commission.

—David Schmaltz

Perilous to us all are the devices of an art deeper than we possess ourselves.

—J. R. R. Tolkien

We don't think of ourselves as being perfectionists, really. To us it's more about desperately trying to have it sound more or less OK.

—Donald Fagen

You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain when you can program.

—Alan Perlis

The greatest obstacle to discovery is not ignorance, but the illusion of knowledge.

—Daniel Boorstin

Nothing in progression can rest on its original plan. We may as well think of rocking a grown man in the cradle of an infant.

—Edmund Burke

Inspiration comes from the act of writing.

—Steven Dunn

Design and programming are human activities; forget that and all is lost.

—Bjarne Stroustrup

… as a slow-witted human being I have a very small head and I had better learn to live with it and to respect my limitations and give them full credit, rather than to try to ignore them, for the latter vain effort will be punished by failure.

—Edsger W. Dijkstra

Out of intense complexities, intense simplicities emerge.

—Winston Churchill

There is nothing permanent except change.

—Heraclitus

To a database person, every nail looks like a thumb. Or something like that.

—Jamie Zawinski

There's no sense being exact about something if you don't even know what you're talking about.

—John von Neumann

I don't know or trust Demeter.

—David Brady

Newton was a genius, but not because of the superior computational power of his brain. Newton's genius was, on the contrary, his ability to simplify, idealize, and streamline the world so that it became, in some measure, tractable to the brains of perfectly ordinary men.

—Gerald M. Weinberg

The skill of writing is to create a context in which other people can think.

—Edwin Schlossberg

If you like your remote messaging fat, dumb, and interoperable, you could also look into the SOAP libraries distributed with Ruby.

—Dave Thomas

Good engineering is not a matter of creativity or centering or grounding or inspiration or lateral thinking, as useful as those might be, but of decoding the clever, even witty, messages the solution space carves on the corpses of the ideas in which you believed with all your heart, and then building the road to the next message.

—Fred Hapgood

Java development without a little heresy would be a dull place, and a dangerous one.

—Bruce Tate

First you listen to the users; then you ignore them.

—Ken Arnold

The really important thing about Ajax is that it's tricked us into adopting a really powerful language when we wouldn't have chosen to do so on our own.

—Stuart Halloway

It would be well if engineering were less generally thought of, and even defined, as the art of constructing. In a certain important sense it is rather the art of not constructing: or, to define it rudely, but not inaptly, it is the art of doing well with one dollar, which any bungler can do with two after a fashion.

—Arthur Mellen Wellington

The hardest part of design … is keeping features out.

—Donald Norman

Simplicity does not mean want or poverty. It does not mean the absence of any decor, or absolute nudity. It only means that the decor should belong intimately to the design proper, and that anything foreign to it should be taken away.

—Paul Jacques Grillo

Ring the bells that still can ring,
Forget your perfect offering.
There is a crack in everything—
That's how the light gets in.

—Leonard Cohen

Every task involves constraint,
Solve the thing without complaint;
There are magic links and chains
Forged to loose our rigid brains.
Structures, structures, though they bind,
Strangely liberate the mind.

—James Falen

Beauty is more important in computing than anywhere else in technology because software is so complicated. Beauty is the ultimate defense against complexity.

—David Gelernter
in Machine Beauty: Elegance and the Heart of Technology

Simplicity is the most difficult thing to secure in this world; it is the last limit of experience and the last effort of genius.

—G. Sand

A simple [writing] style is the result of very hard work.

—William Zinsser

Design is the art of separation, grouping, abstraction, and hiding. The fulcrum of design decisions is change. Separate those things that change for different reasons. Group together those things that change for the same reason.

—Uncle Bob Martin

The tragedy of our time is that we've got it backwards, we've learned to love techniques and use people.

—Herb Kelleher

Everything is vague to a degree you do not realize 'til you have tried to make it precise.

—Bertrand Russell

Systems programmers are the high priests of a low cult.

—Bob Barton

The general problem with ambitious systems is complexity. [...] it is important to emphasize the value of simplicity and elegance, for complexity has a way of compounding difficulties.

—Fernando J. Corbató

When I'm working on a problem, I never think about beauty. I think only how to solve the problem.

But when I have finished, if the solution is not beautiful, I know it is wrong.

—R. Buckminster Fuller

Simplicity and elegance are unpopular because they require hard work and discipline to achieve and education to be appreciated.

—Edsger Dijkstra

Solving a problem simply means representing it so as to make the solution transparent.

—Herbert Simon

Last updated 4 July 2014