This is a subset (currently numbering 152) of my larger, more general quotes collection. What the quotes in this subset have in common is that I see them 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 judgment is the result of experience … Experience is the result of bad judgment.

—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

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”)

Enthusiasm jumps when there is a running system, even a simple one. One always has, at every stage in the process, a working system. I find that teams can grow much more complex entities in four months than they can build.

—Harlan Mills

Programming is the art of doing one thing at a time.

—Michael Feathers

Make it work, then make it beautiful, then if you really, really have to, make it fast. 90% of the time, if you make it beautiful, it will already be fast. So really, just make it beautiful!

—Joe Armstrong

Projects promoting programming in “natural language” are intrinsically doomed to fail.

—Edsger Dijkstra

There is never a single right solution. There are always multiple wrong ones, though.

—Dave Akin (Akin’s Laws of Spacecraft Design, #12)

Complexity is a fact of the world, whereas simplicity is in the mind.

—Donald Norman

Big changes are an illusion. All changes are small. There are only longer and shorter feedback cycles.

—Kent Beck

The single biggest problem in communication is the illusion that it has taken place.

—George Bernard Shaw

There is always power in understanding.

—Alton Brown

All models are wrong, but some are useful.

—George Box

Testing leads to failure, and failure leads to understanding.

—Burt Rutan

The programmer, like the poet, works only slightly removed from pure thought-stuff. [They] build castles in the air, from air, creating by exertion of the imagination.

—Fred Brooks in The Mythical Man-Month

Lacking the guarantee of Nature’s mathematical laws, the human sciences are much harder than rocket science.

—Edward Tufte

All long-lived programs are either implemented in dynamic languages, or eventually Greenspun themselves into subverting static programming languages to create a dynamic system.

—Paul Khuong

One real thing is closer to God than all the diagrams in the world.

—Robert Farrar Capon

For me, “engineering” means knowing that all decisions are tradeoffs. It means considering both upsides and downsides of each technical choice, and doing so with explicit consideration of the larger system context.

—Sarah Mei

The enjoyment of one’s tools is an essential ingredient of successful work.

—Donald Knuth

Some of the most crucial steps in mental growth are based not simply on acquiring new skills, but on acquiring new administrative ways to use what one already knows.

—Marvin Minsky

Abstraction is a great tool and a terrible goal.

—Jessica Kerr

The best programs are the ones written when the programmer is supposed to be working on something else.

—Melinda Varian

There’s one technique that you must use if you want people to listen to you: listen to them.

—Andy Hunt and Dave Thomas

When someone says “I want a programming language in which I need only say what I wish done,” give him a lollipop.

—Alan Perlis

The agile movement is not anti-methodology; in fact, many of us want to restore credibility to the word methodology. We want to restore a balance. We embrace modeling, but not in order to file some diagram in a dusty corporate repository. We embrace documentation, but not hundreds of pages of never-maintained and rarely-used tomes. We plan, but recognize the limits of planning in a turbulent environment.

—Jim Highsmith in History: The Agile Manifesto

The most valuable thing you can make is a mistakeyou can’t learn anything from being perfect.

—Adam Osborne

Be curious. Read widely. Try new things. I think a lot of what people call intelligence boils down to curiosity.

—Aaron Swartz

We are too much accustomed to attribute to a single cause that which is the product of several, and the majority of our controversies come from that.

—Marcus Aurelius

One particular talent stands out among the world-class programmers I’ve knownnamely, an ability to move effortlessly between different levels of abstraction.

—Donald Knuth

Logicians write about formal logic, but they don’t actually use it.

—Leslie Lamport

Last updated 27 January 2023