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 (This was a footnote in a 1992 peer-reviewed journal paper.)

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

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

Writing code … is not an exercise in manliness.

—Mark Hahn

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 (I love Emacs, 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 Mangione

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.


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.


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

Architecture is the tension between coupling and cohesion.

—Neal Ford

Programming is one of the most difficult branches of applied mathematics.

—Edsger W. Dijkstra

Anyone could learn LISP in one day, except that if they already knew Fortran, it would take three days.

—Marvin Minsky

So much complexity in software comes from trying to make one thing do two things.

—Ryan Singer

The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.

—Edsger Dijkstra

Problems worthy of attack prove their worth by hitting back.

—Piet Hein

Simple, clear purpose and principles give rise to complex, intelligent behavior.

Complex rules and regulations give rise to simple, stupid behavior.

—Dee Hock

Programmers spend the first 5 years of their career mastering complexity, and the rest of their lives learning simplicity

—Buzz Andersen

Overload, clutter, and confusion are not attributes of information, they are failures of design.

—Edward Tufte

The best performance improvement is the transition from the nonworking state to the working state.

—John Ousterhout

A week of coding can often save an hour of thought.

—Josh Bloch

Simplicity is the unavoidable price we must pay for reliability.

—C.A.R. Hoare (This is the pithy line that is most often quoted, but I think I prefer the expanded version.)

Good design adds value faster than it adds cost.

—Thomas C. Gale

The thing that makes software design difficult is that we must express thoughts about a problem and a solution we typically do not understand fully, using a language that does not contain many of our accustomed features of expression, to a system that is unforgiving of mistakes.

—Alistair Cockburn

The question of software correctness ultimately boils down to, “Does it do what we have in our minds, even the things we have not gotten around to thinking about yet?”

—Alistair Cockburn

Don’t shoot yourself in the foot with a magic bullet.

—Gerald Jay Sussman

Scope doesn’t creep; understanding grows.

—Jeff Patton

Sustainable development is development that meets the needs of the present without compromising the ability of future generations to meet their own needs.

The Brundtland Commission (This definition from the domain of public policy and economic development fits my understanding of software architecture quite well.)

Constraints are not limitations; they are insight.

—Steve Sanderson

If you are a creative person then you are never really off the clock. Even sleeping feels creative.

—Jennifer Carpenter

To hell with computer literacy. It’s absolutely ridiculous. Study mathematics. Learn to think. Read. Write.

—Butler Lampson (Given what “computer literacy” meant when Lampson said this in 1986, I agree. But I do believe coding should be taught as a fundamental skill, alongside the others he recommends.)

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.

—John Seddon

The most exciting phrase to hear in science, the one that heralds new discoveries, is not “Eureka!” but “That’s funny …”

—Isaac Asimov

The only secret of magic is that I’m willing to work harder on it than you think it’s worth.

—Penn Jillette

People forget how fast you did a job, but they remember how well you did it.

—Howard Newton

We in science are spoiled by the success of mathematics. Mathematics is the study of problems so simple that they have good solutions.

—Whitfield Diffie

I don’t know what I’ll need to learn next, but it will probably be something I previously dismissed as useless.

—John D. Cook

You don’t pay engineers to write code, you pay them to understand subtleties and edges of the problem. The code is incidental.

—Ted Dziuba

The purpose of abstractions is to conceal undesirable properties; desirable ones should not be hidden.

—Butler Lampson

Almost anything in software can be implemented, sold, and even used given enough determination. There is nothing a mere scientist can say that will stand against the flood of a hundred million dollars. But there is one quality that cannot be purchased in this way—and that is reliability. The price of reliability is the pursuit of the utmost simplicity. It is a price which the very rich find most hard to pay.

—C.A.R. Hoare in The Emperor’s Old Clothes (This is an expanded version of a shorter, more common quotation.)

Language design and implementation is engineering. We make decisions using evaluations of costs and benefits or, if we must, using predictions of those based on past experience.

—Russ Cox

If you think good architecture is expensive, try bad architecture.

—Brian Foote and Joseph Yoder in Big Ball of Mud

A good design is not the one that correctly predicts the future, it’s one that makes adapting to the future affordable.

—Venkat Subramaniam

You can prematurely optimize maintainability, flexibility, security, and robustness just like you can performance.

—John Carmack

The art of programming is the art of organizing complexity, of mastering multitude and avoiding its bastard chaos as effectively as possible.

—Edsger Dijkstra Notes on Structured Programming

In software development there’s no greater level of design detail than what is captured in the code itself.

—Kevin Hooke

To me programming is more than an important practical art. It is also a gigantic undertaking in the foundations of knowledge.

—Grace Hopper

Design depends largely on constraints.

—Charles Eames

An evolving system increases its complexity unless work is done to reduce it.

—Meir Lehman

Things are the way they are because they got that way.

—Gerald Weinberg (in Secrets of Consulting)

Sometimes the problem is to discover what the problem is.

—Gordon Glegg

Much of the essence of building a program is in fact the debugging of the specification.

—Fred Brooks

A complex system that works is invariably found to have evolved from a simple system that worked. The inverse proposition also appears to be true: a complex system designed from scratch never works and cannot be made to work. You have to start over, beginning with a simple system.

—John Gall (this is known as “Gall’s Law”)

Last updated 14 September 2018