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, mt@carthage.edu

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 slashdot.org

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