The unavoidable price of reliability is simplicity.
    — Sir C.A.R. (Tony) Hoare (inventor of "Quicksort")

If you think it's simple, then you have misunderstood the problem.
    — Bjarne Stroustrup

Software development processes exist to manage the bell curve of ability in developers.
    — Ted Dziuba

I now have had my foggy crystal ball for quite a long time. Its predictions are invariably gloomy and usually correct, but I am quite used to that and they won't keep me from giving you a few suggestions, even if it is merely an exercise in futility whose only effect is to make you feel guilty.
    — E. W. Dijkstra

Not even vi uses vi key bindings for its command line.
    — PdS

Knowledge is just opinion that you trust enough to act upon.
    — Orson Scott Card

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

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 moral of the story is that with a contrived example, you can prove anything.
    — Joe Spolsky

Systems have sub-systems and sub-systems have sub-systems and so on ad infinitum-which is why we're always starting over.
    — Alan Perlis

The most important single aspect of software development is to be clear about what you are trying to build.
    — Bjarne Stroustrup

Problems cannot be solved at the same level of awareness that created them.
    — Einstein

Mediocre design provably wastes the world's resources, corrupts the environment, affects international competitiveness. Design is important.
    — Fred Brooks, The Design of Design

No amount of genius can overcome a preoccupation with detail.
    — Levy's Eighth Law

But I will argue that knowing complete product requirements up front is a quite rare exception, not the norm.
    — Fred Brooks, The Design of Design

Too many of today's real-time systems built with an RTOS are working by luck. Excess processing power may be masking design and analysis sins or the worst-case just hasn't happened-yet.
    — Michael Barr

It is far, far easier to make a correct program fast than it is to make a fast program correct.
    — Herb Sutter

Trying to outsmart a compiler defeats much of the purpose of using one.
    — Brian Kernighan & P.J. Plauger

How hard can it be? What can go wrong?
    — Jack Crenshaw,

Better a poor steam engine that runs, than a good one never finished.
    — R. G. Le Tourneau

Never put off until tomorrow what you can put off forever.
    — P.J. Plauger,

The software industry is in the same state of affairs that the pharmaceutical industry was in during the late nineteenth century.
    — Alan M. Davis

Great Designs Come from Great Designers: Not from Great Design Processes.
    — Fred Brooks

Proof by analogy is fraud.
    — Bjarne Stroustrup

One test result is worth one thousand expert opinions.
    — Wernher Von Braun

Men and months are interchangeable commodities only when a task can be partitioned among many workers with no communication among them.
    — Fred Brooks

Predictability and great design are not friends.
    — Fred Brooks, The Design of Design

Peel back the facade of rigorous methodology projects and ask why the project was successful, and the answer [is] people.
    — Jim Highsmith, Agile Software Development Ecosystems

Simplicity is a prerequisite for reliability.
    — E. W. Dijkstra

A program is no place to put crib notes on language semantics.
    — Stephen C. Dewhurst, C++ Common Knowledge: Essential Intermediate Programming

Consensus processes starve innovative design by eating the resource.
    — Fred Brooks, The Design of Design

The cheapest, fastest and most reliable components of a computer system are those that aren't there.
    — Gordon Bell

Missing requirements are the hardest requirements errors to correct.
    — Robert L. Glass, The Facts and Fallacies of Software Engineering

90% of the functionality delivered now is better than 100% delivered never.
    — Kernighan & Plauger

One of the things I hated most about agile is when management decides to "be" agile, only they don't want to change anything.
    — Daniel Markham in Agile Ruined My Life

Of the differing pronunciations of Niklaus Wirth's surname it is said that Europeans call him by name but Americans call him by value.
    — laonianren,

It seems that all too often the ability to write code and the ability to put a meaningful sentence together are inversely correlated.
    — Nigel Jones

As a rule of thumb the requirement for parallelism and concurrency within a piece of software should be discovered and not introduced.
    — Cameron Hughes

The Waterfall Model is wrong and harmful; we must outgrow it.
    — Fred Brooks, The Design of Design

Since FORTRAN should virtually eliminate coding and debugging, it should be possible to solve problems for less than half the cost that would be required without such a system.
    — IBM54, at the release of FORTRAN

We can solve any problem by introducing an extra level of indirection.
    — Butler Lampson (AKA "The Fundamental Theorem of Software Engineering", according to Andrew Koenig)

Multitasking is the enemy of focus.
    — Unknown, found

Organizational busy work tends to expand to fill the working day.
    — Tom DeMarco's "slight variation" on Parkinson's Law

Product procedure...must securely protect the crown jewels, but, equally important, it must eschew building high fences around the garbage cans.
    — Fred Brooks, The Design of Design

Simplify Essential Complexity; Diminish Accidental Complexity
    — Neal Ford, 97 Things Every Architect Should Know

A design style is defined by a set of microdecisions. A clear style reflects a consistent set. A clear style may not be a good style; a muddled one never is.
    — Fred Brooks, The Design of Design

GAD's Maxim #1: Network designs are based on Politics, Money, and The right way to do itóin that order.
    — Gary A. Donahue

If we knew what we were doing, it would not be called research, would it?
    — Albert Einstein

For every expert there is an equal and opposite expert.
    — Arthur C. Clark

Software work is the most complex that humanity has ever undertaken.
    — Fred Brooks, The Mythical Man-Month

Iíve been told that I can be a perfectionist ó but Iím working on that and expect that I can improve myself.
    — Forrest Shull

Better to be wrong while being right than to be right while missing the point...
    — Michael S. Kaplan

Originality is no excuse for ignorance.
    — Fred Brooks, The Design of Design

Design work doesn't just satisfy requirements, it elicits them.
    — Fred Brooks, The Design of Design

There are 10 types of people in this world: those who understand binary and those who don't.

The primary purpose of software estimation is not to predict a project's outcome; it is to determine whether a project's targets are realistic enough to allow the project to be controlled to meet them.
    — Steve McConnell

Process improvement is most valuable in raising the floor of a community's practice.
    — Fred Brooks, The Design of Design

Those missing components are also the most accurate (they never make mistakes), the most secure (they can't be broken into), and the easiest to design, document, test and maintain. The importance of a simple design can't be overemphasized.
    — Jon Bentley

The central tension in the software process comes from the fact that we must go from an informally identified need that exists in-the-world to a formal model that operates in-the-computer.
    — Bruce Blum

Technical skill is mastery of complexity while creativity is mastery of simplicity.
    — E.C. Zeeman

If you have unskilled people who work poorly together, no amount of process will save your projects.
    — Jim Highsmith

Simple, clear purpose and principles give rise to complex, intelligent behavior.
Complex rules and regulations give rise to simple, stupid behavior.
    — Dee Hock

Plans are nothing, Planning is everything.
    — Gen. Dwight Eisenhower

There is a general principle here: If you're not willing to force a failure, you probably don't know what the actual effects of a failure would be. You may think you know, but you don't.
    — Andrew Koenig

Men of lofty genius when they are doing the least work are the most active.
    — Leonardo da Vinci

People who are building applications are in fact building languages; fundamentally, programming has to do with developing languages suitable for particular applications.
    — Adin Falkoff

All of life is iterative. It goes back to the point I made earlier, which is you can't a priori know enough to even ask the right questions.
    — Grady Booch

Entrepreneurship boils down to the simple fact that a team of really smart people who can get things done are going to get smart, useful things done.
    — Joel Spolsky

Simple rules guide innovative, intelligent responses. Comprehensive rules guide rote, routine responses.
    — Jim Highsmith

Software is hard.
    — Donald Knuth, All Questions Answered

What this means in practical terms is that we are never quite sure whether a real-time system will be satisfactory until we have actually constructed it (and, sometimes, not even then).
    — Bran Selic, Garth Gullekson, Paul T. Ward

If you find that your organization can't make the hard decisions that Scrum demands, then high-risk, uncertain projects have very little probability of success in your organization.
    — Jim Highsmith

Opportunistic reuse != product line development.
    — Scott Gray

Everything outside a three-month window is the area of well-documented ignorance. (re PERT charts)
    — Ken Orr

Architecture is a hypothesis about the future that holds that subsequent change will be confined to that part of the design space encompassed by that architecture.
    — Brian Foote & Joseph Yoder, The Big Ball of Mud

Too many managers and executives try to reduce programming to a low-level assembly-line activity. Thatís inefficient, wasteful, costly in the long run, and inhumane to programmers.
    — Bjarne Stroustrup

Hofstadterís Law: It always takes longer than you expect, even when you take into account Hofstadterís Law.

A language that doesnít affect the way you think about programming is not worth knowing.
    — Alan Perlis

Data is not information, information is not knowledge, knowledge is not understanding, understanding is not wisdom.
    — Clifford Stoll

It is hard to write even the smallest piece of code correctly.
    — Joshua Bloch

Lightstoneís Convolution Principle: The concurrent development of multiple features operating on intersecting componentry will take longer to complete than the sum of the schedule estimations for each.

Alas, some will dismiss these arguments as matters of programming style, and developers enjoy arguing about style issues almost as much as they enjoy arguing about which is the One True Editor. (As if there's any doubt. It's Emacs.)
    — Scott Meyers, Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library

Testing can be used to show the presence of errors, never their absence!
    — Dijkstra

Never use brute force in fighting an exponential.
    — Andrei Alexandrescu

"Early optimization is the root of all evils," Knuth said, but on the other hand, "belated pessimization is the leaf of no good," according to Len Lattanzi.
    — Andrei Alexandrescu

Focusing on skills, communications, and community allows the project to be more effective and more agile than focusing on processes and plans.
    — Alistair Cockburn

Inside every large problem, is a small problem-struggling to get out.
    — Sir C.A.R. (Tony) Hoare (inventor of "Quicksort")

Organizations which design systems are constrained to produce designs which are copies of the communications structure of these organizations.
    — Melvin Conway (AKA Conway's Law, paraphrased as "If you have 4 groups working on a compiler, you'll get a 4-pass compiler.")

We get things wrong before we get things right.
    — Alistair Cockburn

Measure twice, optimize once.
    — Herb Sutter

If you have a procedure with 10 parameters, you probably missed some.
    — Alan Perlis

Process is not a substitute for skill.
    — Jim Highsmith

A programming language is low level when its programs require attention to the irrelevant.
    — Alan Perlis

If the success of their project depends entirely on shipping everything in their plan for the full project cycle, that's a recipe for failure.
    — J.D. Meier

Antipattern: Something must be done. This is something. Therefore we must do it!

A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.
    — Antoine de Saint-Exupťry

A methodology's weight is a product of its size and ceremony.
    — Jim Highsmith

Brian Kernighan's two rules for optimization:
1) Don't do it.
2) (For experts only) Don't do it yet.

When someone says, "I want a programming language in which I need only say what I wish done," give him a lollipop.
    — Alan Perlis

Remember, our concern is to protect against Murphy, not Machiavelli.
    — Herb Sutter

If you are guided by the agile principles, you will avoid doing things just because they are prescribed and you will look for opportunities to deliver useful functionality more quickly.
    — Suzanne & James Robertson

Software product development isnít only nonlinear, itís discontinuous.
    — Raymond Chen

Before you improve a process, you need to have one worth a name.
    — Ivar Jacobson, Masterminds of Programming)

Even in a platform that doesn't pretend to be absolutely portable, you have to pay a high toll for the convenience of a managed execution environment.
    — Danny Kalev

Any attempt to formulate all possible requirements at the start of a project will fail and would cause considerable delays.
    — Pahl and Beitz, Engineering Design

Well, here's a news flash: Requirements change. Designs that cannot tolerate changing requirements are poor designs to begin with.
    — Robert Martin, Working Effectively with Legacy Code

People don't change their minds. They die, and are replaced by people with different opinions.     — Arturo Albergati (if you don't know why I put this quote in the programming section, you either are sufficiently cynical or haven't worked for a large company)

Many jobs worth doing aren't worth doing right; a novelist is foolish to agonize over each word in a shopping list. Brilliance is typically the act of an individual, but incredible stupidity can usually be traced to an organization. A popular Western writer once confessed that when he was paid by the word, the heroes in his books took six bullets to die. When programmers are paid by the line of code, how do you suppose the array X[l . . lOOO] is initialized to zero? (Hint: programmers paid by the speedup initially produce very slow code, and programmers required to execute a certain percentage of branches during testing have a lot of statements of the form if true then. . . 1)
    — Jon Bentley, in Programming Pearls Communications of the ACM February 1986 Volume 29 Number 2

I would not give a fig for the simplicity on this side of complexity, but I would give my life for the simplicity on the other side of complexity.
    — Oliver Wendell Holmes

There is no one "root of all evil" in software development. Design is hard in many ways. People tend to underestimate the intellectual and practical difficulties involved in building a significant system involving software. It is not and will not be reduced to a simple mechanical "assembly line" process. Creativity, engineering principles, and evolutionary change are needed to create a satisfactory large system.
    — Bjarne Stroutrup (Masterminds of Programming)

There is an incredibly large spectrum of possible causes for program bugs, including simple typos, "thinkos," hidden limitations of underlying abstractions, and outright bugs in abstractions or their implementation.
    — Guido van Rossum

There are two kinds of software projects: those that fail, and those that turn into legacy horrors.
    — Peter Weinberger (Masterminds of Programming)

The key to performance is elegance, not battalions of special cases.
    — Jon Bentley and Doug McIlroy, found here

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.
    — Jamie Zawinski

SQL, Lisp, and Haskell are the only programming languages that I've seen where one spends more time thinking than typing.
    — Philip Greenspun

I object to doing things that computers can do.
    — Olin Shivers

Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.
    — Eric Raymond, "How to Become a Hacker"

Programs must be written for people to read, and only incidentally for machines to execute.
    — Abelson & Sussman, SICP, preface to the first edition

Despite the seemingly endless necessity for doing so, it's actually not possible to reverse-engineer intended invariants from staring at thousands of lines of code (not in C, and not in Python code either).
    — Tim Peters

It is a mistake to think that programmers wares are programs. Programmers have to produce trustworthy solutions and present it in the form of cogent arguments. Programs source code is just the accompanying material to which these arguments are to be applied to.
    — E. Dijkstra

This does not mean that I fail to recognise that Lisp is still #1 for key algorithmic techniques such as recursion and condescension. It just means that I have no idea how, or indeed if, Lisp handles exceptions.
    — Verity Stob

The first law of computer science: Every problem is solved by yet another indirection.
    — Bjarne Stroustrup

All problems in computer science can be solved by another level of indirection, but that usually will create another problem.     — David Wheeler, inventor of the subroutine

Object-oriented programming is an exceptionally bad idea which could only have originated in California.
    — Edsger Dijkstra

There are only two kinds of languages: the ones people complain about and the ones nobody uses.
    — Bjarne Stroustrup

Greenspun's 10th Rule of Programming: Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.
    — Greenspun's Tenth Rule

Despite the seemingly endless necessity for doing so, it's actually not possible to reverse-engineer intended invariants from staring at thousands of lines of code (not in C, and not in Python code either).
    — Tim Peters

It is a mistake to think that programmer's wares are programs. Programmers have to produce trustworthy solutions and present it in the form of cogent arguments. Programs source code is just the accompanying material to which these arguments are to be applied to.
    — E. W. Dijkstra

If we knew what we were doing, it wouldn't be called research.
    — Einstein

The primary purpose of the DATA statement is to give names to constants; instead of referring to pi as 3.141592653589793 at every appearance, the variable pi can be given that value with a DATA statement and used instead of the longer form of the constant. This also simplifies modifying the program, should the value of pi change.
    — The FORTRAN manual for the Xerox Computers (This sounds too bad to be true. Can anyone confirm this?)

The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense.
    — E. W. Dijkstra

It is practically impossible to teach good programming style to students that [sic] have had prior expose to BASIC; as potential programmers they are mentally mutilated beyond hope of regeneration.
    — E. W. Dijkstra

Beware of bugs in the above code; I have only proved it correct, not tried it.
    — Donald E. Knuth

Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin.
    — Bruce Schneier in Applied Cryptography, p.39, quoting Knuth quoting John von Neumann

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 W. Kernighan

Even the small children are used to questions like *Are you hungry?* It's very unlikely that they answer *Zero!* Yet, they have no formal knowledge of booleans. ;)
    — Petr Prikryl on comp.lang.python

Caveat hackor!
    — Jon Bentley

A programming language is low level when its programs require attention to the irrelevant.
    — Alan Perlis

Many jobs worth doing aren't worth doing right; a novelist is foolish to agonize over each word in a shopping list.
    — Jon Bentley in Programming Pearls Communications of the ACM February 1986 Volume 29 Number 2

You are not expected to understand this.
    — A comment from the source of UNIX 6th Ed, unix/slp.c, line 438

Real Users never know what they want, but they always know when your program doesn't deliver it.
    — Seen in ASR

That is not a mess on my desk. I am using a hashing algorithm to improve access time.
    — Mark Tomory's .sig file,

Intelligence: Finding an error in a Knuth text.
Stupidity: Cashing that $2.56 check you got.
    — a Slashdot sig, Quoted by Edward O'Connor

I am a design chauvinist. I believe that good design is magical and not to be lightly tinkered with. The difference between a great design and a lousy one is in the meshing of the thousand details that either fit or don't, and the spirit of the passionate intellect that has tied them together, or tried. That's why programming -- or buying software -- on the basis of "lists of features" is a doomed and misguided effort. The features can be thrown together, as in a garbage can, or carefully laid together and interwoven in elegant unification, as in APL, or the Forth language, or the game of chess.
    — Ted Nelson

Those who write software only for pay should go hurt some other field.
    — Erik Naggum (gnu.misc.discuss)

Syntactic sugar causes cancer of the semicolon.
    — Alan Perlis

It is easier to write an incorrect program than understand a correct one.
    — Alan Perlis

Simplicity does not precede complexity, but follows it.
    — Alan Perlis

There are two ways to write error-free programs; only the third one works.
    — Alan Perlis

Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.
    — Alan Perlis

If I don't understand lisp, it would be wise to not bray about how lisp is stupid or otherwise criticize, because my stupidity would be archived and open for all in the know to see.
    — Xah (comp.lang.lisp)

Of the four project development variables - scope, cost, time and quality - quality isn't really a free variable. The only possible values are "excellent" and "insanely excellent", depending on whether lives are at stake.
    — Kent Beck

Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make the additional features appear necessary.
    — Revised(5) Report on the Algorithmic Language Scheme

Premature optimization is the root of all evil.
    — Donald E. Knuth, From Structured Programming with goto Statements

For every complex problem, there is a solution that is simple, neat, and wrong.
    — H.L. Mencken

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

Indeed, when I design my killer language, the identifiers "foo" and "bar" will be reserved words, never used, and not even mentioned in the reference manual. Any program using one will simply dump core without comment. Multitudes will rejoice.
    — Tim Peters

Arrrrgh, the braindamage! It's not unlike the massively non-brilliant decision to use the period in abbreviations as well as a sentence terminator. Had these people no imagination at _all_?
    — Erik Naggum (comp.lang.lisp)

There are two kinds of large software systems: those that evolved from small systems and those that don't work.
    — Seen on

I have a feeling that any simple problem can be made arbitrarily difficult by imposing a suitably heavy administrative process around the development.
    — Joe Armstrong (comp.lang.functional)

Very clever implementation techniques are required to implement this insanity correctly and usefully, not to mention that code written with this feature used and abused east and west is exceptionally exciting to debug.
    — Erik Naggum, commenting on Algol-style "call-by-name"

...but I'd rather not reinvent the wheel if I don't have to. On the other hand, if the currently instantiated version of the wheel consists of a square rock covered with moss, I might as well just start fresh.
    — Roy Smith (comp.lang.python)

Just getting something to work usually means writing reams of code fast, like a Stephen King novel, but making it maintainable and high-quality code that really expresses the ideas well, is like writing poetry. Art is taking away.
    — Erik Naggum (comp.lang.lisp)

Counting lines is probably a good idea if you want to print it out and are short on paper, but I fail to see the purpose otherwise.
    — Erik Naggum (comp.lang.lisp)

We're already scrubbing the face of intuition with steel wool, setting it on fire, then putting it out with an axe.
    — Tim Peters, commenting on comparing recursive structures

Monte Carlo sampling is no way to understand code.
    — Gordon McMillan (comp.lang.python)

Once you understand how to write a program get someone else to write it.
    — Alan Perlis

I will not do it as a hack,
I will not do it on a Mac,
I will not do it for my friends,
I will not do it on weekends,
I will not write for Uncle Sam,
I won't do ADA, Sam-I-Am!
    — Gregory Bond

Simple things should be simple and complex things should be possible.
    — Alan Kay

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, uttered after the Gulf War but long before 9/11/01

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

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

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

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

We are on the verge: Today our program proved Fermat's next-to-last theorem.
    — Alan Perlis

There are only two kinds of languages: the ones people complain about and the ones nobody uses.
    — Bjarne Stroustrup

Object-oriented programming is an exceptionally bad idea which could only have originated in California.
    — Edsger Dijkstra